OpenLayers'ta iki farklı projeksiyonun (Küresel Mercator ve WGS84) taban katmanını kullanma


9

İki farklı projeksiyon ile nasıl temel katman ekleyebilirim?

Farklı bir projeksiyonla (EPSG: 4326) üst katman ekledim, ancak çeşitli projeksiyonlarla taban katmanı eklemem gerekiyor

  1. Google Haritalar
  2. EPSG ile vektör katmanım: 4326 projeksiyon

Google Haritalar ile her şeyin yolunda olduğunu görebiliyorum ancak temel katmanı EPSG: 4326 katmanına geçirdiğimde her şey beyaz.

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);

            }

Yanıtlar:


5

Son zamanlarda bunu araştırdım ve bu en iyi arama sonuçlarından biri, araştırma ve deneyime bazı kırıntılar ekleyeceğimi düşündüm.

Uzun ve kısa:

Açık Katmanların 2.X çizgisi bunu desteklemez. Harita, bunun merkez, çözünürlük ve uzantılar gibi özellikleri haritanın İLK temel katmanı tarafından ayarlanır. Başka bir taban katmanına geçiş, bu özellikleri DEĞİŞTİRMEZ, bu nedenle sonuç bilinmemektedir. Genellikle, değiştirdiğiniz taban katmanı için geçerli olmayan bir merkez noktası / sınırları elde edersiniz, böylece beyaz fayanslar görürsünüz. Ancak bu HER ZAMAN sonuç değildir (örneğin, 4326'dan 900913'e geçmek sizi 0 derece, 0 derece gibi bir noktaya getirecektir).

Ancak umut kaybolmaz.

Yakın dönem:

Bazı yamalar, bu haritayı ve çoğu katman için yama yapmaya çalışan açık katmanlara karşı yazılmıştır (bkz. [1]). Bu, 6 (6 !!!) yıl önce dosyalanmış bir hatadan kaynaklanmaktadır [2]. Kendi OL sürümünüzü barındırmanız ve elle yamalamanız gerekecek olsa da (yama en son sürümlere temiz uygulanmayacaktır, bu yüzden düzenlemeyi manuel olarak yapmanız gerekir), bu sizi çoğunlukla istediğiniz yere götürecektir. Çok kötü ve her şeyi idare etmiyor, ancak genel olarak, ayaklarında farklı projeksiyonlara sahip birden fazla tabancıya İHTİYACI olan birini alıyor.

Uzun vadeli:

Bu, OpenLayers 3.0'ın ele almayı umduğu şeylerden biridir [3].

Bir örnek, taban katmanı / katman ikiliği. Harita için çözünürlükleri, maxExtent vb. Nasıl ve nerede ayarlayacağınızı bilmek genellikle zordur. Harita ve katmanlar arasındaki projeksiyon kullanımı ve projeksiyon ile maxExtent ve center gibi özellikler arasındaki etkileşim en iyi ihtimalle karmaşıktır.

2.X öğesindeki Map nesnesi, temel katmana çok fazla güveniyordu ve bu, ileride değişecek. Bu nedenle, 2013'ün sonlarına kadar dayanabilirseniz, kullanmanız için önceden hazırlanmış bir çözüm olabilir.

[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

burada soru olarak bir şey var, OpenLayers temel katmanları nasıl yeniden? ve dönüşüm hakkında bilgi edinirseniz, buna bakmalısınız, Küresel Mercator Raster Görüntüleri Oluşturma.

ilk gönderiden kısaca özetlemek gerekirse:

  1. OpenLayers vektör katmanlarını (WFS gibi) dönüştürebilir.
  2. Raster Katmanlar OpenLayers tarafından dönüştürülemez.
  3. Herhangi bir iyi WMS sizin için yeniden projeksiyon yapmalıdır.
  4. Wkid desteklenmediği için ArcGIS Server 900913'te katman sağlayamıyor. 3857 Öte yandan ...!

ve ikinci linkten:

Küresel Mercator projeksiyonunun bu kadar önemli olmasının nedenlerinden biri, görüntü verilerinin Google Haritalar gibi ticari katmanların üstüne doğru şekilde bindirilmesine izin veren tek projeksiyon olmasıdır. Raster görüntüleri kullanırken, tarayıcıda, görüntüleri 'kalın' bir CBS istemcisinde olduğu gibi yeniden kopyalamak mümkün değildir. Bunun yerine, tüm görüntüler aynı projeksiyonda olmalıdır. Küresel Mercator yansıtılan döşemelerin nasıl oluşturulacağı, görüntülerinizi oluşturmak için kullandığınız yazılıma bağlıdır.

Önemli olan burada:

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.

ve veri kümesini dönüştürmek için cevabım burada bu konuda size yardımcı olabilir .

umarım sana yardımcı olur ...


Ben bindirmeleri için çalışan proj4js kodu ekledim ama 2 farklı taban katmanları için bu konuda herhangi bir yorum değil mi?
kinkajou

1

WMS katmanınızı 900913'e referans vermeden ayarlayın (verilerinizin 4326'da olduğu varsayılarak). Ardından katmanı OpenLayers'a eklediğinizde, haritanın izdüşümünü 900913 olarak ayarladığınızdan emin olun (veya önce Google Haritalar'ı eklediğinizden emin olun). WMS katmanını eklediğinizde, OpenLayers harita projeksiyonundaki verileri (900913) isteyecek ve GeoServer 4326'dan 900913'e anında yeniden projeksiyon yapacak.


Kod eklendi. Bu katman arasında geçiş yaparken sorun var. İlk olarak WGS 4326 ile katmanı temel katman olarak yüklediğimde ve yakınlaştırma düzeyini koruduğumda, google katmanına geçip bir harita kaydırdıktan sonra her şey bitti.
kinkajou

Map.addLayers ([dsb, dG, gmap_gs]) değiştir; map.addLayers ([gmap_gs, dsb, dG]) için;
Ian Turton

google haritasını ilk yükte gösterir ancak katman değiştiremez.
Geçiş

0

Genel olarak bu mümkün değildir çünkü OpenLayers haritanın taban katmanından izdüşümünü ayarlar.

Olası bir çözüm, temel katmanlardan birini birinden diğerine yansıtmak için GeoServer gibi basamaklı bir WMS kullanmaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.