[英]Snapping a draggable point to a vector tile set line in Mapbox GL JS using turf.js
[英]Detecting line intersections between a line string and polygon using Turf.js
我正在尝试编写一段 JavaScript 代码,允许用户分析他们在 map 上绘制的路线。 用户绘制完他们的路线后,我想确定他们绘制的路线是否跨越了任何感兴趣的区域。
为此,我使用 Turf.js 中的lineIntersect方法,它应该允许我传递LineString
和MultiPolygon
。
我创建了一个 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.