繁体   English   中英

使用 Turf.js 检测线串和多边形之间的线交点

[英]Detecting line intersections between a line string and polygon using Turf.js

我正在尝试编写一段 JavaScript 代码,允许用户分析他们在 map 上绘制的路线。 用户绘制完他们的路线后,我想确定他们绘制的路线是否跨越了任何感兴趣的区域。

为此,我使用 Turf.js 中的lineIntersect方法,它应该允许我传递LineStringMultiPolygon

我创建了一个 Turf.js MultiPolygon

{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "MultiPolygon",
    "coordinates": [
      [
        [
          51.50836874890726,
          -0.091989636996398
        ],
        [
          51.50797826040486,
          -0.088994163337176
        ],
        [
          51.507701047593805,
          -0.085230241948645
        ],

(完整的 object 有太多字符无法在此处发布,因此我将完整的 output 粘贴到CodePen

并将用户的路线转换为 Turf.js LineString

{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [
        51.50350693825546,
        -0.027165818854444357
      ],
      [
        51.50115610069437,
        -0.041240038776924066
      ]
    ]
  }
}

但是,当我将这两个对象传递给lineIntersect方法时:

turf.lineIntersect(myLineString, myMultiPolygon);

我收到以下错误:

Uncaught Error: coordinates must contain numbers
    com turf/turf/turf.min.js:1

在特征数据的第 8782 行有一个额外的数字4

(Line 8782)
        [4
          51.49960254940379,
          -0.093191432240797
        ],

消除后就可以使用了。

...
var feat1 = ... //that corrected code
var turf_pgon1 = turf.polygon(feat1.geometry.coordinates);
var line1 = {
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [
        51.50350693825546,
        -0.027165818854444357
      ],
      [
        51.50115610069437,
        -0.041240038776924066
      ]
    ]
  }
}

// turf-intersection
var ans = turf.lineIntersect(line1, turf_pgon1);

获取交点的坐标。

var xy1 = ans.features[0].geometry.coordinates; //[ 51.503118870662334, -0.02948913916413884 ]
var xy2 = ans.features[1].geometry.coordinates; //[ 51.50157899855393, -0.038708193285440035 ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM