2012-04-13 131 views
0

我創建可使用此代碼進行編輯的行:的OpenLayers保存功能

var line_points = Array(); 
    var lineLayer = new OpenLayers.Layer.Vector(label); 
    this.map.addLayer(lineLayer); 
    this.map.addControl(new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path)); 

    for (x in points) { 
     var point = points[x].split(','); 
     var lat = parseFloat(point[0]); 
     var lon = parseFloat(point[1]); 
     line_points[x] = new OpenLayers.Geometry.Point(this.Lon2Merc(lon), this.Lat2Merc(lat)); 
    } 

    var line = new OpenLayers.Geometry.LineString(line_points); 
    var lineFeature = new OpenLayers.Feature.Vector(line, null, style); 

    lineLayer.addFeatures([lineFeature]); 

我試圖拉的緯度和經度不使用此功能,每當一個點被移動或創建更新HTML表單然後用於保存該數據。我聽說過的協議之類的東西,但不認爲這是對我來說是正確的事情。

有人能指出我在正確的方向嗎?

編輯: 我已經試過直接從HTML獲取詳細信息:

var x = 0; 
    var y = 0; 
    $.each(document.getElementById("OpenLayers.Geometry.LineString_195").getAttribute("points").split(','), function(index, value) { 
     if(index%2){ 
      y = value; 
      console.log(MercatorToLatLon(x,y).Lat + "," + MercatorToLatLon(x,y).Lon); 
     } else { 
      x = value; 
     } 
     //console.log(value); 
    }); 

,但這似乎並沒有給出任何有用的值,並在其中我覺得奇怪沒有特定的順序。

回答

1

可以使用getVertices操作檢索所有最新的中緯度和特徵點的經度。每當你想更新HTML

於是致電以下。根據註釋

console.log(lineFeature.geometry.getVertices()); 

更新:

function report(event) { 
    console.log(event.feature.geometry.getVertices()); 
    console.log(event.type, event.feature ? event.feature.id : event.components); 
} 
lineLayer.events.on({ 
    "beforefeaturemodified": report, 
    "featuremodified": report, 
    "afterfeaturemodified": report, 
    "vertexmodified": report, 
    "sketchmodified": report, 
    "sketchstarted": report, 
    "sketchcomplete": report 
}); 
+0

在我接受之前,是否有可能在每次特徵幾何變化時觸發一個函數? – Josh 2012-04-13 14:34:20

+0

肯定看到我的更新。我想你可能想'功能修改' – capdragon 2012-04-13 15:09:40

+0

可愛的東西!乾杯。 – Josh 2012-04-13 15:14:57

1

直接訪問DOM幾何值可能不是最好的主意。更好,更容易使用OpenLayers API。

您可以訂閱層的featuremodified事件,然後進入修改功能:

lineLayer.events.on({"featuremodified": function(feature){ 
    console.log(feature.geometry.getVertices()); 
}}); 

你可以聽其他事件也一樣,比如「featureadded」,「featureremoved」等

希望你明白了。

+0

這會失敗,因爲事件不返回某個功能,而是包含某個功能的對象。所以'feature.geometry'將返回沒有定義幾何體。 – capdragon 2012-04-13 15:15:11