OpenLayers में आधार परतों को पुन: प्रस्तुत करना


9

मेरे पास उत्तरी अमेरिका के कुछ स्थानों के लिए वेक्टर / टोपो / छवि टाइल वाले नक्शे हैं जो आर्कजीस सर्वर रेस्ट सेवा के रूप में प्रकाशित हुए थे। ये नक्शे (ए) ईपीएसजी: 26912 प्रक्षेपण में आधारित हैं। अब मैं अपने OpenLayers वेब ऐप के लिए इन्हें आधार मानचित्र के रूप में उपयोग करना चाहता हूं; इसके अलावा, मैं अन्य आधार मानचित्र स्रोतों (बी), जैसे, ओपनचिटमैप, गूगल मैप्स, ईएसआरआई, इत्यादि का भी उपभोग करना चाहता हूं क्योंकि इनमें से अधिकांश नक्शे EPSG: 900913 में हैं जो मेरे ज्ञान के लिए गोलाकार मर्केटर प्रोजेक्शन है, अगर मैं सिर्फ इनको OpenLayers मानचित्र घटक में आधार मानचित्र परतें, समूह A और समूह B सही ढंग से ओवरले नहीं करेगा, जिसका अर्थ है कि वे अलग-अलग मानचित्र के रूप में प्रदर्शित किए जाते हैं।

मुझे पता है कि यह प्रक्षेपण से संबंधित कुछ है, और proj4js के साथ कुछ कोड की आवश्यकता हो सकती है, हालांकि, एक नौसिखिया के रूप में, मैं वास्तव में नहीं जानता कि क्या शुरू करना है।

मूल रूप से, मैं ओएसएम / गूगल मैप्स को टियर 1 में पूरी दुनिया के लिए बेस मैप के रूप में रखना चाहता हूं, फिर टियर 2 में ईपीएसजी: 26912 बेस मैप्स को उत्तरी अमेरिका के कुछ स्थानों के लिए डाल दें और अन्य डब्ल्यूएमएस या डब्ल्यूएफएस को शीर्ष स्तर पर रख दें।

क्या मुझे EPSG: 26912 को EPSG: 900913 या इसके विपरीत रूपांतरित करने की आवश्यकता है? मुझे लगता है कि मुझे आधार प्रक्षेपण के रूप में ईपीएसजी: 900913 का उपयोग करना चाहिए।


1
जैसा कि मैंने नीचे @ iant के उत्तर पर टिप्पणी की है, Esri सॉफ्टवेयर 900913 wkid का समर्थन नहीं करता है, लेकिन wkid EPSG: 3857 या ESRI: 102100 के समान समन्वय प्रणाली का समर्थन करता है।
15

जवाबों:


7

OpenLayers वेक्टर लेयर्स को बदल सकते हैं (जैसे WFS)। यदि आपकी वेक्टर परत EPSG: 900913 या EPSG: 4326 में है, तो ओपन लॉयर्स स्वयं परिवर्तन को संभाल सकते हैं, अन्यथा, इसमें Proj4js शामिल होना चाहिए।

Proj4js के साथ OpenLayers का उपयोग कैसे करें, इसके उदाहरण हैं।

रेखीय परतें OpenLayers द्वारा रूपांतरित नहीं की जा सकतीं। यदि आपको उन्हें एक अलग प्रक्षेपण में शामिल करने की आवश्यकता है, तो आपको उन्हें अपने आप से अस्वीकार करना होगा या जियोवेबचेच जैसे डब्ल्यूएमएस प्रॉक्सी का उपयोग करना होगा


4

कोई भी अच्छा WMS आपके लिए प्रतिक्षेप करने में सक्षम होना चाहिए। हालांकि मुझे नहीं पता कि आर्किस सर्वर एक अच्छा डब्ल्यूएमएस है। यदि यह 900913 में परत प्रदान करने में असमर्थ है, तो आप के लिए अस्वीकृति को संभालने के लिए एक कैस्केडिंग डब्ल्यूएमएस के रूप में जियोसर्वर या मैपसेवर का उपयोग करने पर विचार करें।


3
ArcGIS सर्वर 900913 में परतें प्रदान नहीं कर सकता है क्योंकि उस wkid असमर्थित है। 3857, दूसरी ओर ...!
mkennedy

आप की जरूरत docs.openlayers.org/library/... तो
इयान Turton

2

मैं कोई OpenLayers गुरु नहीं हूं, लेकिन आपको मानचित्र ऑब्जेक्ट के प्रक्षेपण को निर्दिष्ट करने की आवश्यकता है। मुझे लगता है कि यह WGS84 के लिए चूक है .... मैं गलत हो सकता है मैं भी नक्शे में पहली परत का स्रोत हो सकता है।

वैसे भी कुछ इस तरह की कोशिश करो (सीमा को उचित रूप में बदलें)

var googleMercator = new OpenLayers.Projection("EPSG:900913");
var wgs84 = new OpenLayers.Projection("EPSG:4326");
var options = {
    projection: googleMercator,
    units: "m",
    numZoomLevels: 18,
    maxResolution: 156543.0339,
    maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34),
    displayProjection: wgs84,
    controls:[new OpenLayers.Control.Navigation()]}

map = new OpenLayers.Map('div', options);

लेकिन फिर याद रखें कि जब आप एक लाट का उपयोग करके मानचित्र केंद्र को सेट करना चाहते हैं, तो लोन आपको प्रोजेक्ट करना होगा जो WGS से GoogleMercator तक इस तरह समन्वयित करें (ऊपर से wgs84 और googleMercator चर का उपयोग करके)।

 var mapCenter = new OpenLayers.LonLat(148,-36);
 mapCenter.transform(wgs84, googleMercator);
 map.setCenter(mapCenter,8);

1

पहली बात यह है कि निम्नलिखित के रूप में अपने मानचित्र प्रक्षेपण और प्रदर्शन प्रक्षेपण को परिभाषित करें:

map.projection = "EPSG:23030";
map.displayProjection = new OpenLayers.Projection("EPSG:4326");

समन्वय रूपांतरण जोड़ना

एक बार जब आप अलग-अलग अनुमानों का उपयोग करना शुरू कर देते हैं, तो आपको निर्देशांक को एक प्रक्षेपण से दूसरे में परिवर्तित करने की संभावना के बारे में सोचना शुरू करना होगा, या तो उन निर्देशांक को प्रदर्शित करते समय, या मानचित्र के एक अलग समन्वय प्रणाली में वेक्टर डेटा में पढ़ते समय। जैसा कि पहले कहा गया है, यह रूपांतरण तर्क ओएल द्वारा प्रदान नहीं किया गया है, इसलिए आपको Proj4js का उपयोग करना होगा, जिसे आपको अपने पृष्ठ में शामिल करना होगा:

<script src="http://proj4js.org/lib/proj4js-compressed.js"></script>

Proj4js.defs["EPSG:23030"] = "+proj=utm +zone=30 +ellps=intl +towgs84=-131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39 +units=m +no_defs";

परिभाषा के बाद आप इसे विधि बदलकर कर सकते हैं:

var lonlat = new OpenLayers.LonLat(-3.57138, 39.8384);
lonlat.transform(map.displayProjection, map.baseLayer.projection);
map.setCenter(lonlat, 5);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.