从 turf.js MultiPolygon 创建 OpenLayers 5 MultiPolygon 特征
Creating an OpenLayers 5 MultiPolygon feature from a turf.js MultiPolygon
在 OpenLayers 5.3.0 中,我使用 turf.js 中的 'difference' 工具创建了一个多边形。当我检查 JSON 时,turf.js MultiPolygon 看起来不错,但是当我尝试使用它在 OpenLayers 中创建功能时,我得到 "Uncaught TypeError: t.addEventListener is not a function".
我尝试了 JSON.stringify、JSON.parse、GeoJSON.readFeatures、.getCoordinates() 的多种组合...我尝试添加 turf.js MultiPolygon 作为特征直接通过 source.addFeature(multiPolygonGeometry)
,但后来我得到 'Uncaught TypeError: e.getId is not a function'。我还尝试了 source.addFeatures(multiPolygonGeometry)
(注意复数 'addFeatures'),但没有给我任何错误,但似乎也没有向源添加任何内容。
我的代码中相关行如下:
multiPolygonGeometry = turf.difference(largeArea,maskAreas);
multiPolygonFeature = new ol.Feature({
geometry: multiPolygonGeometry,
id: 'multiPolygonFeature1'
});
multiPolygonGeometry 在控制台中看起来像这样:
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
140.9716711384525,
-36.97645228850101
],
[
140.97418321565786,
-36.97679331852701
],
[
140.9741163253784,
-36.97713531664132
],
[
140.9740304946899,
-36.97903805606076
],
[
140.97437381744382,
-36.98025509866784
],
[
140.97594864874696,
-36.98127512642501
],
[
140.9714880598484,
-36.9804459718428
],
[
140.9714500775476,
-36.97642733756345
],
[
140.9716711384525,
-36.97645228850101
]
]
],
[
[
[
140.97455248763328,
-36.97684309230892
],
[
140.97751071844857,
-36.97723786980259
],
[
140.97749308140382,
-36.977304276099005
],
[
140.97715289421623,
-36.97770848336402
],
[
140.97661807025068,
-36.97969050789806
],
[
140.97628355026242,
-36.97958658471583
],
[
140.97634792327878,
-36.97900377288852
],
[
140.9764981269836,
-36.97866094031662
],
[
140.97510337829587,
-36.97727245260485
],
[
140.97455248763328,
-36.97684309230892
]
]
],
[
[
[
140.97628420893903,
-36.98092777726751
],
[
140.97617893060388,
-36.98131793226549
],
[
140.97596635572492,
-36.98127841787872
],
[
140.97628420893903,
-36.98092777726751
]
]
]
]
},
"ol_lm": {
"change": []
}
}
然后我收到这条消息:
events.js:174 Uncaught TypeError: t.addEventListener is not a function
at v (events.js:174)
at e.handleGeometryChanged_ (Feature.js:210)
at e (events.js:41)
at e.dispatchEvent (Target.js:101)
at e.notify (Object.js:151)
at e.set (Object.js:170)
at e.setProperties (Object.js:186)
at new e (Feature.js:108)
at getPolygon (maskedPolygon.js:319) <-- this is the second line in my code sample above
at <anonymous>:1:1
我在这里做错了什么?我确定这很简单,但我似乎无法破解它。
Turf 与 GeoJSON 功能一起使用,因此您的 "multiPolygonGeometry" 是一个 GeoJSON 功能,可以由 OpenLayers 解析然后给出一个 Id:
multiPolygonFeature = new ol.format.GeoJSON().readFeature(multiPolygonGeometry);
multiPolygonFeature.setId('multiPolygonFeature1');
在 OpenLayers 5.3.0 中,我使用 turf.js 中的 'difference' 工具创建了一个多边形。当我检查 JSON 时,turf.js MultiPolygon 看起来不错,但是当我尝试使用它在 OpenLayers 中创建功能时,我得到 "Uncaught TypeError: t.addEventListener is not a function".
我尝试了 JSON.stringify、JSON.parse、GeoJSON.readFeatures、.getCoordinates() 的多种组合...我尝试添加 turf.js MultiPolygon 作为特征直接通过 source.addFeature(multiPolygonGeometry)
,但后来我得到 'Uncaught TypeError: e.getId is not a function'。我还尝试了 source.addFeatures(multiPolygonGeometry)
(注意复数 'addFeatures'),但没有给我任何错误,但似乎也没有向源添加任何内容。
我的代码中相关行如下:
multiPolygonGeometry = turf.difference(largeArea,maskAreas);
multiPolygonFeature = new ol.Feature({
geometry: multiPolygonGeometry,
id: 'multiPolygonFeature1'
});
multiPolygonGeometry 在控制台中看起来像这样:
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
140.9716711384525,
-36.97645228850101
],
[
140.97418321565786,
-36.97679331852701
],
[
140.9741163253784,
-36.97713531664132
],
[
140.9740304946899,
-36.97903805606076
],
[
140.97437381744382,
-36.98025509866784
],
[
140.97594864874696,
-36.98127512642501
],
[
140.9714880598484,
-36.9804459718428
],
[
140.9714500775476,
-36.97642733756345
],
[
140.9716711384525,
-36.97645228850101
]
]
],
[
[
[
140.97455248763328,
-36.97684309230892
],
[
140.97751071844857,
-36.97723786980259
],
[
140.97749308140382,
-36.977304276099005
],
[
140.97715289421623,
-36.97770848336402
],
[
140.97661807025068,
-36.97969050789806
],
[
140.97628355026242,
-36.97958658471583
],
[
140.97634792327878,
-36.97900377288852
],
[
140.9764981269836,
-36.97866094031662
],
[
140.97510337829587,
-36.97727245260485
],
[
140.97455248763328,
-36.97684309230892
]
]
],
[
[
[
140.97628420893903,
-36.98092777726751
],
[
140.97617893060388,
-36.98131793226549
],
[
140.97596635572492,
-36.98127841787872
],
[
140.97628420893903,
-36.98092777726751
]
]
]
]
},
"ol_lm": {
"change": []
}
}
然后我收到这条消息:
events.js:174 Uncaught TypeError: t.addEventListener is not a function
at v (events.js:174)
at e.handleGeometryChanged_ (Feature.js:210)
at e (events.js:41)
at e.dispatchEvent (Target.js:101)
at e.notify (Object.js:151)
at e.set (Object.js:170)
at e.setProperties (Object.js:186)
at new e (Feature.js:108)
at getPolygon (maskedPolygon.js:319) <-- this is the second line in my code sample above
at <anonymous>:1:1
我在这里做错了什么?我确定这很简单,但我似乎无法破解它。
Turf 与 GeoJSON 功能一起使用,因此您的 "multiPolygonGeometry" 是一个 GeoJSON 功能,可以由 OpenLayers 解析然后给出一个 Id:
multiPolygonFeature = new ol.format.GeoJSON().readFeature(multiPolygonGeometry);
multiPolygonFeature.setId('multiPolygonFeature1');