【发布时间】:2021-02-21 10:23:49
【问题描述】:
到目前为止,我将绘制的对象列表保存到一个数组中
var overlayArr = [] //Store all completed objects
var formattedWithHoles = [] //Store converted collisions
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
overlayArr.push(e.overlay);
overlayArr.forEach(isPolygonInsidePolygon) //Doesn't work right
});
包含所有对象,然后我需要生成一个 GeoJSON,但首先如果一个多边形内部有一个多边形——那么它必须被绘制为一个洞
//Helper function
function isPolygonInsidePolygon(innerPolygon, outerPolygon) {
var points = innerPolygon.getPath().getArray();
for( var i = 0; i < points.length; i++ ){
if(!google.maps.geometry.poly.containsLocation( points[i], outerPolygon) ){
return false;
}
}
//formattedWithHoles.push(...); //Use inner and outer polygon data class?
return true;
}
生成每个对象的 GeoJSON 而不检查碰撞:
google.maps.Polygon.prototype.getGeoJSON = function() {
//GeoJSON format
let geoJSON = {
type: 'Feature',
geometry: {
type: 'Polygon', //MultiPolygon for holes?
coordinates: []
},
properties: {}
};
let paths = this.getPaths().getArray();
for (var path of paths) {
let pathArray = [];
let points = path.getArray();
let firstPoint = false;
for (var point of points) {
if (firstPoint === false) {
firstPoint = point;
}
pathArray.push([point.lng(), point.lat()])
}
pathArray.push([firstPoint.lng(), firstPoint.lat()]);
geoJSON.geometry.coordinates.push(pathArray);
}
//console.log(geoJSON);
return geoJSON;
};
如何结合google.maps.event.addListener(drawingManager, 'overlaycomplete',...) 侦听器来检测碰撞并使其生成带孔的geoJSON?
我基本上是在地图上绘制农田,并想在无法耕种的障碍物上打洞,因此 1 个农场可能有多个我需要清除的障碍物。
【问题讨论】:
-
你会只有一层包含的多边形吗?
-
我基本上是在地图上绘制农田,并想在无法耕种的障碍物上打洞,所以 1 个农场可能有多个我需要消除的障碍
标签: javascript google-maps-api-3