..
Openlayers Feature Get Coordinates Not Working
문제
길찾기 경로 노드 클릭 시, 해당 경로의 이동 방법을 팝업으로 나타내고자 했다.
해당 노드 클릭 시, 팝업을 나타내는 함수에서 getCoordinates()
함수가 존재하지 않는다는 오류를 출력했다.
feature.getGeometry().getCoordinates();
원인
마커는 Geometry
타입, 노드는 Geojson을 사용해 생성했기 때문에 GeometryCollection
타입이었다.
팝업을 나타내는 함수에서 좌표를 가져오기 위해 사용한 아래 코드는 feature가 Geometry
타입일 때만 사용 가능하다.
feature.getGeometry().getCoordinates();
해결
feature가 GeometryCollection
타입인지 Geometry
타입인지를 구분해 좌표를 다르게 가져오는 방법으로 수정했다.
Geometry 타입
feature.getGeometry().getCoordinates();
GeometryCollection 타입
const geometry = feature.getGeometry();
const geometries = geometry.getGeometries();
let coordinates = [];
for (const geom of geometries) {
coordinates = coordinates.concat(geom.getCoordinates());
}
전체 코드
let coordinate;
const geometry = feature.getGeometry();
if (geometry instanceof ol.geom.GeometryCollection) {
const geometries = geometry.getGeometries();
let coordinates = [];
for (const geom of geometries) {
coordinates = coordinates.concat(geom.getCoordinates());
}
coordinate = coordinates;
} else {
coordinate = feature.getGeometry().getCoordinates();
}
_t.popup.setPosition(coordinate);
참고
https://gis.stackexchange.com/questions/249580/get-all-the-coordinates-of-a-feature-in-openlayers-4