GeometryOpenLayers 3'te bir nesne verildi. Kişi merkezini nasıl ele geçirirdi?
OpenLayers'ın eski sürümleri bir getCentroidyöntem sağladı . Ayrıca bir getBoundsgeçici çözüm vardı. Ancak bunların OpenLayers 3'te kaldırıldığı görülmektedir.
GeometryOpenLayers 3'te bir nesne verildi. Kişi merkezini nasıl ele geçirirdi?
OpenLayers'ın eski sürümleri bir getCentroidyöntem sağladı . Ayrıca bir getBoundsgeçici çözüm vardı. Ancak bunların OpenLayers 3'te kaldırıldığı görülmektedir.
Yanıtlar:
Biraz geçici bir çözüm, ancak getExtentharitadaki kapsamı ayarlamak için geometri üzerindeki yöntemi kullanabilirsiniz . Sanırım görüşün merkezi geometrinin merkezi olacak;
Test = new ol.geom.Geometry();
map.getView().fitExtent(Test.getExtent, map.getSize());
var CenterOfGeom = map.getView().getCenter()
Görünümü (hayal edebileceğim) değiştirmek istemiyorsanız, kapsamın merkezini hesaplamak için bir işlev düşünebilirsiniz. Bu, belirli koordinat sistemlerinde (sayaç tabanlı EPSG: 3857) kolay, diğerlerinde daha zor olacaktır (lon / lat koordinatlarına dayanan EPSG: 4326). Bu merkezi hesaplayabilen bir fonksiyon (EPSG: 3857'de) aşağıdaki gibi olacaktır;
function getCenterOfExtent(Extent){
var X = Extent[0] + (Extent[2]-Extent[0])/2;
var Y = Extent[1] + (Extent[3]-Extent[1])/2;
return [X, Y];
}
Bu yardımcı olur umarım!
getCenterOfExtent
Genişlik merkezini kullanarak elde edebilirsiniz ol.extent.getCenter. Benim durumumda bir vektör katmanım var ve tıkladıktan sonra bir özelliğin merkezini almak istiyorum.
Yani
basit bir tıklama etkileşimi oluşturun ve haritaya ekleyin
var select = new ol.interaction.Select();
map.addInteraction(select);
Her tıklama için ...
select.on('select', function(e) {
Seçilen ilk özelliği "seçili" diziden alın. Sonra geometrisini ve sonra kapsamını alın.
Merkezini bulmak için bu kapsamı kullanın. ol.extent.getCenter
var aa = e.selected[0].getGeometry().getExtent();
var oo = ol.extent.getCenter(aa);
console.log("The center is : "+oo); // voila!!!!
});
Aynı kod çizgiler, noktalar ve çokgenler için de işe yaradı.
PS. ol.extent.getCenterOL sürümü 3.9.0 ve sürüm 3.10.1 kullanılan, kararlı ve bunu bulabiliriz burada
Ayrıca merkezi aşağıdakilerle de alabilirsiniz:
var center = e.feature.getGeometry().getCenter();
Uncaught TypeError: feature.getGeometry(...).getCenter is not a function.
getCenter()Yöntem, daire geometrileri için geçerlidir ol.geom.Circle. Farklı bir geometri türünüz olabilir mi?
OpenLayers v 6.1.1
var center = e.feature.getGeometry().getExtent().getCenter()
var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;