OpenLayers 3에서 형상 중심 얻기


12

GeometryOpenLayers 3에 객체가 주어지면 센터를 얻는 방법은 무엇입니까?

구 버전의 OpenLayers는 getCentroid방법을 제공했습니다 . getBounds해결 방법 도있었습니다 . 그러나 이들은 OpenLayers 3에서 제거 된 것으로 보입니다.

답변:


16

약간의 해결 방법이지만 getExtent지오메트리 의 방법을 사용 하여 맵의 범위를 설정할 수 있습니다. 뷰의 중심이 형상의 중심이라고 가정합니다.

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

뷰를 변경하지 않으려면 (상상할 수있는) 범위의 중심을 계산하는 함수를 생각할 수 있습니다. 이는 특정 유형의 좌표계 (EPSG : 3857, 미터 기반)에서는 쉽지만 다른 좌표계 (EPSG : 4326, lon / lat 좌표 기반)에서는 더 어렵습니다. 이 중심을 계산할 수있는 기능 (EPS : 3857)은 다음과 같습니다.

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

도움이 되었기를 바랍니다!


1
나는 그것이해야한다고 생각 var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;
리트 Fölster에게

네 당신 말이 맞아요, 작은 실수로 내 차일을 바 꾸었습니다
Tim.Lucas

3
너무 사소한 것이 OL3과 함께 제공되어야합니다. 불가지론 +1getCenterOfExtent
Joel

4
@Joel Hey, 지금입니다. OL 버전 3.9.0은 ol.extent.getCenter안정적입니다. 예를 들어, 나는 var aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);점, 선 및 다각형의 중심을 주었다. 여기를
slevin

그것은 실제로 아주 좋습니다 :)
Joel

15

를 사용하여 익스텐트 센터를 얻을 수 있습니다 ol.extent.getCenter. 필자의 경우 벡터 레이어가 있으며 클릭 한 후 피쳐의 중심을 가져오고 싶습니다.

그래서

간단한 클릭 상호 작용을 만들어지도에 추가

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

클릭 할 때마다 ...

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

"선택된"배열에서 선택된 첫 번째 기능을 가져옵니다. 그런 다음 지오메트리와 범위를 가져옵니다.

해당 범위를 사용하여 중심을 찾으십시오. ol.extent.getCenter

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

 });

선, 점 및 다각형에 대해 동일한 코드가 작동했습니다.

추신. 는 ol.extent.getCenterOL 버전 3.9.0 및 버전 3.10.1에 사용, 안정적이고 당신은 그것을 찾을 수 있습니다 여기에


1
선의 경우 선 지오메트리가 차지하는 범위의 중심이됩니다. 실제로 선상에있는 점을 얻으려면 e.selected [0] .getGeometry (). getClosestPoint (oo)
jOshT

1

다음을 통해 센터를 얻을 수도 있습니다.

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

어떤 버전의 OpenLayers 3에서이 기능이 작동합니까? 3.15.1에서는을 얻습니다 Uncaught TypeError: feature.getGeometry(...).getCenter is not a function.
Dirk

getCenter()방법은 원 형상에만 적용됩니다 ol.geom.Circle. 다른 유형의 형상이있을 수 있습니까?
Bwyss

네, LineString으로 시도했지만 원에서만 작동한다는 것을 알고 있습니다. 그러나 LineStrings의 경우 @slevin의 답변에 코드를 사용하여 "줄 중간에"포인트를 반환합니다.
Dirk

1

OpenLayers v 6.1.1

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


이것은 요청 된 형상의 중심이 아니라 범위의 중심입니다.
TomazicM

나는 이것이 당신에게 기하학의 중심을 얻을 것이라고 생각하지 않으며, 그것은 당신에게 선 / 다각형 기하학이 차지하는 범위의 중심을 얻을 것입니다.
Kadir Şahbaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.