- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我最近发现了 Google 的开源 S2 库
https://github.com/google/s2geometry
我目前正在编写一个应用程序,需要在给定原始目标点的情况下找到 K 个最近点。目前,我在包含纬度/经度值的列上使用带有地理空间索引的 PostgreSQL 来实现此目的 - 但是,当我注意到 S2 时,我正在寻找替代方案。
我对图书馆比较陌生,有一些疑问。
1)是否可以使用S2库找到K个最近点
2) S2 中的查询与地理空间索引相比有多快(优/劣/相同/等)
最佳答案
Google 的 S2 库是地理散列的一种形式。它可用于显着优化您的地理查找,因为它只是一个哈希/ID 查找。
一种索引方法可能是:
在相当大的 S2 单元级别上索引您关心的所有点。您应该评估您的分数并查看适合您的级别based on this chart .
检索时,将您的搜索点转换为该级别的 S2 单元格,然后基于此拉取所有候选点。
(可选,看你关心的精度)计算候选点和搜索点的距离并排序
这种性能提升有一些折衷:
在你的点上索引 S2 单元意味着更多的存储空间(每个 id 64 位整数)
您可能会错过查询所依据的 S2 单元格之外的点。您可以在 S2 的多个级别上建立索引以确保检索到足够的点。根据您的点密度,这可能不是问题。
通过 S2 单元格 ID 检索实际上不会为您提供点之间的距离 - 您必须自己计算
这是来自 Node S2 library 的代码示例:
const s2 = require('@radarlabs/s2');
const user1LongLat = [-73.95772933959961, 40.71623280185081];
const user2LongLat = [-73.95927429199219, 40.71629785715124];
const user3LongLat = [-73.99206161499023, 40.688708709249646];
const user1S2 = ["user1", new s2.CellId(new s2.LatLng(user1LongLat[1], user1LongLat[0])).parent(13)];
const user2S2 = ["user2", new s2.CellId(new s2.LatLng(user2LongLat[1], user2LongLat[0])).parent(13)];
const user3S2 = ["user3", new s2.CellId(new s2.LatLng(user3LongLat[1], user3LongLat[0])).parent(13)];
const groups = {};
[user1S2, user2S2, user3S2].forEach(([userId, cellId]) => {
const group = groups[cellId.token()] || [];
group.push(userId);
groups[cellId.token()] = group;
});
const searchPointLongLat = [-73.98991584777832, 40.69528168934989];
const searchPointS2 = new s2.CellId(new s2.LatLng(searchPointLongLat[1], searchPointLongLat[0])).parent(13);
console.log(searchPointS2.token()); // '89c25a4c'
console.log(groups); // { '89c2595c': [ 'user1', 'user2' ], '89c25a4c': [ 'user3' ] }
const closePoints = groups[searchPointS2.token()];
console.log(closePoints); // [ 'user3' ]
这是一个 map visualization of the S2 tokens that were created .
长话短说,是的,它是一种哈希形式,因此您可以通过牺牲存储空间来获得更快的性能,但您可能需要根据自己的要求调整准确性的某些方面。
关于geolocation - 可以使用 S2 库找到 K 个最近点(并且有效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823409/
我正在编写需要获取设备位置的 Windows Phone 8 应用(不跟踪更改,只获取位置)。我在起始页的 OnNavigatedTo() 方法中添加了下一个代码,但在启动应用程序后,进度指示器即使在
工作灯 6.2.0.00-20120814-0824 位置代码在浏览器模拟器中运行良好,但在 Android 模拟器中失败,成功或失败回调均未触发。 Logcat 显示: 10-06 16:00:40
我向 google geolocation api 发送了两个请求:https://www.googleapis.com/geolocation/v1/geolocate?key=[mykey] 第一
Type 'GeolocationOriginal' is not assignable to type 'Provider'. Type 'GeolocationOriginal' is missi
我正在开发一个带有谷歌地图的网络应用程序,并使用 getCurrentPosition() 获取用户位置。这很好用,但我需要随着时间的推移跟踪用户位置。 为此,我打算使用 watchPosition(
我正在尝试搜索一个地址,然后尝试通过 Geolocator 获取该位置的位置,然后尝试将相机位置设置到该位置,但它不起作用。 我发现了 Geolocator 的两种方法的一些异常(exception)
我在 Windows 商店单元测试项目中进行了此单元测试,使用 this overload of GetGeopositionAsync地理定位器: [TestMethod] public async
这是我的情况;我构建了一个非常简单的网络应用程序,用于查找用户位置并将其绘制在 Google map 上。这是我的代码:http://pastebin.com/d3a185efd 当我测试它时,我的位
我有一个表,其中包含位置列数据作为经纬度信息,如何获取多边形内位置的记录 多边形点 [ [42.811521745097906, -105.60058593749999], [33.9
获取网络请求来源位置(国家级别)的最佳方式是什么? 最佳答案 一般来说有3种方式: 使用 GeoIP 或将 IP 映射到物理位置的一些类似数据库或服务 使用 W3C 地理定位 API(仅受较新的浏览器
我们一直需要为我们的一些产品实现一些地理定位服务集成。有很多 3rd 方公司提供免费和付费的地理位置服务和数据库,这些服务和数据库有时会不断更新,有时会每月更新一次。 这些服务从哪里获得他们分发的数据
如何使用经度和纬度找到最近的机场? 任何特定的网络服务和任何数据库来实现? 最佳答案 我发现的一个 WebService 是 airport.pidgets.com 这是一个例子: XML 格式 ht
在许多网站上,我看到打印出我当前所在的城市(例如“Hello to Berlin.”)。他们是怎么做到的?为此需要什么? 我想主要部分是这里的 javascript,但是在我自己的应用程序中实现这样的
大家好, 我正在创建一个使用 Geolocation API 来定位最终用户的 Web 应用程序。它在我能想到的几乎所有平台上都运行良好,除了 Internet Explorer 9。不过事情变得有点
我目前正在使用“区域”示例代码: https://developer.apple.com/library/ios/#samplecode/Regions/Introduction/Intro.h tm
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我在筛选 twitter API 时遇到了一些麻烦。我正在尝试搜索某个位置附近的推文,然后查看它们的精确(或近似)地理坐标。我知道 geo 字段已被弃用,现在我们应该使用“place”字段。不幸的是,
我需要能够评估一个位置的地理坐标有多远。我根据几个关键指标对远程度进行评分,到目前为止,我只能计算所有必需指标的一个子集: 给定坐标处的蜂窝接收。更具体地说,坐标周围的蜂窝塔密度。这可以使用 open
我正在开发GeoTargeting应用程序。我很好奇地球上某个点的经度和纬度是否可以改变? 如果您知道自由女神像的确切位置,那么如何确定经度和纬度将保持不变。 它是根据季节,一年中的时间还是随着时间的
由于Cassandra基于Dynamo纸(分布式,自平衡哈希表)+ BigTable,因此存在一些空间索引可以很好地适合该范式(quadkey或geohash)。是否有未实现地理空间支持的原因? 您可
我是一名优秀的程序员,十分优秀!