English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB è un database basato su archiviazione di file distribuiti e offre la capacità di creare indici spaziali geografici. Questo articolo fornirà un esempio di connessione a MongoDB utilizzando PHP e di determinare se le coordinate si trovano all'interno dell'area poligonale specificata.
1. Definire l'area poligonale
I punti di coordinate del poligono sono i seguenti:
113.314882,23.163055
113.355845,23.167042
113.370289,23.149564
113.356779,23.129758
113.338238,23.13913
113.330979,23.124706
113.313588,23.140858
113.323865,23.158204
113.314882,23.163055
2. Creazione del database in MongoDB
use testdb; db.createUser( { "user":"root", "pwd":"123456", "roles":[{"role" : "readWrite", "db":"testdb"}] } ); db.auth( { "user":"root", "pwd":"123456" } );
3. Utilizzo di PHP per inserire dati poligonali e determinare se le coordinate si trovano all'interno dell'area
MongoDBPolygons.class.php
<?php /** * Classe MongoDB Polygons, determinare se le coordinate si trovano all'interno dell'area poligonale * Date: 2016-09-30 * Author: fdipzone * Ver: 1.0 * * Func: * public add creare un'area poligonale * public checkInArea determinare se le coordinate si trovano all'interno dell'area poligonale * private connect connessione MongoDB */ class MongoDBPolygons { // inizio della classe // connessione mongo db private $_conn = null; // mongo db private $_db = null; /** * Inizializzazione * @param String $host indirizzo MongoDB * @param String $user Username * @param String $passwd Password * @param String $db Nome del database */ public function __construct($host, $user, $passwd, $db){ $this->_conn = $this->connect($host, $user, $passwd); $this->_db = $db; } /** * Inserisci i dati poligonali * @param String $collname Nome della tabella * @param Array $data Dati dei coordinate poligonali * @param Array $index Indice * @return Int */ public function add($collname, $data, $index){ // Crea l'indice $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); // Inserisci i dati $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; } /** * Verifica se si trova nell'area poligonale * @param String $collname Nome della tabella * @param Decimal $longitude Longitudine * @param Decimal $latitude Latitudine * @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; } /** * Connect to mongodb * @param String $host Database address * @param String $user Username * @param String $passwd Password * @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 ?>
demo.php
<?php require 'MongoDBPolygons.class.php'; echo '<strong>Dimostrazione di php MongoDB per verificare se le coordinate sono all'interno dell'area poligonale:</strong><br><br>'; // Chiama la classe di area poligonale MongoDB $oMongoDBPolygons = new MongoDBPolygons('localhost','root','123456','testdb'); // Indice $index = array('polygons'=>'2dsphere'); // Inserisci dati di area poligonale $data = array( array( 'polygons' => array( 'type' => 'Polygon', 'coordinates' => array( array( array(doubleval(113.314882),doubleval(23.163055)), array(doubleval(113.355845),doubleval(23.167042)), array(doubleval(113.370289),doubleval(23.149564)), array(doubleval(113.356779),doubleval(23.129758)), array(doubleval(113.338238),doubleval(23.13913)), array(doubleval(113.330979),doubleval(23.124706)), array(doubleval(113.313588),doubleval(23.140858)), array(doubleval(113.323865),doubleval(23.158204)), array(doubleval(113.314882),doubleval(23.163055)), ) ) ), ) ); $inserted = $oMongoDBPolygons->add('geo', $data, $index); if($inserted){ echo '1. Dati poligonali inseriti con successo<br><br>'; } // Verifica se le coordinate sono all'interno dell'area poligonale echo '2. Verifica se le coordinate della stazione ferroviaria di Guangzhou East (113.330908, 23.155678) sono all'interno dell'area<br>'; $result = $oMongoDBPolygons->checkInArea('geo', 113.330908, 23.155678); echo 'Risultato: coordinate della stazione ferroviaria di Guangzhou East (113.330908, 23.155678)'.($result ? 'nella regione' : 'al di fuori della regione'); echo '<br><br>'; echo '3. Verifica se le coordinate dell'edificio Hongfa (113.33831, 23.137335) sono nella regione<br>'; $result = $oMongoDBPolygons->checkInArea('geo', 113.33831, 23.137335); echo 'Risultato: coordinate dell'edificio Hongfa (113.33831, 23.137335)'.($result ? 'nella regione' : 'al di fuori della regione'); echo '<br><br>'; ?>
Output:
Esempio di php MongoDB per verificare se le coordinate sono nella regione poligonale:
1. Inserimento di dati poligonali con successo
2. Verifica se le coordinate della stazione ferroviaria di Guangzhou East (113.330908, 23.155678) sono nella regione
Risultato: le coordinate della stazione ferroviaria di Guangzhou East (113.330908, 23.155678) sono nella regione
3. Verifica se le coordinate dell'edificio Hongfa (113.33831, 23.137335) sono nella regione
Risultato: le coordinate dell'edificio Hongfa (113.33831, 23.137335) sono al di fuori della regione
Coordinate della stazione ferroviaria di Guangzhou East
Coordinate dell'edificio Hongfa
Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente la guida urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore è dell'autore originale, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito web eliminerà immediatamente il contenuto sospetto di violazione del copyright.