首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Javascript将经度/经度坐标分类为geojson多边形

使用Javascript将经度/经度坐标分类为geojson多边形
EN

Stack Overflow用户
提问于 2012-12-08 04:57:16
回答 2查看 1.7K关注 0票数 2

我有一个geojson对象,使用经度/经度多边形定义Neighborhoods in Los Angeles。在我的web应用程序中,客户端必须处理空间事件的实时流,基本上是经度/经度坐标列表。如何在客户端(在浏览器中)使用Javascript将这些坐标分类为邻域?

我愿意假设邻里关系是排他性的。因此,一旦坐标被归类为邻域X,就没有必要为其他邻域进一步测试它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-09 13:53:36

有一组很好的答案here关于如何解决确定一个点是否包含在多边形中的一般问题。这里有两个选项,这两个选项在您的案例中听起来最有趣:

  • 正如@Bubble提到的,首先要做一个边界框检查。这是非常快的,我相信无论是投影坐标还是无保护坐标都可以很好地工作。如果你有SVG路径的邻居,你可以使用原生的.getBBox()方法来快速获得边界框。
  • 下一步我会尝试复杂的多边形,特别是如果你可以使用D3 v3,就是渲染到屏幕外的画布和检查像素颜色。D3 v3提供了一个地理路径帮助器,它可以生成画布路径和SVG路径,我怀疑如果你能预先渲染邻居,这可能会非常快。

更新:我认为这是一个有趣的问题,所以我想出了一个通用的基于栅格的插件:http://bl.ocks.org/4246925

这与D3和画布元素一起使用,以执行基于栅格的地理编码。一旦将要素绘制到画布上,实际的地理编码为O(1),因此它应该非常快-一个快速的浏览器内测试可以在大约0.5秒内对1000个点进行地理编码。如果你要在实践中使用它,你需要比我在这里更好地处理边缘情况。

如果你不是在浏览器中工作,你仍然可以用node-canvas来做这件事。

票数 3
EN

Stack Overflow用户

发布于 2012-12-08 06:09:47

我已经看到有一些库可以做到这一点,但它们中的大多数都是canvas库,它们可能比您想要的更依赖于近似,并且可能很难适应一个没有直接需要依赖它们进行交集的项目。

我能想到的另一个不太好的选择就是实现ray casting in javascript。这个算法在技术上并不完美,因为它适用于欧几里得几何,而纬度/经度坐标不是(因为它们表示曲面上的点),但对于城市中像居民区这样小的区域,我怀疑这是否重要。

这是一个google maps extension,它基本上完成了这个算法。你必须稍微适应它,但原理是非常相似的。重要的是,你必须将你的坐标预处理成两个坐标的路径,但这应该是可行的。

这绝不是便宜的-对于你必须分类的每个点,你必须测试邻域多边形中的每条线段。如果你期望用户在会话之间一次又一次地重复使用相同的坐标,我很想将他们的邻域存储为其数据的一部分。否则,如果您正在针对很多很多社区进行测试,那么可以实现一些简单的省时方法。例如,您可以对每个社区的极端坐标进行预处理(获取它们的最北、最东、最南和最西的点),并使用这些坐标来定义一个包含城镇的矩形。然后,您可以首先检查候选邻域的点是否位于矩形内,然后运行全光线投射算法。

*如果你决定走这条路,并且在适应这段代码时有任何困难,我很乐意帮助你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13770853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档