OpenLayers में दो अलग-अलग अनुमानों (गोलाकार मर्केटर और WGS84) की आधार परत का उपयोग करना


9

मैं दो अलग-अलग अनुमानों के साथ आधारशिला कैसे जोड़ूं?

मैंने एक अलग प्रक्षेपण (EPSG: 4326) के साथ ओवरलेयर को जोड़ा है, लेकिन मुझे विभिन्न प्रक्षेपण के साथ आधार परत को जोड़ने की आवश्यकता है

  1. गूगल मानचित्र
  2. ईपीएसजी के साथ मेरी वेक्टर परत: 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

मैं इसे हाल ही में देख रहा हूं, और यह शीर्ष खोज परिणामों में से एक है, मुझे लगा कि मैं अपने शोध और प्रयोग में कुछ ब्रेडक्रंब जोड़ूंगा।

लम्बा और छोटा:

ओपन लेयर्स की 2.X लाइन इसका समर्थन नहीं करती है। मैप, यह केंद्र, रिज़ॉल्यूशन और एक्स्टेंट जैसे गुण हैं, जो मैप के INITIAL बेस लेयर द्वारा सेट किए गए हैं। किसी अन्य आधार परत में बदलें इन गुणों को समायोजित न करें, इसलिए इसका परिणाम अज्ञात है। अक्सर, आपको एक केंद्र बिंदु / सीमा मिलती है जो आपके द्वारा परिवर्तित की जा रही आधार परत के लिए मान्य नहीं होती है, इसलिए आप सफेद टाइल देखते हैं। लेकिन यह हमेशा परिणाम नहीं होता है (उदाहरण के लिए, 4326 से 900913 पर स्विच करने से आप 0degN, 0degE के करीब पहुंच जाएंगे)।

लेकिन, उम्मीद नहीं खोई है।

अवधि के करीब:

कुछ पैच खुली परतों के खिलाफ लिखे गए थे जो नक्शे और कई परतों के लिए इसे पैच करने का प्रयास करते हैं (देखें [1])। यह 6 (6 !!!) साल पहले [2] पर दायर बग से आता है। जबकि आपको अपने स्वयं के संस्करण को होस्ट करना होगा और इसे हाथ से पैच करना होगा (पैच नवीनतम संस्करणों में सफाई से लागू नहीं होगा, इसलिए आपको मैन्युअल रूप से संपादन करना होगा), यह आपको ज्यादातर वही मिलेगा जहां आप होना चाहते हैं। बहुत बुरा है, और सब कुछ संभाल नहीं करता है, लेकिन कुल मिलाकर, कोई है जो अपने पैरों पर विभिन्न अनुमानों के साथ कई बेसलियर्स की जरूरत है।

दीर्घावधि:

यह उन चीजों में से एक है जो OpenLayers 3.0 को संबोधित करने की उम्मीद कर रहा है [3]।

एक उदाहरण बेस लेयर / ओवरले डाइकोटॉमी है। यह जानना अक्सर एक चुनौती है कि नक्शे के लिए संकल्प, अधिकतम, आदि कैसे और कहाँ निर्धारित करें। मानचित्र और परतों के बीच प्रोजेक्शन हैंडलिंग और प्रोजेक्शन और अधिकतम और केंद्र जैसे गुणों के बीच का अंतर जटिल है।

2.X में मैप ऑब्जेक्ट बेस लेयर पर बहुत अधिक निर्भर करता है, और जो आगे जाकर बदलने वाला है। इसलिए, यदि आप 2013 के अंत तक पकड़ बना सकते हैं, तो आपके उपयोग के लिए पूर्व-निर्मित समाधान हो सकता है।

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


1

यहाँ आपके प्रश्न के रूप में कुछ है, OpenLayers में आधार परतों को कैसे अस्वीकृत किया जाए? और आपको परिवर्तन के बारे में कुछ जानकारी मिलती है, आपको इसे देखना चाहिए, जिससे गोलाकार मर्केस्टर रेखापुंज छवियां बनाई जा सकें

पहले पोस्ट से संक्षेप में संक्षेप में बताएं:

  1. OpenLayers वेक्टर लेयर्स को बदल सकते हैं (जैसे WFS)।
  2. रेखीय परतें OpenLayers द्वारा रूपांतरित नहीं की जा सकतीं।
  3. कोई भी अच्छा WMS आपके लिए प्रतिक्षेप करने में सक्षम होना चाहिए।
  4. ArcGIS सर्वर 900913 में परतें प्रदान नहीं कर सकता है क्योंकि उस wkid असमर्थित है। 3857, दूसरी ओर ...!

और दूसरे लिंक से:

उन कारणों में से एक जो गोलाकार मर्केटर प्रक्षेपण इतना महत्वपूर्ण है कि यह एकमात्र प्रक्षेपण है जो Google मानचित्र जैसी व्यावसायिक परतों के शीर्ष पर छवि डेटा को ओवरलेइंग करने की अनुमति देगा। ब्राउज़र में रेखापुंज छवियों का उपयोग करते समय, छवियों को उसी तरह से पुनर्प्रकाशित करना संभव नहीं है जिस तरह से यह 'मोटी' जीआईएस क्लाइंट में हो सकता है। इसके बजाय, सभी छवियों को एक ही प्रक्षेपण में होना चाहिए। गोलाकार मर्केटर बनाने के लिए अनुमानित टाइलें उस सॉफ़्टवेयर पर निर्भर करती हैं जो आप अपनी छवियों को उत्पन्न करने के लिए उपयोग कर रहे हैं।

महत्वपूर्ण बात यह है कि:

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.

और डेटासेट बदलने के लिए, मेरा जवाब आपको इस बारे में, यहाँ पर मदद कर सकता है

मुझे उम्मीद है इससे आपको मदद मिली होगी...


मैंने proj4js के साथ कोड जोड़ा है जो ओवरले के लिए काम करता है लेकिन 2 अलग-अलग आधार परतों के लिए इस पर कोई टिप्पणी नहीं करता है?
किंकजौ

1

900913 के संदर्भ में अपनी WMS लेयर को सेट करें (आपका डेटा 4326 में है)। फिर जब आप OpenLayers में परत जोड़ते हैं, तो सुनिश्चित करें कि आपने मानचित्र का प्रक्षेपण 900913 पर सेट किया है (या बस पहले Google मानचित्र जोड़ना सुनिश्चित करें)। फिर जब आप WMS लेयर जोड़ते हैं, तो OpenLayers मैप प्रोजेक्शन (900913) में डेटा का अनुरोध करेगा और जियोसेवर 4326 से 900913 मक्खी पर रीप्रोजेक्ट करेगा।


कोड जोड़ा गया। इन लेयर के बीच स्विच करने पर समस्या होती है। जब मैं WGS 4326 के साथ लेयर को बेस लेयर के रूप में लोड करता हूं और जब मैं google लेयर पर स्विच करता हूं और जूम मैप को थोड़ा सा पैन कर लेता है तो जूम का स्तर ठीक रहता है।
किंकजौ

नक्शा बदलें। डैडलियर्स ([dsb, dG, gmap_gs]); to map.addLayers ([gmap_gs, dsb, dG]);
इयान Turton

पहले लोड पर Google मानचित्र दिखाता है लेकिन फिर भी परत को स्विच नहीं कर सकता। स्विच करते समय त्रुटि
kinkajou

0

सामान्य तौर पर यह संभव नहीं है क्योंकि OpenLayers आधार परत से मानचित्र के प्रक्षेपण को निर्धारित करता है।

चारों ओर एक संभव काम जियोसर्वर जैसे कैस्केडिंग डब्ल्यूएमएस का उपयोग करना है ताकि एक से दूसरे प्रक्षेपण में आधार परतों में से एक को फिर से निकाला जा सके।


0

मैंने ओएल 2.13.1 (टैग से) पैच लागू किया

Trac से अंतिम पैच फ़ाइल काम नहीं किया जब कोई प्रतिबंधित नहीं दिया गया था, इसलिए मैंने इसे भी ठीक कर दिया।

आप इसे एक पाठ उदाहरण के साथ यहाँ प्राप्त कर सकते हैं:

https://github.com/glferri/ol2-reproj-2.13.1/blob/master/OL.Reproject_2.13.1_fixRestrictedExtent.patch

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.