我正在尝试使用 MongDBs 2d 索引来运行地理空间查询,如下所述 - http://www.mongodb.org/display/DOCS/Geospatial 索引
它工作正常,我可以运行诸如此类的查询
db.places.find( { point : { $near : [151.1955562233925,-33.87107475181752] , $maxDistance : 0.1/111} } )
从 CLI 工具,但当我尝试在 PHP 中运行查询(使用 PECL mongo 驱动程序)时,我无法获得任何结果。
有关如何为 PHP 编写上述查询的任何帮助?有谁知道 PHP 驱动程序是否支持地理空间查询?
谢谢
5 回答
我在生产中使用 PHP 驱动程序进行地理查找。它看起来像这样:
此外,您可能需要考虑使用**$nearSphere**而不是$near 来获得更准确的坐标。有关更多信息,请参见mongo docs。
让我为您的 mongo 查询尝试确切的 PHP 端口。
请确保使用 float 对 lat-longs 进行类型转换。或者 mongo 扩展将把它视为一个字符串(惊讶,惊讶),并且查询将返回假设空条件(这需要我永远找到)。
编辑:查看 Cakephp mongo 驱动程序源,了解更多使用地理查询的方法。 https://github.com/ichikaway/cakephp-mongodb/blob/master/samples/controllers/geos_controller.php
我没有成功使用'near'作为 PHP 中查找条件的一部分。
您可以使用 MongoDb geoNear 命令:
在 PHP 中使用$nearSphere 命令的示例如下所示:
其中'loc'是 2d 地理空间索引,limit 是可选的。
根据MongoDB 网站中的文件
{ $near: { $geometry: { type: "Point" , coordinates: [ <longitude> , <latitude> ] }, $maxDistance: <distance in meters>, $minDistance: <distance in meters> } }
上述查询的 php 代码为: