OpenLayers-map을 사용하고 있으며 다른 좌표계를 사용하는 다른 맵 서버를 사용하고 싶습니다. OpenLayers가이를 동일한 맵에 통합하고 좌표계를 자동으로 변환 할 수 있습니까?OpenLayers에서 다른 좌표계와 레이어를 어떻게 섞을 수 있습니까?
답변
레이어에 따라 실제로 변환 할 수없는 일종의 기본지도 (지도)가 있습니다. 해당 맵에 데이터 (마커, geo json stuff 등)를 추가하려면 baselayer가 사용중인 투영으로 변환해야합니다.
// defining our coordinate systems
var google = new OpenLayers.Projection("EPSG:900913"),
latlon = new OpenLayers.Projection("EPSG:4326");
// transforming the location to the right coordinate system
var location = new OpenLayers.LonLat(10, 10).transform(latlon, google);
// assuming you made an icon and marker layer
var marker = new OpenLayers.Marker(location, icon);
markerLayer.addMarker(marker);
체크 아웃 한 시스템에서 다른 시스템으로 위치를 변환에 대한 Openlayers 문서 : 마커이 들어
은 easyly하여 수행 할 수 있습니다.
지도 서버가 다른 래스터를 제공하는 경우 운이 좋지 않을 수 있습니다.
그러나 벡터 (예 : KML 파일) 또는 자바 스크립트로 작성된지도 객체 (예 : Dre의 답변)를 제공하는 경우 다른 투영간에 변환하여 모든 데이터가 동일한 투영법 및 좌표계에 표시되도록 할 수 있습니다 기본지도로. OpenLayers는이를위한 단서를 가지고 있지만 (Dre의 답변 참조), 아마도 기능을 제공하는 Proj4JS 라이브러리를 포함해야 할 것입니다.
또는 Proj4JS를 사용하여 플로팅하기 전에 좌표를 변환 할 수 있습니다.
이 질문은 오래된 질문이지만, 검색을 통해이 문제가 발생했으며, 다른 사람들에게 도움이 될 경우이 문제를 해결할 수 있다고 생각했습니다.
이것은 질문에 직면 한 상황과 다를 수 있지만 최근에 비슷한 상황이 발생했습니다. 필자의 경우 두 개의 서로 다른 WMS 공급자의 출력을 하나의 맵에 표시해야했습니다. 하나는 EPSG : 900913에서, 다른 하나는 EPSG : 3857에서 서비스를 제공했습니다. 이 are functionally equivalent을 알고 있다면, 서비스를 작동시키는 방식으로 요청할 수 있다면지도가 출력물과 함께 작동 할 수 있다고 생각했습니다. 내지도는 900913에 있으며 다른 서비스는 기본적으로이 투영법을 사용하여 요청합니다.
나는 (당신의 정보가 기입으로) 다음과 같이 다른 서비스가 제대로 요청했다 될 얻을 수 있었다 방법 :
var myLayer = new OpenLayers.Layer.WMS(
"Name",
"URL", {
"layer": "layer"
});
myLayer.projection = "EPSG:3857";
는 일반적으로 서비스 URL에 ?request=getCapabilities
를 추가하면 예측이 사용할 수있는 볼 수 있습니다 원하는 레이어의 CRS 태그에있는 서비스에서