基于地理位置的查询在 php 的 mongo 中不起作用

Posted

技术标签:

【中文标题】基于地理位置的查询在 php 的 mongo 中不起作用【英文标题】:Geolocation based query not working in mongo from php 【发布时间】:2012-01-20 11:56:30 【问题描述】:

我有一个名为 city 的 mongo 集合,具有以下 json


  "city_name": "Amesbury",
  "lat": "42.8583925",
  "lng": "-70.9300376",
  "geo_coords": [-70.9300376,42.8583925]

如您所见,此收藏的地理位置位于埃姆斯伯里。现在我正在尝试使用 php 获取它,我使用了以下代码。

$collection = $this->mongodb->city;
        $collection->ensureIndex(array('geo_coords' => '2d'));

        $radiusMiles = 500000; //get all results within 5 miles
        $radiusOfEarth = 3956; //avg radius of earth in miles

        $cursor = $collection->find(
            array('geo_coords' =>
                array('$within' =>
                    array('$centerSphere' =>
                        array(
                            array($lng, $lat), $radiusMiles/$radiusOfEarth
                        )
                    )
                )
            )
        );

对于此代码,我将波士顿的经度和纬度作为消息参数传递,并且我希望查询获取 amesbury 作为结果,因为它们都是相邻的城市,并且肯定彼此相距 500000 英里。

但是我的查询没有返回任何结果。问题可能是什么?

【问题讨论】:

你在 mongo javascript shell 中试过了吗? 【参考方案1】:

地理坐标的格式不正确。理想情况下,它应该是一个由两个数字组成的数组:

"geo": [-70.9300376, 42.8583925]

请阅读完整文档:http://www.mongodb.org/display/DOCS/Geospatial+Indexing

【讨论】:

尝试将坐标更改为正确的格式,但仍然没有成功,还有其他想法吗? 阅读文档mongodb.org/display/DOCS/… ,您的范围似乎也有点太大了。

以上是关于基于地理位置的查询在 php 的 mongo 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mongo中不区分大小写的搜索

在 mongo 上苦苦挣扎的地理空间查询

PHP / Mongo geoJSON 循环无效

如何在 Mongo 中运行地理空间查询?

GeoSpatial 查询在 mongo shell 中工作,但在 C# 驱动程序中没有过滤

GeoSpatial 查询在 mongo shell 中工作,但在 C# 驱动程序中没有过滤