Obtenha o Center of Geometry no OpenLayers 3


12

Dado um Geometryobjeto no OpenLayers 3. Como alguém poderia obter seu centro?

As versões mais antigas do OpenLayers forneciam um getCentroidmétodo. Houve também uma getBoundssolução alternativa. Mas eles parecem ter sido removidos no OpenLayers 3.

Respostas:


16

Uma solução alternativa, mas você pode usar o getExtentmétodo na geometria para definir a extensão no mapa. Presumo que o centro da vista será o centro da geometria;

Test = new ol.geom.Geometry();
map.getView().fitExtent(Test.getExtent, map.getSize());
var CenterOfGeom = map.getView().getCenter()

Se você não deseja alterar a visualização (o que eu posso imaginar), você pode pensar em uma função para calcular o centro da extensão. Isso será fácil em certos tipos de sistemas de coordenadas (EPSG: 3857, que é baseado em medidores), mas mais difícil em outros (EPSG: 4326, baseado em cordas lon / lat). Uma função que poderia calcular esse centro (no EPSG: 3857) seria a seguinte;

function getCenterOfExtent(Extent){
var X = Extent[0] + (Extent[2]-Extent[0])/2;
var Y = Extent[1] + (Extent[3]-Extent[1])/2;
return [X, Y];
}

Espero que isto ajude!


1
Eu acho que deveria ser var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;
Gerrit Fölster

Sim, você está certo, pequeno erro lá, mudou minha awnser
Tim.Lucas

3
Algo tão trivial deve ser enviado com o OL3. +1 para os agnósticos #getCenterOfExtent
Joel /

4
@ Joel Hey, agora é. OL versão 3.9.0 possui ol.extent.getCentere está estável. Por exemplo, eu fiz var aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);e me deu o centro de pontos, linhas e polígonos. Confira aqui
slevin

Isso é realmente muito bom :)
Joel

15

Você pode obter o seu centro de extensão usando ol.extent.getCenter. No meu caso, tenho uma camada vetorial e quero obter o centro de um recurso depois de clicar nele.

então

crie uma interação simples de clique e adicione-a ao mapa

 var select = new ol.interaction.Select();
 map.addInteraction(select);

Para cada clique ...

select.on('select', function(e) {

Obtenha o primeiro recurso selecionado, na matriz "selecionada". Em seguida, obtenha sua geometria e, em seguida, sua extensão.

Use essa extensão para encontrar seu centro, usando ol.extent.getCenter

    var aa = e.selected[0].getGeometry().getExtent();
    var oo = ol.extent.getCenter(aa);
    console.log("The center is :  "+oo); // voila!!!!

 });

O mesmo código funcionou para linhas, pontos e polígonos.

PS. O ol.extent.getCenteré estável, usado no OL versão 3.9.0 e versão 3.10.1 e você pode encontrá-lo aqui


1
Para linhas, você obterá o centro da extensão ocupada pela geometria da linha. Para chegar a um ponto que é realmente sobre a linha, você pode usar e.selected [0] .getGeometry () getClosestPoint (oo).
jOshT

1

Você também pode obter o centro com:

var center = e.feature.getGeometry().getCenter();

Em qual versão do OpenLayers 3 isso funciona? Na 3.15.1, recebo um Uncaught TypeError: feature.getGeometry(...).getCenter is not a function.
Dirk

O getCenter()método é aplicável apenas a geometrias de círculos ol.geom.Circle. É possível que você tenha um tipo diferente de geometria?
Bwyss

Sim, eu tentei com um LineString, bom saber que isso só funciona com círculos. Para LineStrings, no entanto, pode-se usar o código na resposta de @ slevin, que retornará o ponto "no meio da linha".
Dirk

1

OpenLayers v 6.1.1

var center = e.feature.getGeometry().getExtent().getCenter()


Este é o centro da extensão, não o centro da geometria, conforme solicitado em questão.
TomazicM

Eu não acho que isso lhe dará o centróide da geometria, mas sim o centro da extensão ocupada pela geometria de linha / polígono.
Kadir Şahbaz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.