如何从多边形绘制函数获取坐标并写入GeoJSON对象?
把OpenLayers绘制结果转为GeoJSON对象的实现方案
嘿,看起来你在用OpenLayers的绘图功能,想要把绘制完成后的图形转成标准GeoJSON格式对吧?我来帮你搞定这个问题:
首先得明确:你当前用getExtent()拿到的是图形的边界框(BBox)数组,格式是[minX, minY, maxX, maxY]——这是四个极值坐标,而GeoJSON里的Polygon类型需要的是闭合的坐标环(第一个点和最后一个点必须重合)。下面分两种场景给你解决方案:
场景1:基于边界框生成矩形GeoJSON
如果你就是想要用这个边界框生成一个矩形的GeoPolygon,那可以这样处理:
draw.on('drawend', function(e) { // 提取边界框的四个极值 const [minX, minY, maxX, maxY] = e.feature.getGeometry().getExtent(); // 构建GeoJSON要求的闭合坐标环 const polygonCoords = [ [minX, minY], // 左下角 [maxX, minY], // 右下角 [maxX, maxY], // 右上角 [minX, maxY], // 左上角 [minX, minY] // 回到起点,保证多边形闭合 ]; // 组装完整的GeoJSON Feature对象 const geojson = { "type": "Feature", "properties": {}, // 这里可以加自定义属性,比如{"name": "我的矩形"} "geometry": { "type": "Polygon", "coordinates": [polygonCoords] // Polygon的coordinates是数组的数组,支持多个环(比如带洞的多边形) } }; // 现在你可以用这个GeoJSON做任何事了,比如打印或者发送到后端 console.log('生成的GeoJSON:', geojson); });
场景2:获取绘制多边形的原始顶点(而非边界框)
哦对了,如果你其实想要的是你绘制的不规则多边形的所有顶点坐标(而不是仅仅边界框),那你应该用getCoordinates()代替getExtent()——因为getExtent()只会返回四个极值,会丢失原始的顶点信息:
draw.on('drawend', function(e) { // 直接获取绘制多边形的原始顶点数组(已经是GeoJSON兼容的格式) const originalCoords = e.feature.getGeometry().getCoordinates(); // 组装GeoJSON对象 const geojson = { "type": "Feature", "properties": {}, "geometry": { "type": "Polygon", "coordinates": originalCoords } }; console.log('生成的GeoJSON:', geojson); });
小提示
生成GeoJSON后,你可以把它转成字符串(用JSON.stringify(geojson)),然后放到GeoJSON验证工具里检查格式是否正确,确保坐标环是闭合的,结构符合OGC的GeoJSON规范。
内容的提问来源于stack exchange,提问作者vaza gena
相关产品推荐
相关产品推荐

