OpenLayers에서 두 개의 서로 다른 투영 (Spherical Mercator 및 WGS84)의 기본 계층 사용


9

두 개의 다른 투영법으로 기본 레이어를 추가하려면 어떻게합니까?

다른 투영 (EPSG : 4326)으로 오버레이를 추가했지만 다양한 투영으로 기본 레이어를 추가해야합니다

  1. 구글지도
  2. EPSG : 4326 투영을 사용한 내 벡터 레이어

Google지도를 사용하면 모든 것이 잘되는 것을 볼 수 있지만 기본 레이어를 EPSG : 4326 레이어로 전환하면 모든 것이 흰색입니다.

window.onload = function init(){
                var lon = 84;
                var lat = 28;
                var zoom = 8;
                var url = "http://10.6.7.6/geoserver/wms";

                var mapControls = [
                    new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoomBar(),
                    new OpenLayers.Control.LayerSwitcher({'ascending':false}),                       
                    new OpenLayers.Control.ScaleLine(),
                    new OpenLayers.Control.MousePosition(),
                    new OpenLayers.Control.OverviewMap(),
                    new OpenLayers.Control.KeyboardDefaults()
                ];

                var map = new OpenLayers.Map(
                'map', 
                {       
                    numZoomLevels: 21,
                    projection: new OpenLayers.Projection("EPSG:900913"),
                    displayProjection: new OpenLayers.Projection("EPSG:4326"),
                    controls: mapControls 
                });


                var dsb = new OpenLayers.Layer.WMS( 
                "Nepal Border",
                url,                
                {layers: 'GisData:IR'}                        
            );  

                var gmap_gs = new OpenLayers.Layer.Google(
                "Google Streets",// the default 
                {'sphericalMercator': true}                 

            );




                var dG = new OpenLayers.Layer.WMS( 
                "2G Down Sites",
                url, 
                {layers: 'GisData:dG', transparent: "true",format: "image/png"},
                {
                    isBaseLayer: false,
                    buffer: 0
                });


                map.addLayers([dsb, dG,gmap_gs]);
                var proj = new OpenLayers.Projection("EPSG:4326");
                var point = new OpenLayers.LonLat(lon,lat);

                point.transform(proj, map.getProjectionObject());

                map.setCenter(point, zoom);

            }

답변:


5

나는 이것을 최근에 조사해 왔으며 이것이 최고의 검색 결과 중 하나입니다. 연구 및 실험에 빵 부스러기를 추가 할 것이라고 생각했습니다.

길고 짧은 :

Open Layers의 2.X 라인은이를 지원하지 않습니다. 지도, 중심, 해상도 및 범위와 같은 속성은지도의 초기 기본 레이어에 의해 설정됩니다. 다른 기본 레이어로 변경해도 이러한 속성이 조정되지 않으므로 결과를 알 수 없습니다. 종종 변경하려는 기본 레이어에 유효하지 않은 중심점 / 경계선이 생겨 흰색 타일이 나타납니다. 그러나 항상 결과는 아닙니다 (예 : 4326에서 900913으로 전환하면 0degN, 0degE에 가까운 지점으로 이동).

그러나 희망은 사라지지 않습니다.

단기 :

일부 패치는 맵과 여러 레이어에 대해 패치를 시도하는 열린 레이어에 대해 작성되었습니다 ([1] 참조). 이것은 6 년 전에 제기 된 버그에서 비롯된 것입니다 [2]. 자체 버전의 OL을 호스팅하고 직접 패치해야하지만 (패치가 최신 버전에 완전히 적용되지 않으므로 수동으로 편집해야 함) 대부분 원하는 위치로 이동할 수 있습니다. 매우 불쾌하고 모든 것을 처리하지는 않지만 전반적으로 발에 다른 투영으로 여러 개의 기본 레이어가 필요한 사람을 얻습니다.

장기간:

이것은 OpenLayers 3.0이 해결하고자하는 것 중 하나입니다 [3].

한 가지 예는 기본 레이어 / 오버레이 이분법입니다. 지도의 해상도, maxExtent 등을 설정하는 방법과 위치를 알아야하는 경우가 종종 있습니다. 맵과 레이어 간의 프로젝션 처리와 maxExtent 및 center와 같은 프로젝션과 속성 간의 상호 작용은 기껏해야 복잡합니다.

2.X의 Map 객체는 기본 레이어에 너무 의존하여 앞으로 변경 될 것입니다. 따라서 2013 년 말까지 보류 할 수있는 경우 사전 제작 된 솔루션이있을 수 있습니다.

[1] http://trac.osgeo.org/openlayers/attachment/ticket/1249/NEW.Reproject.patch
[2] http://trac.osgeo.org/openlayers/ticket/1249
[3] http : / /openlayers.org/blog/2012/11/14/why-are-we-building-openlayers-3/


1

OpenLayers에서 기본 레이어를 재 투영하는 방법 은 무엇 입니까? 변환에 대한 정보를 얻으려면 구면 메르카토르 래스터 이미지 만들기를 참조하십시오.

첫 번째 게시물에서 간단히 요약하면 다음과 같습니다.

  1. OpenLayer는 WFS와 같은 벡터 레이어를 변환 할 수 있습니다.
  2. 래스터 레이어는 OpenLayers로 변환 할 수 없습니다.
  3. 좋은 WMS라면 재 투영을 할 수 있어야합니다.
  4. wkid가 지원되지 않기 때문에 ArcGIS Server는 900913에서 레이어를 제공 할 수 없습니다. 반면에 3857 ...!

그리고 두 번째 링크에서 :

Spherical Mercator 투영이 중요한 이유 중 하나는 Google지도와 같은 상업용 레이어 위에 이미지 데이터를 올바르게 오버레이 할 수있는 유일한 투영이기 때문입니다. 래스터 이미지를 사용하는 경우 브라우저에서 '두꺼운'GIS 클라이언트와 동일한 방식으로 이미지를 재 투영 할 수 없습니다. 대신 모든 이미지가 동일한 투영에 있어야합니다. Spherical Mercator 투영 타일을 만드는 방법은 이미지를 생성하는 데 사용하는 소프트웨어에 따라 다릅니다.

중요한 것은 여기에 있습니다 :

using raster images, in the browser, it is not possible to reproject the images
in the same way it might be in a thick GIS client.

그리고 데이터 세트를 변환하기 위해 여기 에 대한 답변이 도움이 될 수 있습니다 .

나는 그것이 당신에게 도움이되기를 바랍니다 ...


나는 오버레이에 대해서는 작동하지만 2 개의 다른 기본 레이어에는 그렇지 않은 proj4js 코드를 추가했습니다.
금각사

1

900913을 참조하지 않고 WMS 계층을 설정하십시오 (데이터가 4326에 있다고 가정). 그런 다음 OpenLayers에 레이어를 추가 할 때지도의 투영을 900913으로 설정했는지 확인하십시오 (또는 먼저 Google지도를 추가해야합니다). 그런 다음 WMS 레이어를 추가하면 OpenLayers가지도 투영 (900913)의 데이터를 요청하고 GeoServer는 즉시 4326에서 900913으로 다시 투영합니다.


코드를 추가했습니다. 이 레이어를 전환 할 때 문제가 있습니다. 기본 레이어로 WGS 4326을 사용하여 레이어를로드하고 확대 / 축소 수준을 유지하면 Google 레이어로 전환하고 맵을 약간 이동 한 후에는 괜찮습니다.
kinkajou

map.addLayers ([dsb, dG, gmap_gs]);를 변경하십시오. map.addLayers ([gmap_gs, dsb, dG]);
Ian Turton

첫 번째로드에 Google지도를 표시하지만 여전히 레이어를 전환 할 수 없습니다. 오류 동안 스위칭
kinkajou

0

일반적으로 OpenLayers는 기본 레이어에서지도 투영을 설정하므로 불가능합니다.

가능한 한 가지 해결 방법은 GeoServer와 같은 계단식 WMS를 사용하여 기본 레이어 중 하나를 다른 투영으로 재 투영하는 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.