Biorąc pod uwagę Geometry
obiekt w OpenLayers 3. W jaki sposób można uzyskać jego centrum?
Starsze wersje OpenLayers zawierały getCentroid
metodę. Było też getBounds
obejście. Ale wydaje się, że zostały one usunięte w OpenLayers 3.
Biorąc pod uwagę Geometry
obiekt w OpenLayers 3. W jaki sposób można uzyskać jego centrum?
Starsze wersje OpenLayers zawierały getCentroid
metodę. Było też getBounds
obejście. Ale wydaje się, że zostały one usunięte w OpenLayers 3.
Odpowiedzi:
Trochę obejścia, ale możesz użyć getExtent
metody na geometrii, aby ustawić zasięg na mapie. Zakładam, że środek widoku będzie wtedy środkiem geometrii;
Test = new ol.geom.Geometry();
map.getView().fitExtent(Test.getExtent, map.getSize());
var CenterOfGeom = map.getView().getCenter()
Jeśli nie chcesz zmieniać widoku (co mogę sobie wyobrazić), możesz pomyśleć o funkcji obliczającej środek zasięgu. Będzie to łatwe w niektórych typach układów współrzędnych (EPSG: 3857, który jest oparty na metrach), ale trudniejsze w innych (EPSG: 4326, w oparciu o współrzędne lon / lat). Funkcja, która mogłaby obliczyć to centrum (w EPSG: 3857) byłaby następująca;
function getCenterOfExtent(Extent){
var X = Extent[0] + (Extent[2]-Extent[0])/2;
var Y = Extent[1] + (Extent[3]-Extent[1])/2;
return [X, Y];
}
Mam nadzieję że to pomoże!
getCenterOfExtent
Możesz uzyskać jego środek zakresu za pomocą ol.extent.getCenter
. W moim przypadku mam warstwę wektorową i chcę uzyskać środek funkcji po kliknięciu.
Więc
utwórz proste kliknięcie i dodaj je do mapy
var select = new ol.interaction.Select();
map.addInteraction(select);
Dla każdego kliknięcia ...
select.on('select', function(e) {
Uzyskaj pierwszą wybraną funkcję z „wybranej” tablicy. Następnie uzyskaj jego geometrię, a następnie zasięg.
Użyj tego zasięgu, aby znaleźć jego centrum, używając ol.extent.getCenter
var aa = e.selected[0].getGeometry().getExtent();
var oo = ol.extent.getCenter(aa);
console.log("The center is : "+oo); // voila!!!!
});
Ten sam kod działał dla linii, punktów i wielokątów.
PS. ol.extent.getCenter
Jest stabilny, stosowany w OL wersji 3.9.0 i wersji 3.10.1 i może znajdziesz ją tutaj
Możesz także uzyskać centrum dzięki:
var center = e.feature.getGeometry().getCenter();
Uncaught TypeError: feature.getGeometry(...).getCenter is not a function
.
getCenter()
Metoda ma zastosowanie tylko do geometrii koła ol.geom.Circle
. Czy to możliwe, że masz inny typ geometrii?
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;