javascript - 使用 Javascript 将 lon/lat 坐标分类为 geojson 多边形

标签 javascript node.js d3.js geospatial geojson

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

我愿意假设社区是排他性的。因此,一旦某个坐标被分类为邻域 X,就无需进一步测试其他邻域。

最佳答案

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

  • 正如@Bubbles 提到的,首先进行边界框检查。这非常快,我相信无论是投影坐标还是未 protected 坐标都应该可以正常工作。如果您有社区的 SVG 路径,则可以使用 native .getBBox() 方法快速获取边界框。

  • 对于复杂的多边形,我要尝试的下一件事是渲染到离屏 Canvas 并检查像素颜色,特别是如果您可以使用 D3 v3。 D3 v3 提供了一个地理路径助手,可以生成 Canvas 路径以及 SVG 路径,我怀疑如果您可以预渲染邻域,这确实会非常快。

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

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

如果您不在浏览器中工作,您仍然可以使用 node-canvas 来执行此操作.

关于javascript - 使用 Javascript 将 lon/lat 坐标分类为 geojson 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770853/

相关文章:

node.js - WebSocket 握手期间 socket.io nginx 配置错误 : 'Connection' header value is not 'Upgrade' : keep-alive

d3.js - 尝试从 d3.js SVG 图上的 x 坐标检索 x 值

javascript - 使用 web-inspector 检测用户是否更改了某些内容

javascript - 尝试通过 Vue.js 中的 API 控制 Plyr

javascript - Node.js Q promise then() 链接不等待

javascript - 延迟到下一个数据项,一个一个追加,一次又一次

javascript - d3.map() 函数未返回预期结果

javascript - Node.js 中的 JavaScript/ECMAScript 数组是 "sparse"吗?

javascript - 为 Android 构建 Ionic 时出现 "CALL_AND_RETRY_LAST Allocation failed"错误

javascript - Q promise .then() 未定义