问题标签 [geohashing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5048 浏览

algorithm - Geohash:使用 libgeohash 查找邻居

在我的应用程序中,我将所有用户的 Geohash 存储在一个表中,并希望使用这些 Geohash 查找用户的邻居。

根据我在Wiki上收集的有关 Geohash 的信息:

在数据库中使用时,geohashed 数据的结构有两个优点。首先,由 geohash 索引的数据将在连续切片中包含给定矩形区域的所有点(切片数量取决于所需的精度和 geohash“断层线”的存在)。这在单个索引查询比多索引查询更容易或更快的数据库系统中特别有用。其次,这种索引结构可用于快速而肮脏的邻近搜索——最近的点通常在最近的地理哈希中。

因此,例如要找到“sj8101b085”的邻居,我只是计划通过执行以下操作来搜索哈希:

然后通过一一减少哈希长度来触发相同的查询,即“sj8101b08%”、“sj8101b0%”等等,直到我得到所需数量的邻居。我的印象是这就是我需要做的。

但后来我发现同一篇文章底部提到的这个 C 库libgeohash 。该库有一个名为的函数GEOHASH_get_adjacent,它为我们提供给定散列的相邻散列。geohash 字符串表示地球上的一个矩形区域。这个函数返回代表相邻矩形的地理哈希。这意味着我必须以递归方式运行此函数(邻居,然后是邻居的邻居等等),直到获得所需数量的邻居。

现在我真的很困惑我该如何编写我的搜索算法?使用第一种方法还是使用第二种方法?

0 投票
1 回答
656 浏览

php - DynamoDB - geohash 和频繁更新的数据模型

我正在构建一个基于位置的“聊天”应用程序,并使用 Amazon 的 DynamoDB 来利用高吞吐量和自动扩展。

该应用程序将经常更新用户在数据库中的位置(我使用的是 PHP geohash 库)。它还将搜索特定地理半径内的用户。

我是 NoSQL 的新手(我有很多 MySQL 经验),希望对我的“用户”表进行建模。两个担忧:

1)如果用户的geohash / longitude / latitude 属性经常更新,这是否会导致DynamoDB出现问题(表锁定?)?在 MySQL 中,我会为这些值创建一个单独的表,以防止锁定整个用户表。在 DynamoDB 中我需要担心这个吗?

2) 在地理范围内搜索用户?这只是在 geohash 属性上设置一个全局二级索引并对其执行查询吗?分片会导致这个问题吗?

0 投票
0 回答
2070 浏览

ruby - 如何将 GeoJSON 多边形转换为 ruby​​ 中给定精度的 Geohashes 列表?

我目前正在使用已成功转换为 GeoJSON 多边形的 geopoint + radius 组合(失去了一点精度)。我现在需要的是转换为以预定精度与该区域相交的所有 Geohashes 的列表。

我发现geohash-poly完全符合我的要求,但它在 javascript/node-js 中而不是 ruby​​ 中。

那里有红宝石等价物吗?谢谢

0 投票
1 回答
887 浏览

hive - 查找最接近 lat 和 long 值的位置

我有两张桌子t1t2t1有 1/10 的大小t2)。每个表都有两列<Lat, Long>,其中包含一些点的纬度和经度。对于中的每一行,t1我想找到t2最接近它的行。这样做最有效的查询是什么?Hive 是否有任何类型的地理空间搜索库?

0 投票
2 回答
1086 浏览

elasticsearch - Kibana 不在平铺地图上显示结果

我有大约 3300 个填充了 geo_point 类型字段的文档。当我尝试在图块地图上可视化我的文档时,kibana 说“没有找到结果”。

我已经尝试将坐标设置为: - 字符串中的 geohash - [lon, lat] 数组 - 具有“lat”和“lon”属性的对象 - 字符串“lat,lon”

根据ES 文档,所有这些设置 geo_point 的方法都是允许的。Kibana 将此字段检测为 geo_point(字段名称附近有一个地球图标),但瓷砖地图上没有任何显示。

我怎么了?

我正在使用 Kibana 4.2、elasticsearch 2.0.0

0 投票
0 回答
238 浏览

postgresql - Lucene中50万个多边形的地理空间索引的快速方法

我试图找到大约 50 万个多边形的相交地理散列(精度长度为 6)。对于每个多边形,我必须找到该多边形内的所有 geohashes(精度长度为 6)并将其编入索引。我曾尝试使用 postgis st_geohash 和 st_intersect,然后将其存储在 redis 中,但对于我的用例来说它非常慢。我需要在 10 分钟内索引 50 万个多边形的地理哈希。

我读到它可以使用lucene来做到这一点。我尝试搜索“地理空间索引多边形”,但找不到好的链接。我是弹性搜索和 lucene 的初学者。

请告诉我该怎么做或指出正确的方向。

问候,

0 投票
0 回答
1790 浏览

php - 在 PHP 中生成 geohash 长度/精度为 4 的 geohash 列表

如果有人能引导我朝着正确的方向寻找解决我遇到的问题的方法,我将不胜感激。

我需要以 4 的精度生成全球所有可能的地理哈希,这样我就可以构建一个查找表来对位置数据库的数据进行分片。

我们计划根据 geo hash 的前 4 个前缀对数据库进行分片,Redis 中将有一个 key store 具有 geo hash 前缀及其各自的分片 IP。

有一些库可以生成散列并找到邻居,但是如何在 PHP 中生成所有可能具有特定精度的散列的列表?

有没有一种方法可以使用地理哈希库递归所有邻居并生成列表?我无法弄清楚其中的逻辑。

提前致谢。

更新 07-11-0215:这是我到目前为止所拥有的......

geohash.php 如下我将它从 Chris Veness 的 js 代码移植到 PHP。

问题是它生成了一个包含 30504 个元素的数组,但 geohash 精度为 3,它应该有 256(水平散列)*128(垂直散列)= 32768 个散列。

我不知道我哪里出错了?

0 投票
1 回答
67 浏览

geolocation - 地理数据查询优化

我正计划编写一个基于 Node.js 的 RESTful Web 服务,用于提供某种基于位置的功能的移动应用程序。最基本的用例看起来像这样:

  • 用户可以通过向包含资源名称和用户当前位置(纬度和经度)的 Web 服务发送请求来创建资源
  • Web 服务将在内部将有关此资源的元数据存储在某种集合中
  • 用户可以在网络服务中查询其当前位置 5 公里范围内的资源列表

我首先想到的问题之一是可扩展性。让我们假设在未来的某个时候,服务器将保存 100 万个资源的元数据。当用户查询附近的结果时,循环遍历 100 万个条目来计算距离将花费很长时间。

有许多服务具有相同的流程,所以我认为实施这样的事情不会花费我很多时间。我可能错了。

我现在有两天时间研究经过验证的方法和算法。到目前为止,我已经阅读了有关 QuadTrees、Geohases、支持空间索引的数据库、公式等的所有内容。但是,我仍然无法全面了解一切如何运作。

我希望也许从事过类似工作的人可以分享他的见解,即考虑到这个用例和我计划使用的技术,哪种方法可能是最合适的。此外,对如何实现它的简短描述将对我有很大帮助!

0 投票
4 回答
4224 浏览

python - Python快速计算大量距离

我有 36,742 个点的输入,这意味着如果我想计算距离矩阵的下三角形(使用 vincenty 近似值),我需要生成 36,742*36,741*0.5 = 1,349,974,563 距离。

我想保留彼此相距 50 公里以内的配对组合。我目前的设置如下

这显然需要几个小时。我想到的一些可能性:

  • 使用 numpy 向量化这些计算,而不是循环遍历
  • 使用某种散列来快速粗略截断(100 公里内的所有商店),然后只计算这些商店之间的准确距离
  • 不要将点存储在列表中,而是使用四叉树之类的东西,但我认为这只有助于近距离点的排名而不是实际距离 - >所以我猜是某种地理数据库
  • 我显然可以尝试使用haversine或project并使用欧几里得距离,但是我有兴趣使用最准确的测量方法
  • 利用并行处理(但是我在想出如何剪切列表以仍然获得所有相关对时遇到了一些困难)。

编辑:我认为这里肯定需要geohashing - 一个例子来自

但是,我还想对地理哈希返回的商店的距离计算进行矢量化(而不是循环)。

Edit2:Pouria Hadjibagheri - 我尝试使用 lambda 和 map:

它们都在61 秒左右(我将商店数量从 32,000 限制到 2000)。也许我用错了地图?

0 投票
0 回答
421 浏览

c++ - 在 C++ 中查找两个多边形之间的交集

我有 2 个多边形。“多边形 1:”以度数表示为(纬度,经度)。另一个“多边形 2:”是使用 geohash 编码的单元格 ID 表示的——对于我的具体情况,我假设精度 = 5。现在我想知道多边形 1 和多边形 2 是否相交?

例如,如果我的多边形(多边形 1)在纬度和经度(以度为单位)是:(77.164230,33.187725|77.164188,33.188013|77.164066,33.188336|77.164457,33.188676|77.164685,33.188861|77.165012,33.189296|77.165467,33.188591|77.165490,33.188213|77.165085,33.188057|77.164811,33.187902|77.164230,33.187725)

这里,77.164230 度是纬度,33.188013 度是经度。然后我想知道我的 geohash 编码的多边形“utxwg”(多边形 2)是否与多边形 1 相交?是否有一些算法可以用来确定是否存在交叉点?