2014-05-04 5 views
5

मैंने समान शीर्षक वाले कुछ प्रश्न देखे हैं, लेकिन वे x और y पिक्सेल निर्देशांक का जिक्र कर रहे हैं।Google मानचित्र x अक्ष और ज़ूम पैरामीटर से अक्षांश और रेखांश बाउंड कैसे प्राप्त करें

मैं से x और y की वास्तविक संख्या के बारे में टाइल पूछ रहा हूँ गूगल मैप्स getTile() समारोह:

प्रश्न को स्पष्ट करने के लिए ...

एक्स, वाई, और जूम getTile में पैरामीटर को देखते हुए () समारोह, मैं टाइल के अक्षांश और देशांतर सीमा कैसे प्राप्त कर सकता हूं?

CoordMapType.prototype.getTile = function(coord, zoom, ownerDocument) { 

    var x = coord.x, 
    y = coord.y, 
    url = "http://mt1.google.com/vt/lyrs=y&x="+x+"&y="+y+"&z="+zoom; 
    //other stuff 
} 

इस समय मुझे एकमात्र कारण यह है कि मैं इस टाइल प्रक्षेपण पर अधिकतम ज़ूम स्तर निर्धारित करना चाहता हूं। इस लिंक से: Maximum Zoom, यह बताता है कि अधिकतम ज़ूम खोजने के लिए, मुझे getMaxZoomAtLatLng() का उपयोग करके अक्षांश और देशांतर मान की आवश्यकता होगी। तो अगर मैं सीमाएं प्राप्त कर सकता हूं, तो मैं अपने अधिकतम ज़ूम को खोजने के लिए सीमाओं के भीतर किसी भी अक्षांश और देशांतर बिंदुओं का उपयोग कर सकता हूं।

विकल्प मैंने सोचा है कि मैंने एक छवि बना रही है और यह जांच कर रहा है कि क्या src url में कोई त्रुटि है (यह मेरे लिए एक भयानक विचार प्रतीत होता है, क्योंकि यह जांचने के लिए कि क्या इमेजरी मौजूद है या नहीं, मैं बहुत बुरे अनुरोध कर रहा हूं)।

var img = new Image; 
img.onload = function() {/*imagery exists*/ } 
img.onerror = function() {/*past maximum zoom*/ } 
img.src = url; 

संपादित करें:

आगे की जांच पड़ताल करने के बाद, मुझे लगता है कि getMaxZoomAtLatLng() समारोह एक ajax कॉल जो मेरे योजनाओं में फिट नहीं होगा उपयोग कर रहा है। लेकिन मुझे अभी भी दिलचस्पी है कि किसी दिए गए टाइल की अक्षांश और देशांतर सीमाएं कैसे खोजें (जो अन्य अनुप्रयोगों के लिए उपयोगी हो सकती है)।

+0

क्यों नीचे वोट? मैंने phrasing और इस सवाल की तैयारी में बहुत मेहनत की है। –

उत्तर

11

एक बुनियादी गूगल-मैप मान लिया जाये कि मर्केटर प्रोजेक्शन और 256x256 के एक tileSize का उपयोग कर:

प्रत्येक (x- अक्ष और y- अक्ष) पर टाइल्स की संख्या, Math.pow(2,zoom) है तो जूम 0 नक्शे पर उपयोग कर रहा है 1 टाइल, ज़ूम 1 4 टाइल्स पर, ज़ूम 2 16 टाइल्स और इतने पर।

सबसे पहले टाइल के दक्षिण पश्चिम/पूर्वोत्तर बिंदुओं की गणना करें।

x = tile.x * tileSizeInPoints 
y = (tile.y * tileSizeInPoints) + tileSizeInPoints 

पूर्वोत्तर-बिंदु::

x = (tile.x * tileSizeInPoints) + tileSizeInPoints 
y = tile.y * tileSizeInPoints 

ये अंक LatLngs में अनुवाद किया जाना चाहिए

(अंकों में) एक टाइल का आकार 256/Math.pow(2,zoom)

दक्षिण पश्चिम-बिंदु है। जब आप मानचित्र का उपयोग करते हैं तो आप मानचित्र प्रक्षेपण के विधि fromLatLngToPoint का उपयोग कर सकते हैं।

कस्टम कार्यान्वयन के लिए https://developers.google.com/maps/documentation/javascript/examples/map-coordinates पर एक नज़र डालें।

एक संभावित एपीआई-स्वतंत्र कार्यान्वयन:

MERCATOR={ 

    fromLatLngToPoint:function(latLng){ 
    var siny = Math.min(Math.max(Math.sin(latLng.lat* (Math.PI/180)), 
            -.9999), 
          .9999); 
    return { 
     x: 128 + latLng.lng * (256/360), 
     y: 128 + 0.5 * Math.log((1 + siny)/(1 - siny)) * -(256/(2 * Math.PI)) 
    }; 
    }, 

    fromPointToLatLng: function(point){ 

    return { 
     lat: (2 * Math.atan(Math.exp((point.y - 128)/-(256/(2 * Math.PI)))) - 
      Math.PI/2)/ (Math.PI/180), 
     lng: (point.x - 128)/(256/360) 
    }; 

    }, 

    getTileAtLatLng:function(latLng,zoom){ 
    var t=Math.pow(2,zoom), 
     s=256/t, 
     p=this.fromLatLngToPoint(latLng); 
     return {x:Math.floor(p.x/s),y:Math.floor(p.y/s),z:zoom}; 
    }, 

    getTileBounds:function(tile){ 
    tile=this.normalizeTile(tile); 
    var t=Math.pow(2,tile.z), 
     s=256/t, 
     sw={x:tile.x*s, 
      y:(tile.y*s)+s}, 
     ne={x:tile.x*s+s, 
      y:(tile.y*s)}; 
     return{sw:this.fromPointToLatLng(sw), 
       ne:this.fromPointToLatLng(ne) 
       } 
    }, 
    normalizeTile:function(tile){ 
    var t=Math.pow(2,tile.z); 
    tile.x=((tile.x%t)+t)%t; 
    tile.y=((tile.y%t)+t)%t; 
    return tile; 
    } 

} 

निम्न स्वरूप के साथ तर्क के रूप में एक वस्तु की आपूर्ति करके कॉल MERCATOR.getTileBounds():

{ 
x:tileIndexX, 
y:tileIndexY, 
z:zoom 
} 

डेमो: http://jsfiddle.net/doktormolle/55Nke/

+1

धन्यवाद, मैं एक ही स्थान पर सभी जानकारी की सराहना करता हूं। –

+0

लीफलेट टाइल्स के बारे में क्या? – knutole

0

मुझे लगता है कि Google मानचित्र टाइलिंग सिस्टम बिंग्स मानचित्र टाइलिंग सिस्टम के समान है। टाइल्स निचले दाएं भाग में ऊपरी बाएं से शुरू होती हैं और प्रत्येक टाइल 256x256: http://msdn.microsoft.com/en-us/library/bb259689.aspx है।

संबंधित मुद्दे