MongoDB是一个基于分布式文件存储的数据库,并提供创建基于地理空间的索引的能力,本文将提供使用服务器端编程语言(专业超文本预处理器的缩写)连接mongodb,判断坐标是否在指定多边形区域内的实例。
1.定义多边形区域
多边形的坐标点如下:
113.314882,23.163055113.355845,23.167042113.370289,23.149564113.356779,23.129758113.338238,23.13913113.330979,23.124706113.313588,23.140858113.323865,23.158204113.314882,23.163055
2.在mongodb创建数据库
使用testdbdb。创建用户({ ' user ' : ' root ',' pwd':'123456 ',' roles ' :[{ ' role ' : ' read write ',' db ' : ' testdb ' }]});db。auth({“user”:“root”,“pwd”:“123456”});3.使用服务器端编程语言(专业超文本预处理器的缩写)插入多边形数据,并判断坐标是否在区域内
MongoDBPolygons.class.php
?php/** * MongoDB多边形区域类,判断坐标是否在多边形区域内*日期: 2016-09-30 *作者: fdipzone * ver : 1.0 * * func : *公共添加创建多边形区域*公共支票账户判断坐标是否在多边形区域内*专用连接连接mongodb */类MongoDB多边形{ //类开始//mongo db连接private $ _ conn=null//mongo db private $ _ db=null;/** * 初始化* @param String $host mongodb地址* @ param String $用户用户名* @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 $数据多边形坐标数据* @ param Array $索引索引* @返回Int */public函数添加($collname,$data,$index){ //创建索引$ cmd=array(' create indexes '=$ coll name,' indexes '=array(array(' name '=' index ',' key'=$index,' ns'=$this-_db).'.'。$ coll name)));$ Command=新MongoDB Driver Command($ cmd);$ this-_ conn-execute命令($ this-_ db,$ command);//插入数据$ bulk=new MongoDB Driver bulk write();$ insert=0;if($ data){ foreach($ data as $ k=$ v){ $ bulk-insert($ v);} $ result=$ this-_ conn-执行大容量写入($ this-_ db .'.'。$collname,$ bulk);$ insert=$ result-getInsertedCount();}返回插入的$个;} /** * 判断是否在多边形区域* @param String $collname表名称* @param十进制$经度经度* @param十进制$纬度纬度* @返回数组*/公共函数checkInArea($ coll name,$经度,$纬度){ $ filter=Array('多边形'=Array($ geo交集'=Array($ geometry '=Array(' type '=' Point ','坐标'=Array(double val($经度),双精度值($纬度)))));$ options=array(' limit '=1);$query=新MongoDBDriverQuery($filter,$ options);$ cursor=$ this-_ conn-执行查询($ this-_ db .'.'。$collname,$ query);$ result=array();if($ cursor){ foreach($ cursor as $ v){ $ result[]=$ v;} }返回$结果?$ result[0]: $ result;} /** * 连接mongodb * @param String $host数据库地址* @ param String $用户用户名* @param String $passwd密码* @ return DBLink */private function connect($ host,$user,$ passwd){ $ server=' MongoDB :/' .$用户.':'.$passwd .'@'.$ host尝试{ $ conn=new MongoDB Driver Manager();} catch(MongoDB Driver Exception ConnectionException $ e){ 0抛出新的错误异常('无法连接到数据库服务器。错误: '。$e-getMessage(),31);}返回$ conn}} //类结束?demo.php
?PHP require ' MongodPointS . class . PHP ';Echo 'strongphp MongoDB判断是否在多边形区域演示坐标:/strong brbr ';//调用mongodb多边形区域类$ omongodbpolygons=new MongoDB多边形(' localhost ',' root ',' 123456 ',' testdb ');//index $ index=array('多边形'=' 2d sphere ');//插入多边形区域数据$ data=array(array(' polygons '=array(' type '=' polygon ',' coordinates '=array(array(double val(113.314882))、doubleval(23.163055))、array(doubleval(113.355845)、doubleval(23.167042))、array(doubleval(113.370289)、doubleval(23.149564))、array(double val(23.149564)$ insert=$ omongdbpolygons-add(' geo ',$data,$ index);if($ insert){ echo ' 1。已成功插入多边形数据brbr ';}//判断坐标是否在多边形区域echo '2。判断广州东站坐标(113.330908,23.155678)是否在br '区域;$ result=$ omongodopolyms-checkInArea(' geo ',113.330908,23.155678);回声'结果:广州东站坐标(113.330908,23.155678)'。($结果?区域内‘:’区域外’);echo“brbr”;回声3号。判断宏发大厦坐标(113.33831,23.137335)是否在br '区域;$ result=$ omongodopolyms-checkInArea(' geo ',113.33831,23.137335);‘echo’结果:宏发大厦坐标(113.33831,23.137335)’。($结果?区域内‘:’区域外’);echo“brbr”;输出:php MongoDB判断是否在多边形区域演示坐标:
1.成功插入多边形数据
2.判断广州东站坐标(113.330908,23.155678)是否在区域内。结果:广州东站坐标(113.330908,23.155678)在区域内
3.确定宏发大厦(113.33831,23.137335)坐标是否在该区域。结果:宏发大厦(113.33831,23.137335)坐标在区外
广州东站坐标
宏发大厦坐标
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。