जैसा कि मुझे पता है, पूर्ण पृथ्वी मानचित्र 256x256 छवि है।
हां।
इसका मतलब है कि एन लंबवत पिक्सल में x डिग्री होती है, लेकिन n क्षैतिज पिक्सल में 2x डिग्री होती है। सही?
नहीं। एक पिक्सेल अक्षांश के आधार पर अक्षांश की विभिन्न मात्रा का प्रतिनिधित्व करेगा। भूमध्य रेखा पर एक पिक्सेल ध्रुवों के पास एक पिक्सेल से कम अक्षांश का प्रतिनिधित्व करता है।
मानचित्र के कोनों केंद्र, ज़ूम स्तर और मानचित्र आकार पर निर्भर होंगे, और आपको गणना करने के लिए मर्केटर प्रक्षेपण का उपयोग करना होगा। आप पूर्ण एपीआई लोड करने के लिए नहीं करना चाहती हैं, तो यहां मर्केटर प्रक्षेप वस्तु है:
var MERCATOR_RANGE = 256;
function bound(value, opt_min, opt_max) {
if (opt_min != null) value = Math.max(value, opt_min);
if (opt_max != null) value = Math.min(value, opt_max);
return value;
}
function degreesToRadians(deg) {
return deg * (Math.PI/180);
}
function radiansToDegrees(rad) {
return rad/(Math.PI/180);
}
function MercatorProjection() {
this.pixelOrigin_ = new google.maps.Point(MERCATOR_RANGE/2, MERCATOR_RANGE/2);
this.pixelsPerLonDegree_ = MERCATOR_RANGE/360;
this.pixelsPerLonRadian_ = MERCATOR_RANGE/(2 * Math.PI);
};
MercatorProjection.prototype.fromLatLngToPoint = function(latLng, opt_point) {
var me = this;
var point = opt_point || new google.maps.Point(0, 0);
var origin = me.pixelOrigin_;
point.x = origin.x + latLng.lng() * me.pixelsPerLonDegree_;
// NOTE(appleton): Truncating to 0.9999 effectively limits latitude to
// 89.189. This is about a third of a tile past the edge of the world tile.
var siny = bound(Math.sin(degreesToRadians(latLng.lat())), -0.9999, 0.9999);
point.y = origin.y + 0.5 * Math.log((1 + siny)/(1 - siny)) * -me.pixelsPerLonRadian_;
return point;
};
MercatorProjection.prototype.fromPointToLatLng = function(point) {
var me = this;
var origin = me.pixelOrigin_;
var lng = (point.x - origin.x)/me.pixelsPerLonDegree_;
var latRadians = (point.y - origin.y)/-me.pixelsPerLonRadian_;
var lat = radiansToDegrees(2 * Math.atan(Math.exp(latRadians)) - Math.PI/2);
return new google.maps.LatLng(lat, lng);
};
//pixelCoordinate = worldCoordinate * Math.pow(2,zoomLevel)
आप एक अलग फाइल करने के लिए कि बचा सकता है उदाहरण के लिए "MercatorProjection.js", और फिर अपने आवेदन में यह भी शामिल है।
<script src="MercatorProjection.js"></script>
ऊपर लोड फ़ाइल के साथ
, निम्नलिखित समारोह दिए गए आकार के और किसी दिए गए ज़ूम पर एक नक्शे के दप और पूर्वोत्तर कोने गणना करता है।
function getCorners(center,zoom,mapWidth,mapHeight){
var scale = Math.pow(2,zoom);
var centerPx = proj.fromLatLngToPoint(center);
var SWPoint = {x: (centerPx.x -(mapWidth/2)/ scale) , y: (centerPx.y + (mapHeight/2)/ scale)};
var SWLatLon = proj.fromPointToLatLng(SWPoint);
alert('SW: ' + SWLatLon);
var NEPoint = {x: (centerPx.x +(mapWidth/2)/ scale) , y: (centerPx.y - (mapHeight/2)/ scale)};
var NELatLon = proj.fromPointToLatLng(NEPoint);
alert(' NE: '+ NELatLon);
}
और आप इसे इस तरह से फोन चाहते हैं:
var proj = new MercatorProjection();
var G = google.maps;
var centerPoint = new G.LatLng(49.141404, -121.960988);
var zoom = 10;
getCorners(centerPoint,zoom,640,640);
की संभावित डुप्लिकेट http://stackoverflow.com/questions/4730885/how-do-i-get-the-bounds-of-a-static-google-map?rq=1 – j0nes