Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für die Verwendung von php+mongodb, um zu bestimmen, ob die Koordinaten innerhalb des angegebenen Polygonbereichs liegen

Beispiel für die Verwendung von php+mongodb, um zu bestimmen, ob die Koordinaten innerhalb des angegebenen Polygonbereichs liegen

墨辰丷
墨辰丷Original
2018-05-31 09:57:041475Durchsuche

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(
      &#39;createIndexes&#39; => $collname,
      &#39;indexes&#39; => array(
        array(
          &#39;name&#39; => &#39;index&#39;,
          &#39;key&#39; => $index,
          &#39;ns&#39; => $this->_db.&#39;.&#39;.$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.&#39;.&#39;.$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(
      &#39;polygons&#39; => array(
          &#39;$geoIntersects&#39; => array(
              &#39;$geometry&#39; => array(
                  &#39;type&#39; => &#39;Point&#39;,
                  &#39;coordinates&#39; => array(doubleval($longitude), doubleval($latitude))
              )
          )
      )
    );
    $options = array(&#39;limit&#39;=>1);
    $query = new MongoDB\Driver\Query($filter, $options);
    $cursor = $this->_conn->executeQuery($this->_db.&#39;.&#39;.$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 = &#39;mongodb://&#39;.$user.&#39;:&#39;.$passwd.&#39;@&#39;.$host;
    try{
      $conn = new MongoDB\Driver\Manager();
    } catch (MongoDB\Driver\Exception\ConnectionException $e){
      throw new ErrorException(&#39;Unable to connect to db server. Error:&#39; . $e->getMessage(), 31);
    }
    return $conn;
  }

} // class end
?>

Ergebnis: Die Koordinaten des Bahnhofs Guangzhou Ost (113.330908, 23.155678) liegen innerhalb des Bereichs

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

Das Obige ist der gesamte Inhalt dieses Artikels Ich hoffe, dass es für das Studium aller hilfreich sein wird.



Verwandte Empfehlungen:

Detaillierte Erläuterung verschiedener Methoden zur Statik von Seiten in PHP

PHP-Methode zum Lesen großer CSV-Dateien und deren Import in die Datenbank


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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn