php+mongodb判断坐标是否在指定多边形区域内的实例
php  /  管理员 发布于 7年前   152
MongoDB是一个基于分布式文件存储的数据库,并提供创建基于地理空间的索引的能力,本文将提供使用PHP连接mongodb,判断坐标是否在指定多边形区域内的实例。 1.定义多边形区域 多边形的坐标点如下: 113.314882,23.163055 2.在mongodb创建数据库 3.使用php插入多边形数据,并判断坐标是否在区域内 MongoDBPolygons.class.php demo.php 输出: 1.成功插入多边形数据 2.判断广州东站坐标(113.330908, 23.155678)是否在区域内 3.判断宏发大厦坐标(113.33831, 23.137335)是否在区域内 广州东站坐标 宏发大厦坐标 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
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.163055use testdb;db.createUser( { "user":"root", "pwd":"123456", "roles":[{"role" : "readWrite", "db":"testdb"}] } );db.auth( { "user":"root", "pwd":"123456" } );
_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?>
php MongoDB 判断坐标是否在多边形区域内演示:
';// 调用mongodb多边形区域类$oMongoDBPolygons = new MongoDBPolygons('localhost','root','123456','testdb');// 索引$index = array('polygons'=>'2dsphere');// 插入多边形区域数据$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.成功插入多边形数据
';}// 判断坐标是否在多边形区域echo '2.判断广州东站坐标(113.330908, 23.155678)是否在区域内
';$result = $oMongoDBPolygons->checkInArea('geo', 113.330908, 23.155678);echo '结果:广州东站坐标(113.330908, 23.155678)'.( $result? '在区域内' : '在区域外');echo '
';echo '3.判断宏发大厦坐标(113.33831, 23.137335)是否在区域内
';$result = $oMongoDBPolygons->checkInArea('geo', 113.33831, 23.137335);echo '结果:宏发大厦坐标(113.33831, 23.137335)'.( $result? '在区域内' : '在区域外');echo '
';?>
php MongoDB 判断坐标是否在多边形区域内演示:
结果:广州东站坐标(113.330908, 23.155678)在区域内
结果:宏发大厦坐标(113.33831, 23.137335)在区域外您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号