In diesem Artikel wird hauptsächlich das Beispiel von php+mongodb vorgestellt, bei dem beurteilt wird, ob die Koordinaten innerhalb des angegebenen Polygonbereichs liegen. Interessierte Freunde können sich darauf beziehen.
MongoDB ist eine Datenbank, die auf verteilter Dateispeicherung basiert und die Möglichkeit bietet, geodatenbasierte Indizes zu erstellen. Dieser Artikel enthält ein Beispiel für die Verwendung von PHP, um eine Verbindung zu Mongodb herzustellen und zu bestimmen, ob die Koordinaten innerhalb eines bestimmten Polygonbereichs liegen .
1. Definieren Sie den Polygonbereich
Die Koordinatenpunkte des Polygons sind wie folgt:
113.314882,23.163055
113.355845,23.167042
113.370 289,23.149564.
113.356779,23.129758
113.338238,23.13913
113.330979,23.124706
113.313588,2 3.140858
113.323865,23 .158204
113.314882,23.163055
2. Erstellen Sie eine Datenbank in mongodb
use testdb; db.createUser( { "user":"root", "pwd":"123456", "roles":[{"role" : "readWrite", "db":"testdb"}] } ); db.auth( { "user":"root", "pwd":"123456" } );
3 Bestimmen Sie, ob die Koordinaten innerhalb des Bereichs liegen
<?php /** * MongoDB 多边形区域类,判断坐标是否在多边形区域内 * Date: 2016-09-30 * Author: fdipzone * Ver: 1.0 * * Func: * public add 创建多边形区域 * public checkInArea 判断坐标是否在多边形区域内 * private connect 连接mongodb */ class MongoDBPolygons { // class start // mongo db 连接 private $_conn = null; // mongo db private $_db = null; /** * 初始化 * @param String $host mongodb地址 * @param String $user 用户名 * @param String $passwd 密码 * @param String $db 数据库 */ public function __construct($host, $user, $passwd, $db){ $this->_conn = $this->connect($host, $user, $passwd); $this->_db = $db; } /** * 插入多边形数据 * @param String $collname 表名称 * @param Array $data 多边形坐标数据 * @param Array $index 索引 * @return Int */ public function add($collname, $data, $index){ // 创建索引 $cmd = array( 'createIndexes' => $collname, 'indexes' => array( array( 'name' => 'index', 'key' => $index, 'ns' => $this->_db.'.'.$collname ) ) ); $command = new MongoDB\Driver\Command($cmd); $this->_conn->executeCommand($this->_db, $command); // 插入数据 $bulk = new MongoDB\Driver\BulkWrite(); $inserted = 0; if($data){ foreach($data as $k=>$v){ $bulk->insert($v); } $result = $this->_conn->executeBulkWrite($this->_db.'.'.$collname, $bulk); $inserted = $result->getInsertedCount(); } return $inserted; } /** * 判断是否在多边形区域 * @param String $collname 表名称 * @param Decimal $longitude 经度 * @param Decimal $latitude 纬度 * @return Array */ public function checkInArea($collname, $longitude, $latitude){ $filter = array( 'polygons' => array( '$geoIntersects' => array( '$geometry' => array( 'type' => 'Point', 'coordinates' => array(doubleval($longitude), doubleval($latitude)) ) ) ) ); $options = array('limit'=>1); $query = new MongoDB\Driver\Query($filter, $options); $cursor = $this->_conn->executeQuery($this->_db.'.'.$collname, $query); $result = array(); if($cursor){ foreach($cursor as $v){ $result[] = $v; } } return $result? $result[0] : $result; } /** * 连接mongodb * @param String $host 数据库地址 * @param String $user 用户名 * @param String $passwd 密码 * @return DBLink */ private function connect($host, $user, $passwd){ $server = 'mongodb://'.$user.':'.$passwd.'@'.$host; try{ $conn = new MongoDB\Driver\Manager(); } catch (MongoDB\Driver\Exception\ConnectionException $e){ throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage(), 31); } return $conn; } } // class end ?>
3. Bestimmen Sie, ob die Koordinaten des Hongfa-Gebäudes (113.33831, 23.137335) innerhalb des Bereichs liegen.
Ergebnis: Die Koordinaten des Hongfa-Gebäudes (113.33831, 23.137335) liegen außerhalb des Bereichs.
Guangzhou East Railway Stationskoordinaten
Hongfa-Gebäudekoordinaten
Verwandte Empfehlungen:
Detaillierte Erläuterung verschiedener Methoden zur Statik von Seiten in PHP
Methode zur Implementierung der DES-Verschlüsselung und -Entschlüsselung im Einklang mit c#
Das obige ist der detaillierte Inhalt vonBeispiel für die Verwendung von php+mongodb, um zu bestimmen, ob die Koordinaten innerhalb des angegebenen Polygonbereichs liegen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!