我正在创建一个可以使用以下代码编辑的行:
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);
});
但这似乎没有给出任何有用的值,并且没有特别的顺序,我觉得很奇怪。
答案 0 :(得分: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
});
答案 1 :(得分:1)
直接从dom访问几何值可能不是最好的主意。更好,更容易使用OpenLayers API。
您可以订阅图层的featuremodified
事件,然后访问修改后的功能:
lineLayer.events.on({"featuremodified": function(feature){
console.log(feature.geometry.getVertices());
}});
您也可以收听其他活动,例如“featureadded”,“featureremoved”等。
希望你明白这一点。