ฉันต้องได้รับพิกัดคลิกเมื่อผู้ใช้คลิกบนฟีเจอร์เวกเตอร์บนแผนที่ OpenLayers SelectControl ให้คุณสมบัติที่คลิกและไม่ใช่พิกัดของการคลิกเท่านั้น จะได้ค่าพิกัดของการคลิกบนเวกเตอร์หรือไม่? ฉันต้องแสดง AnchoredBubble ณ จุดที่ผู้ใช้คลิก
ฉันต้องได้รับพิกัดคลิกเมื่อผู้ใช้คลิกบนฟีเจอร์เวกเตอร์บนแผนที่ OpenLayers SelectControl ให้คุณสมบัติที่คลิกและไม่ใช่พิกัดของการคลิกเท่านั้น จะได้ค่าพิกัดของการคลิกบนเวกเตอร์หรือไม่? ฉันต้องแสดง AnchoredBubble ณ จุดที่ผู้ใช้คลิก
คำตอบ:
ที่จริงแล้วตัวอย่างเหตุการณ์การคลิกให้สิ่งที่คุณต้องการ
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.trigger
}, this.handlerOptions
);
},
trigger: function(e) {
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
});
หากจำเป็นคุณสามารถแปลงพิกัดเป็นพิกเซลเพื่อแสดงป๊อปอัพ
แก้ไข - เพื่อรับพิกัดเฉพาะในการเลือกคุณสมบัติ :
var options = {
onSelect: getCoordinates,
};
var selectEt = new OpenLayers.Control.SelectFeature(mylayer, options);
map.addControl(selectEt);
function getCoordinates(e) {
// this should work
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
API ไม่ได้ให้วิธีการรับตำแหน่งคลิกจากตัวSelectFeature
ควบคุม - แต่ควร มันจะเป็นการเพิ่มเติมเล็กน้อย ( xy
รวมอยู่ในfeatureselected
เหตุการณ์) หากคุณจองตั๋วนี้มันจะเป็นขั้นตอนแรกในการทำให้เกิดขึ้น
ในระหว่างนี้คุณสามารถเข้าถึงเหตุการณ์เมาส์บนตัวจัดการคุณสมบัติที่ใช้โดยตัวSelectFeature
ควบคุม ดังนั้นคุณอาจมีผู้ฟังที่มีลักษณะดังนี้:
layer.events.on({featureselected: function(event) {
// should be event.xy, but it's not available currently
var pixel = control.handlers.feature.evt.xy;
var location = map.getLonLatFromPixel(pixel);
alert("You clicked near " + location);
});
สิ่งนี้ถือว่า (เห็นได้ชัด) ว่าคุณมีการอ้างอิงถึงตัวSelectFeature
ควบคุมและแผนที่ของคุณ
ฉันสามารถรับ lat lat ของเหตุการณ์คลิกโดยใช้สิ่งต่อไปนี้:
ภายในclickFeature
ตัวจัดการ
var clickedlonlat =
Ext.getCmp("coreRef").parent.map.getLonLatFromPixel(
new OpenLayers.Pixel(
selectFeatureReference.handlers.feature.evt.layerX,
selectFeatureReference.handlers.feature.evt.layerY
));
ที่selectFeatureReference
อ้างอิงถึงสิ่งSelectFeature
ที่คุณสร้างขึ้น
map.on('click', function(evt){
console.log(ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326'));
});
นี่คือวิธีที่ฉันคิดใน v3.8.2 เพื่อให้ได้พิกัดดังนี้:
[-1.1645507812500016, 53.2257684357902]
เมื่อฉันคลิกไปที่สหราชอาณาจักร
feature.getBounds().getCenterLonLat()
คุณสามารถใช้ ใช้งานได้กับคุณสมบัติประเภทจุด / บรรทัด / รูปหลายเหลี่ยม และคุณไม่ต้องรู้ว่ามันคืออะไรเพราะมันใช้ได้กับทุกคน
ในกรณีที่ทุกคนสะดุดคำถามเก่านี้เหมือนที่ฉันทำใน OpenLayers รุ่นล่าสุดในเวลานี้ (3.20.0) คุณสามารถรับตำแหน่งe.mapBrowserEvent.coordinate
ที่e
ถูกคลิกโดยใช้ ซึ่งเป็นเหตุการณ์ที่เลือก