繁体   English   中英

php中的MongoDB地理空间查询

[英]MongoDB Geospatial queries in php

我正在尝试使用MongDBs 2d索引来运行地理空间查询,如下所述 - http://www.mongodb.org/display/DOCS/Geospatial+Indexing

它工作正常,我可以运行诸如此类的查询

db.places.find( { point : { $near : [151.1955562233925,-33.87107475181752]  , $maxDistance : 0.1/111} } )

从CLI工具,但当我尝试在PHP中运行查询(使用PECL mongo驱动程序)时,我无法获得任何结果。

有关如何为PHP编写上述查询的任何帮助? 有谁知道PHP驱动程序是否支持地理空间查询?

谢谢

我在生产中使用PHP驱动程序进行地理查找。 它看起来像这样:

$latLong = $geo->lookupLatLong($address);
$cursor = $coats->find(Array('latLong' => Array('$near' => $latLong)))->limit(10);

此外,您可能需要考虑使用$ nearSphere而不是$ near来获得更准确的坐标。 有关更多信息,请参阅mongo文档

让我为您的mongo查询尝试确切的PHP端口。

$collection->find(Array("point" => Array('$within' => Array('$center'=> Array(Array(151.1955562233925,-33.87107475181752), 0.1/111 ) ) )));

请确保使用float来对lat-long进行类型转换。 或者mongo扩展将把它视为一个字符串(惊讶,惊讶),并且查询将返回假设空条件(这需要我永远找到)。

编辑 :看看Cakephp mongo驱动程序源,了解更多使用地理查询的方法。 https://github.com/ichikaway/cakephp-mongodb/blob/master/samples/controllers/geos_controller.php

根据MongoDB网站上的文档

{ $near: { $geometry: { type: "Point" , coordinates: [ <longitude> , <latitude> ] }, $maxDistance: <distance in meters>, $minDistance: <distance in meters> } }

上述查询的php代码为:

$query = array(
                'loc' => array(
                    '$near' => array(
                        '$geometry' =>array(
                            'type' => 'Point',
                            'coordinates'=>array(floatval($lon),floatval($lat)),
                            '$maxDistance' => intval($max_distance),
                            '$mixDistance' => intval($min_distance)))));

我没有成功使用'near'作为PHP中查找条件的一部分。

您可以使用MongoDb geoNear命令:

$db->command(array('geoNear'=>'places','near'=>array(151.1955562233925,-33.87107475181752),'num'=>9));

在PHP中使用$ nearSphere命令的示例如下所示:

$lonlat = array($lon, $lat);
$cursor = $this->collection->find(Array('loc' => Array('$nearSphere' => $lonlat)))->limit($limit);

其中'loc'是2d地理空间索引,limit是可选的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM