OpenLayers 3 दृश्य केंद्र बदलें


14

मैं OpenLayers 3 का उपयोग कुछ मानचित्रों के साथ बातचीत करने के लिए कर रहा हूं। मैं पहले अपना नक्शा घोषित करता हूं:

map = new ol.Map({
            target: 'map',
            layers: [
              new ol.layer.Tile({
                  source: new ol.source.OSM()
              })
                ],
            view: new ol.View({
                center: [0, 0],
                zoom: 2
            })
        });

मेरे पास एक ऐसी घटना है जो मेरे मानचित्र के दृश्य केंद्र को बदलने के लिए एक क्रिया को ट्रिगर करती है। इस तरह, (मेरे निर्देशांक EPSG:4326प्रारूप में हैं):

function CenterMap(lat, long) {
     console.log("Lat: " + lat + " Long: " + long);
     map.setView(new ol.View({
            center: ol.proj.transform([lat, long], 'EPSG:3857', 'EPSG:4326'),
            zoom: 5
     }));
}

जब फ़ंक्शन चलता है तो मुझे यह एक्सप्लोरर कंसोल पर मिलता है:

Lat: 9.0412851667 Long: -79.5658145000 

लेकिन नक्शे किसके पास जाते हैं [0,0], क्या किसी को पता है कि ऐसा क्यों होता है?

जवाबों:


26

Ol.proj.transform में आपको theProjection से पहले toProjection को निर्दिष्ट करने की आवश्यकता है, फिर इसे काम करना चाहिए।

जैसा कि माइकल जेंट्री अपने जवाब में बताते हैं, एक और समस्या यह है कि आपको देशांतर (पश्चिम-पूर्व इस प्रकार x) को पहले निर्दिष्ट करना होगा और फिर अक्षांश (दक्षिण-उत्तर में इस प्रकार y)।

और केंद्र को सेट करने का एक बेहतर तरीका यह है कि वर्तमान दृश्य प्राप्त करें और हमेशा एक नया बनाने के बजाय केंद्र को वहां सेट करें।

function CenterMap(long, lat) {
    console.log("Long: " + long + " Lat: " + lat);
    map.getView().setCenter(ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857'));
    map.getView().setZoom(5);
}

ठीक है, मैं इसे धन्यवाद मिला। एक और बात, अगर मैं इसे इस तरह बदलता हूं तो मुझे एक नई त्रुटि मिल रही है Uncaught TypeError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': float parameter 3 is non-finite. ol.js:457 2Uncaught RangeError: Invalid array length। और मुझे लगता है कि मेरे निर्देशांक बहुत लंबे हैं। अगर मैं इसे बदलने के लिए [131.044922, -25.363882]यह ठीक काम करता है। तो क्या मेरे निर्देशांक बहुत लंबे हैं ??
गुइललॉन

यह समस्या नहीं होनी चाहिए। किस समन्वय के साथ त्रुटि हुई? ऊपर जिन लोगों का आपने उल्लेख किया है?
साइमन ज़ीएक्स

हाँ वहाँ एक
गुइलोन

मैंने एक MapQuest मानचित्र के साथ इन निर्देशांक की कोशिश की और यह काम किया। ईपीएसजी की सीमा के भीतर -79 का एक देशांतर अभी भी है: 4326 (+/- 90 डिग्री के भीतर) और ईपीएसजी: 3857 (+/- 85 डिग्री के भीतर)।
साइमन ज़ीक्स

रेंडरर और एक रेंजर के अंदर आने वाला एक टाइपर
साइमन ज़ीएक्स

9

मेरे पास एक नया स्टाॅक एक्सचेंज खाता है और "अनटाइट्ड टाइपर:: कैनवस रेंडरिंगकॉनटेक्स्ट 2 डी" पर 'पुटमैजडाटा' को क्रियान्वित करने में विफल: "फ्लोटेड 3" गैर-परिमित है। त्रुटि। यह तब होता है क्योंकि आपके पास लेट और लंबे इनपुट पीछे होते हैं।

map.getView().setCenter(ol.proj.transform([lat, long], 'EPSG:4326', 'EPSG:3857'));

होना चाहिए:

map.getView().setCenter(ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857'));

किसी और को यह समस्या है।


हां, आप सही हैं - मैं अपने उत्तर को तदनुसार अपडेट करूंगा।
सिमोन ज़िक्स

0

ब्राउज़र-केवल उपयोग के लिए:

<script src='https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js'></script>


  ol.proj.transform() 

  ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857');

Js-app उपयोग के लिए

   // for projection
  import {transform} from 'ol/proj.js';

  // use this one : transform([-118.246521, 34.049039], 'EPSG:4326', 'EPSG:3857')





   var map = new Map({
    layers: layers,
    target: 'map',
    view: new View({
      //center: [-118.246521, 34.049039],
        center: transform([-118.246521, 34.049039], 'EPSG:4326', 'EPSG:3857'),
      zoom: 16
    })
  });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.