답변:
약간의 해결 방법이지만 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];
}
도움이 되었기를 바랍니다!
getCenterOfExtent
를 사용하여 익스텐트 센터를 얻을 수 있습니다 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.getCenter
OL 버전 3.9.0 및 버전 3.10.1에 사용, 안정적이고 당신은 그것을 찾을 수 있습니다 여기에
다음을 통해 센터를 얻을 수도 있습니다.
var center = e.feature.getGeometry().getCenter();
Uncaught TypeError: feature.getGeometry(...).getCenter is not a function
.
getCenter()
방법은 원 형상에만 적용됩니다 ol.geom.Circle
. 다른 유형의 형상이있을 수 있습니까?
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;