जवाबों:
यदि आप Google मैप्स या आभासी पृथ्वी पर ओवरलेइंग और एक टाइलिंग स्कीम बनाने की योजना बना रहे हैं, तो मुझे लगता है कि आप जो देख रहे हैं, वह प्रत्येक ज़ूम स्तर के लिए पैमाने हैं, इनका उपयोग करें:
20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9 : 2311162.307000
8 : 4622324.614000
7 : 9244649.227000
6 : 18489298.450000
5 : 36978596.910000
4 : 73957193.820000
3 : 147914387.600000
2 : 295828775.300000
1 : 591657550.500000
स्रोत: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm
मुझे यह प्रतिक्रिया मिली - Google कर्मचारी द्वारा लिखी गई - यह शायद सबसे सटीक होगी:
यह सटीक नहीं होगा, क्योंकि व्यापारी प्रक्षेपण (जैसे Google मानचित्र) के साथ एक मानचित्र का संकल्प अक्षांश पर निर्भर है।
इस सूत्र का उपयोग करके गणना करना संभव है:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
यह इस धारणा पर आधारित है कि पृथ्वी की त्रिज्या 6378137 मी है। हम किस मूल्य का उपयोग करते हैं :)
इससे लिया गया: https://groups.google.com/forum/# .topic / google-maps-js-api-v3 / hDRO4oHVSeM
BTW - मैं अनुमान लगा रहा हूँ कि:
'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
गणित को समझने में आपकी मदद करने के लिए (सटीक गणना नहीं, यह सिर्फ दृष्टांत के लिए है):
मान लीजिए कि आपके कंप्यूटर मॉनीटर में 100 पिक्सेल प्रति इंच (PPI) है। इसका मतलब है कि 256 पिक्सेल की लंबाई लगभग 6.5 सेमी है। और वह 0.065 मी ।
पर ज़ूम स्तर 0 , देशांतर के पूरे 360 डिग्री दिखाई दे रहे हैं एक एकल टाइल में । आप इसे Google मानचित्र में नहीं देख सकते क्योंकि यह स्वचालित रूप से ज़ूम स्तर 1 पर चला जाता है, लेकिन आप इसे OpenStreetMap के नक्शे पर देख सकते हैं (यह उसी टाइलिंग योजना का उपयोग करता है)।
भूमध्य रेखा पर 360 अवक्षेपण पृथ्वी की परिधि के बराबर है, 40,075.16 किमी, जो 40075160 मीटर है
40065160 मीटर को 0.065 मीटर से विभाजित करें और आपको 616313361 मिलेगा , जो 100 DPI के साथ कंप्यूटर मॉनिटर के लिए भूमध्य रेखा पर ज़ूम स्तर 0 का एक पैमाना है।
यह भी देखें: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
591657550.500000
इस उत्तर के अनुसार लेवल 0 है। लेकिन @CaptDragon के अनुसार Level 1 है। मुझे Google मानचित्र के साथ गणना करने के लिए स्तर 1 से शुरू करने पर विचार करना चाहिए?
इतना आसान नहीं है। प्रक्षेपण को देखते हुए, टाइल पिक्सेल का आकार उस क्षेत्र के अक्षांश पर निर्भर करता है जिसमें आप रुचि रखते हैं। फिर स्क्रीन पिक्सेल आकार में टाइल पिक्सेल आकार बदलने के मामले में, यह स्क्रीन पर निर्भर करता है और डेटा प्रदर्शित होने वाले रिज़ॉल्यूशन पर निर्भर करता है। डीपीआई आपकी स्क्रीन का उपयोग कर रहा है।
सीधा आधिकारिक सही उत्तर:
591657550.500000 / 2^(level-1)
यह आपको ज़ूम स्तर में प्रवेश करते हुए, ऊपर दी गई तालिका देता है।
इसे jsfiddle.net पर लाइव करने का प्रयास करें
क्योंकि सवाल केवल Google MAPS का है, EARTH का नहीं, OP 3D ज्यामिति की परवाह नहीं करता है। Google मानचित्र ALREADY के समतल हैं इसलिए 1 पिक्सेल हमेशा एक ही दूरी (DEGREES में, जो कि एक Google मानचित्र के लिए चिंता का विषय है), यहाँ और इक्वेटर में ध्रुवों की तरह है।
वैसे, क्या आपको एहसास हुआ कि दुनिया के नक्शे की पहली पिक्सेल पंक्ति के अंदर, पैमाना 1: 1 है?
Microsoft से पुण्य पृथ्वी टाइल प्रणाली के प्रलेखन में एक ऐसी तालिका है । लेकिन जैसा कि GuillaumeC ने कहा है कि मान अक्षांश और स्क्रीन रिज़ॉल्यूशन पर निर्भर करता है। तालिका भूमध्य रेखा पर मापा गया और 96 डीपीआई के स्क्रीन रिज़ॉल्यूशन पर मान देता है।
PS: इसके बारे में निश्चित नहीं है, लेकिन Google द्वारा ज़ूम स्तरों की तुलना में Microsoft द्वारा ज़ूम स्तरों को 1 से स्थानांतरित किया जा सकता है। लेकिन वे निश्चित रूप से उसी प्रक्षेपण का उपयोग करते हैं ताकि मान Google के लिए सही रहें।
त्रिज्या @ भूमध्य रेखा 6,378,137 मीटर (WGS-84) सटीक
भूमध्य रेखा पर परिधि = 40,075,017 मीटर (2 )r)
ज़ूम स्तर 24 परिधि में 2 से 32 शक्ति (4,294,967,296) पिक्सल का उपयोग करता है।
इक्वेटोरियल सर्कुलेशन / 2 32 = .009330692 मीटर प्रति पिक्सेल
अक्षांश पर इकाई = (कोसाइन ऑफ अक्षांश) X (भूमध्य रेखा पर इकाई)
ज़ूम स्तर प्रत्येक वेतन वृद्धि को दोगुना करता है।
1 फुट (अंतर्राष्ट्रीय) = 0.3048 मीटर
संपादित करें
अच्छी तरह से वास्तव में इसके साथ शुरू करने के लिए एक वैध सवाल नहीं है। स्केल अनुपात मुद्रित दस्तावेजों के सापेक्ष होते हैं न कि कंप्यूटर स्क्रीन के। किसी भी सटीकता के साथ इन छवियों का उपयोग करने के लिए आपको प्रत्येक पिक्सेल के आयाम को जानना होगा, फिर उस छवि को मापें जो आपके ओवरले के साथ है।
तो 15-20 साल पहले किसी ने WGS-84 को आधार डेटा के रूप में लिया। (पिछली पोस्ट में ध्यान दें कि किसी ने 40,075,160 के मूल्य का उपयोग किया है मैंने इसे कुछ स्थानों पर विकिपीडिया में देखा है और यह गलत है। सही मूल्य 40,075,017 है।
फिर उन्होंने इसे लिया और पूर्ण 32 बिट पूर्णांक द्वारा विभाजित किया। यह एक तार्किक विकल्प है क्योंकि यह वैश्विक सटीकता को लगभग एक सेंटीमीटर तक पहुंचाता है जो हवाई कल्पना के लिए बहुत है। 32 बिट पूर्णांक स्टोर और प्रोसेस करने के लिए भी कुशल हैं।
यह स्तर 24 क्यों चुना गया था, मुझे नहीं पता, लेकिन यहां किसी और ने काम किया था 0 आपको पृथ्वी के लिए 256 पिक्सेल टाइल तक नीचे ले जाता है।
अब एक उदाहरण के लिए कि उपरोक्त डेटा का उपयोग कैसे किया जाए। कहते हैं कि मैं ज़ूम लेवल 20 पर एक छवि रखता हूं (जैसा कि वर्तमान में ज़ूम करने पर वे आपको मिलते हैं) ले 0.009330692 (भूमध्य रेखा पर 24 ज़ूम करें) इसे ज़ूम 23 के लिए दोगुना करें, ज़ूम 22 के लिए फिर से, ज़ूम 21 के लिए फिर से और ज़ूम 20 के लिए एक अंतिम बार। .अब आपके पास 0.149231071 होना चाहिए।
अब हम कहते हैं कि हमारी छवि अक्षांश 45 पर है। उस (0.707106781) का कोसाइन लें और इसे हमारे 0.149231071 से गुणा करें और यह आपको 0.105564729 मीटर देगा। यही कारण है कि ज़ूम स्तर 20 पर अक्षांश 45 पर एक छवि से एक पिक्सेल की लंबाई और ऊंचाई है। यदि आप उस क्षेत्र की 1000 x 1000 पिक्सेल की छवि को कैप्चर करते हैं, तो आयाम 105.56 मीटर वर्ग है। यदि आप चाहते हैं कि पैर 0.3048 विभाजित हों
सूत्रों के अनुसार I Essencial ने Google और MS मैपिंग समर्थन साइटों सहित वेब पर पाए जाने वाले विभिन्न जानकारी और दस्तावेज़ों से लगभग 5 साल पहले इंजीनियर को उलट दिया।
मैंने समय के इस सौ का उपयोग किया है और इसे वास्तव में क्षेत्र सर्वेक्षण डेटा और इसके हमेशा सही होने के साथ ओवरलेइंग किया है। इसे यहां पोस्ट की गई किसी भी तालिका के विरुद्ध जांचें और संख्याओं का मिलान होगा।
बस कुछ गणना की और निम्नलिखित परिणाम प्राप्त किए:
Google मैप्स में 1 किमी शासक (मानचित्र के नीचे बाईं ओर) दिखाया गया है, जो ज़ूम स्तर पर लंबाई में 90 पिक्सेल है। इसका मतलब निम्न है:
स्क्रीन रिज़ॉल्यूशन मानकर 96 dpi या 36 dpcm है, ज़ूम लेवल 13 में हमारे पास 1cm में 0.4km (36/90) है, जो 96dpi स्क्रीन के लिए 1: 40,000 के मैप स्केल की पैदावार देता है।
स्क्रीन पर विभिन्न परिचालनों के लिए आधार के रूप में 90px लेना सबसे अच्छा है, क्योंकि सभी नंबर सभी ज़ूम स्तरों पर गोल होंगे, अर्थात
और इसी तरह।
ध्यान दें कि यह एक सन्निकटन है जो बड़े के बजाय छोटे तराजू पर अधिक या कम ठीक काम करना चाहिए।
(और Google को अंत में गोल संख्या पसंद है ...)
प्रदान की गई सभी जानकारी के आधार पर, मैंने एक फ़ंक्शन बनाया है जो मानचित्र पर लागू किए गए सबसे अच्छे z देता है जब आप एक क्षैतिज रेखा चाहते हैं जो प्रदर्शित मानचित्र के N% का प्रतिनिधित्व करता है।
प्रदर्शित मानचित्र की अपनी पिक्सेल चौड़ाई है।
function calculateZoom(WidthPixel,Ratio,Lat,Length){
// from a segment Length (km),
// with size ratio of the segment expected on a map (70%),
// with a map WidthPixel width in pixels (100px),
// and a latitude (45°) we can get the best Zoom
// assume earth is a perfect ball with radius : 6,378,137m and
// circumference at the equator = 40,075,016.7 m
// The full world on google map is available in tiles of 256 px;
// it has a ratio of 156543.03392 (px/m).
// For Z = 0;
// pixel scale at the Lat_level is ( 156543,03392 * cos ( PI * (Lat/180) ))
// The map scale increases at the rate of square root of Z.
//
Length = Length *1000; //Length is in Km
var k = WidthPixel * 156543.03392 * Math.cos(Lat * Math.PI / 180); //k = circumference of the world at the Lat_level, for Z=0
var myZoom = Math.round( Math.log( (Ratio * k)/(Length*100) )/Math.LN2 );
myZoom = myZoom -1; // Z starts from 0 instead of 1
//console.log("calculateZoom: width "+WidthPixel+" Ratio "+Ratio+" Lat "+Lat+" length "+Length+" (m) calculated zoom "+ myZoom);
// not used but it could be useful for some: Part of the world size at the Lat
MapDim = k /Math.pow(2,myZoom);
//console.log("calculateZoom: size of the map at the Lat: "+MapDim + " meters.");
//console.log("calculateZoom: world circumference at the Lat: " +k+ " meters.");
return(myZoom);
}
मैं अभी तक एक टिप्पणी नहीं जोड़ सकता लेकिन यह पीट के उत्तर का एक संभावित स्रोत है: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[...] ध्यान दें कि प्रत्येक बढ़ता हुआ ज़ूम स्तर x और y दोनों दिशाओं में दो गुना बड़ा है। इसलिए, प्रत्येक उच्च ज़ूम स्तर में पूर्ववर्ती स्तर के समान चार गुना अधिक रिज़ॉल्यूशन होता है। उदाहरण के लिए, ज़ूम स्तर 1 पर, नक्शे में 4 गुणा 256x256 पिक्सेल टाइलें होती हैं, जिसके परिणामस्वरूप 512x512 का पिक्सेल स्थान होता है। ज़ूम स्तर 19 पर, मानचित्र पर प्रत्येक x और y पिक्सेल को 0 और 256 * 2 19 के बीच के मान का उपयोग करके संदर्भित किया जा सकता है
मैंने चार ज़ूम स्तरों के लिए पैमानों की गणना की:
ज़ूम स्तर | स्केल 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000
ऐसा लगता है कि जूम स्तर दोगुना हो गया है क्योंकि एक कदम बढ़ गया है। इसलिए, मुझे उम्मीद है कि जूम स्तर 16 के लिए स्केल 1: 8000 और इतने पर होगा।
हाय मुझे लगता है कि मैंने 1pixel = 11.627 किमी की सीधी रेखा में गणना की है; पृथ्वी की त्रिज्या को ध्यान में नहीं रखते। यहां वीडियो का लिंक दिया गया है जिसमें बताया गया है: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be । आशा है कि अपने मन को साफ करें।
Zoom level set meters: ${meters}
); var zoomfactor = 1; अगर (मीटर <1128) {zoomfactor = 15; } और यदि ((मीटर> 1128) && (मीटर <2256)) {ज़ूमफैक्टोर = 14; } और यदि ((मीटर> 2256) && (मीटर <4513)) {ज़ूमफैक्टोर = 13; } और यदि ((मीटर> 4513) && (मीटर <9027)) {ज़ूमफैक्टोर = 12; } और यदि ((मीटर> 9027) && (मीटर <18055)) {zoomfactor = 11; } और (अगर (मीटर> 18055) && (मीटर <36111)) {zoomfactor = 10; } और अगर ((मीटर> 36111) && (72 <