我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题

Posted

技术标签:

【中文标题】我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题【英文标题】:I'm having trouble inserting a Mongodb record with geospatial data in PHP 【发布时间】:2012-03-11 09:38:36 【问题描述】:

我正在尝试插入包含地理空间数据嵌套数组的记录。我什至尝试将数组设为对象,但也没有运气。这里或多或少是插入行:

$collection->insert($obj, array('safe'=>true));

一个有趣的事情是,当我将索引 'loc' 称为其他东西时,例如只是一个整数,插入工作。

这是应该进入 Mongodb 的数组,但不是:

Array
(
  [name] => Home
  [address] => 500 Pole Line Road
  [city] => Davis
  [state] => CA
  [zip] => 95618
  [loc] => Array
    (
      [lon] => -121.726710
      [lat] => 38.549576
    )

)

【问题讨论】:

您是否收到错误消息? 没有错误消息,但我发现奇怪的是,当我将数组索引从“loc”更改为“位置”或其他内容时,插入工作。这会扰乱地理空间索引吗? 我认为不应该,我已经看到了除 loc 之外的键示例。你必须试一试。 【参考方案1】:

MongoDB 不关心地理空间“字段”的键。它只需要前两个元素,第一个是经度,第二个是纬度。即使您将第一个命名为“纬度”,它仍然会被视为经度。我认为它不会插入的唯一原因可能是您在某些字段上有唯一键。

如果您要添加一个完整的工作(但很小)示例来说明您正在插入的内容,那么我可以更新答案,希望能显示出问题所在。

【讨论】:

好吧,这个问题完全令人尴尬,但发生的事情是我正在做一个 API 调用来获取纬度/经度,而这些数字最终是我试图通过 'loc 插入的字符串' 大批。我还不完全理解的事情是为什么不允许使用字符串。显然,除非 mongo 足够聪明地转换数据类型,否则地理空间索引将无法使用它,但是某些东西限制了整个插入工作。我猜它要么是 php 驱动程序要么是 mongo,但有人不喜欢这些字符串!它很容易通过类型转换为 double 来修复。【参考方案2】:
array( 'loc' => array( floatval($lon),  floatval($lat)))

【讨论】:

以上是关于我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用带有 nodejs 的 bigquery 插入方法插入地理类型数据

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

MongoDB中是不是有类似反向地理空间查询的东西?

如何将空间索引的数据提取到我的 PHP 应用程序中?

地理位置跟踪并插入 mysqlDatabse