我正在尝试写一段JavaScript代码,允许用户分析他们在地图上绘制的路线。在用户绘制完他们的路线之后,我想确定他们绘制的路线是否跨越了任何感兴趣的区域。
为此,我在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
],
(完整的对象有太多的字符无法在这里发布,所以我将完整的输出粘贴到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
发布于 2020-06-27 17:33:29
在特征数据中的第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 ]
https://stackoverflow.com/questions/62512922
复制相似问题