OpenLayers 3-4-5,提取用户绘制几何的坐标

OpenLayer 3-4-5, extract coordinates of user drawned geometry

我正在研究在我的地图中绘制的可能性。 我实现了集成绘图元素(点、线、多边形等),并提取绘制元素的坐标。 我的工作地图非常复杂,有很多其他功能和模块。这就是为什么我在这里工作以解决我在 OL4 示例上的问题。 我测试的最终结果是显示用户绘制的元素的坐标,并将它们存储在 PHP 中,在我的 GDB 中。

我有几个问题:

我取得了什么:

这是我的完整代码:

    var raster = new ol.layer.Tile({
  source: new ol.source.OSM()

});

var projection = ol.proj.get('EPSG:3857');
var projection2 = ol.proj.get('EPSG:4326');
var source = new ol.source.Vector({wrapX: false});

var vector = new ol.layer.Vector({
  source: source
});

var map = new ol.Map({
  layers: [raster, vector],
  target: 'map',
  view: new ol.View({
    center: [-11000000, 4600000],
    zoom: 4,
    projection: projection
  })
});

var typeSelect = document.getElementById('type');

var draw; // global so we can remove it later
function addInteraction() {
  var value = typeSelect.value;
  if (value !== 'None') {
    draw = new ol.interaction.Draw({
      source: source,
      type: typeSelect.value
      
    });
    map.addInteraction(draw);
      draw.on('drawend', function(evt){
      new ol.proj.transform(draw, projection, projection2);
      var feature = evt.feature;
      var p = feature.getGeometry();
      console.log(new ol.proj.transform(p.getCoordinates(), projection, projection2));
      document.getElementById('point').innerHTML = new ol.proj.transform(p.getCoordinates(), projection, projection2);
    }); 
        
  }
}


/**
 * Handle change event.
 */
typeSelect.onchange = function() {
  map.removeInteraction(draw);
  addInteraction();
};

addInteraction();

这是我的问题所在:

      draw.on('drawend', function(evt){
      new ol.proj.transform(draw, projection, projection2);
      var feature = evt.feature;
      var p = feature.getGeometry();
      console.log(new ol.proj.transform(p.getCoordinates(), projection, projection2));
      document.getElementById('point').innerHTML = new ol.proj.transform(p.getCoordinates(), projection, projection2);
    }); 

帮助非常可观。 最佳

ol.proj.transform 仅适用于单个坐标对,不是构造函数,因此不需要 new。如果您转换几何体的副本(克隆),您将获得预期的坐标。

  var p = feature.getGeometry().clone().transform(projection, projection2);
  console.log(p.getCoordinates());