อัตราส่วนการซูมของ Google แผนที่เท่าไหร่ที่สัมพันธ์กัน?


83

ทุกคนสามารถให้ลิงก์ (หรือรายละเอียดบางส่วน) ให้ฉันตามอัตราส่วนจริงกับตัวเลข "ระดับการซูม" สำหรับ Google แผนที่ได้หรือไม่

เช่นGoogle Maps ระดับ 13 = 1: 20000


1
จากข้อมูลแรกที่ฉันทำฟังก์ชั่นนี้บางทีใครบางคนสามารถใช้มันได้! ฟังก์ชัน setZoomLevel (เมตร) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; ถ้า (เมตร <1128) {zoomfactor = 15; } อื่นถ้า ((เมตร> 1128) && (เมตร <2256)) {zoomfactor = 14; } อื่นถ้า ((เมตร> 2256) && (เมตร <4513)) {zoomfactor = 13; } อื่นถ้า ((เมตร> 4513) && (เมตร <9027)) {zoomfactor = 12; } อื่นถ้า ((เมตร> 9027) && (เมตร <18055)) {zoomfactor = 11; } อื่นถ้า ((เมตร> 18055) && (เมตร <36111)) {zoomfactor = 10; } อื่นถ้า ((เมตร> 36111) && (เมตร <72
Friis1978

คำตอบ:


79

หากคุณกำลังออกแบบแผนที่คุณวางแผนที่จะวางทับแผนที่ 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


2
@capdragon ขอบคุณ นั่นเป็นแหล่งที่รู้จักกันดี (ESRI) แต่มันทำให้เรายังสงสัยว่าพวกมันเกิดขึ้นกับเครื่องชั่งเหล่านี้อย่างไร
whuber

4
เหตุผลมีความสำคัญต่อใคร ฉันไม่เห็นการกล่าวถึงเหตุผลใด ๆ ในคำถาม ฉันเชื่อว่าเขาต้องการคำตอบสำหรับคำถามตรงไปตรงมา
CaptDragon

4
@ cap โดยไม่มีเหตุผลมันเป็นเรื่องยากหรือเป็นไปไม่ได้ที่จะแยกแยะคำตอบที่ถูกต้องจากคำตอบที่ไม่ถูกต้อง ไม่มีเหตุผลมีใครเหลือต้องพึ่งพาอำนาจของผู้ตอบ ฉันค่อนข้างแน่ใจว่าเหตุผลที่คำตอบอื่น ๆ ในกระทู้นี้ได้รับการโหวตและคุณไม่ได้มีส่วนเกี่ยวข้องกับความถูกต้องหรือตรงไปตรงมา - คุณเป็นคนที่เชื่อถือได้และตรงไปตรงมามากที่สุด - แต่มีทุกอย่างที่จะ ทำกับการให้เหตุผลของผู้อื่น BTW ฉันไม่ได้ลงคะแนนของคุณ
whuber

3
ขอบคุณ: +1 พวกคุณอาจจะเป็นนักภูมิศาสตร์หรือผู้เชี่ยวชาญด้านการสำรวจระยะไกล ฉันเป็นเพียงผู้พัฒนาระบบสารสนเทศภูมิศาสตร์ที่ต้องการช่วยให้ผู้ชายตอบคำถามของเขาได้ เพื่อนร่วมงานของฉัน (ประเภท PHD, double MIT Major) เข้าสู่การบรรยายหนึ่งชั่วโมงทุกครั้งที่ฉันถามคำถามง่าย ๆ กับเขาและทำให้ฉันรู้สึกสับสนระหว่างทาง ฉันไม่ถามคำถามเขาอีกต่อไป (ฉันมีผู้เชี่ยวชาญด้านวิทยาศาสตร์) ฉันเข้าใจว่าคนอื่นชอบเข้าไปในเนื้อของเหตุผลและอื่น ๆ แต่พวกเราหลายคนไม่รู้เกินไปที่จะรู้ว่าสิ่งที่พวกเขากำลังพูดถึง IMHO พวกเขาสับสนกับคำตอบที่ไม่ตอบคำถามของเขา
CaptDragon

10
ตาชั่งถูกเลือกเพื่อให้พวกเขาสามารถแบ่งอย่างเท่าเทียมกันโดยกระเบื้องแรสเตอร์ที่อยู่ในฐาน 2 (เช่น 128, 512 ... ) Bing ทำเช่นเดียวกันmsdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Hall

44

ฉันพบคำตอบนี้ - เขียนโดยพนักงานของ Google - นี่อาจเป็นคำตอบที่ถูกต้องที่สุด:

สิ่งนี้จะไม่ถูกต้องเนื่องจากความละเอียดของแผนที่ที่มีการฉาย Mercator (เช่น Google maps) ขึ้นอยู่กับละติจูด

เป็นไปได้ที่จะคำนวณโดยใช้สูตรนี้:

metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)

สิ่งนี้ขึ้นอยู่กับสมมติฐานว่ารัศมีของโลกคือ 6378137m ค่าใดที่เราใช้ :)

นำมาจาก: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

BTW - ฉันคาดเดาว่า:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()

สูตรของคุณเท่ากับอะไร? ทำเพื่อ lat = 2.92 แล้วซูม 13 ฉันได้ 19.08 19.08 อะไรคืออะไร
Rodrigo

4
@Rodrigo เมตรต่อพิกเซล
Justin Poehnelt

3
ฉันเป็นพยานได้ว่าคำตอบนี้ยังคงถูกต้องและแม่นยำมากในสามปีต่อมา นี่ควรเป็นคำตอบที่ยอมรับได้
จอห์น

นี้ไม่ได้นำไปใช้กับxเพียงอย่างเดียวหรือยังY ? Google Maps ผ่าน Javascript API ใช้ขนาดเท่ากันทั้งสองแกนหรือไม่
แก่เก่า

@OldGeezer ใช่มันใช้ได้ในทุกทิศทาง การบิดเบือนเชิงเส้น ณ จุดใด ๆ ใน Mercator นั้นเท่ากันทุกทิศทาง นั่นเป็นหนึ่งในเหตุผลที่มันถูกใช้สำหรับแผนที่ที่ลื่น เมื่อคุณซูมเข้าคุณจะได้รับแผนที่เพี้ยนต่ำอย่างสมเหตุสมผล เมื่อคุณชดเชยสเกลซึ่งเป็นคำตอบนี้
smithkm

30

เพื่อช่วยให้คุณเข้าใจคณิตศาสตร์ (ไม่ใช่การคำนวณที่แม่นยำเป็นเพียงภาพประกอบ):

  • ไทล์แผนที่เว็บของ Google มีความกว้าง 256 พิกเซล
  • สมมติว่าจอภาพคอมพิวเตอร์ของคุณมี 100 พิกเซลต่อนิ้ว (PPI) นั่นหมายถึง 256 พิกเซลมีความยาวประมาณ 6.5 ซม. และที่0.065 เมตร

  • ในระดับการซูม 0 , ทั้ง 360 องศาของเส้นแวงที่มองเห็นได้ในกระเบื้องเดียว คุณไม่สามารถสังเกตสิ่งนี้ใน Google Maps ได้เนื่องจากมันจะเลื่อนไปที่ระดับการซูม 1 โดยอัตโนมัติ แต่คุณสามารถเห็นมันบนแผนที่ของ OpenStreetMap (มันใช้รูปแบบการเรียงต่อกันแบบเดียวกัน)

  • 360 degress บนเส้นศูนย์สูตรเท่ากับรอบโลก 40,075.16 กม. ซึ่งคือ40075160 ม

  • หาร40075160 mด้วย0.065 mและคุณจะได้616313361ซึ่งเป็นระดับซูม 0 บน Equator สำหรับจอคอมพิวเตอร์ที่มี 100 DPI

  • ดังนั้นประเด็นก็คือสเกลขึ้นอยู่กับ PPI ของจอภาพและละติจูด (เพราะการฉายภาพของ Mercator)
  • สำหรับระดับการซูม 1 สเกลจะเท่ากับครึ่งหนึ่งของระดับการซูม 0
  • ...
  • สำหรับระดับการซูม N ระดับจะเท่ากับครึ่งหนึ่งของระดับการซูม N-1

ลองดูที่: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F


3
มาตราส่วนนั้นขึ้นอยู่กับ DPI ของภาพแผนที่ที่สร้างขึ้น ความละเอียดที่ใช้กันมากที่สุดสองข้อคือ 96DPI (นั่นคือภาพแผนที่ของ Google) และ 72DPI
Sasa Ivetic

ด้วย 96DPI สเกล591657550.500000คือระดับ 0 ตามคำตอบนี้ แต่ตาม @CaptDragon คือระดับ 1 ฉันควรพิจารณาเริ่มต้นจากระดับ 1 เพื่อคำนวณด้วย Google Maps?
Douglas Nassif Roma Junior

17

ไม่ใช่เรื่องง่าย ขนาดของไทล์พิกเซลจะขึ้นอยู่กับละติจูดของพื้นที่ที่คุณสนใจจากนั้นในแง่ของการเปลี่ยนขนาดพิกเซลของไทล์ในขนาดพิกเซลของหน้าจอมันขึ้นอยู่กับหน้าจอและความละเอียดของข้อมูลที่จะแสดง dpi หน้าจอของคุณกำลังใช้งาน


2
นั่นถูกต้อง Mercator ทรงกลม (Google Projector) ไม่ได้รักษาระดับเท่ากันเมื่อคุณย้ายออกจากเส้นศูนย์สูตร สำหรับการอ้างอิงที่ยอดเยี่ยม: บทความมาตราส่วนและมาตราส่วนของ Mapnik: trac.mapnik.org/wiki/ScaleAndPpiและคำถามที่พบบ่อยของ OSM: wiki.openstreetmap.org/wiki/ ......
จัดการ

12

คำตอบที่ถูกต้องตรงไปตรงมามีสิทธิ์:

591657550.500000 / 2^(level-1)

มันให้ตารางด้านบนเข้าสู่ระดับการซูม

ลองใช้งานได้ที่jsfiddle.net

เนื่องจากคำถามนี้ใช้สำหรับ Google MAPS เท่านั้นไม่ใช่ EARTH OP ไม่สนใจเรขาคณิต 3 มิติ แผนที่ Google แบนแล้วดังนั้น 1 พิกเซลมักจะมีระยะห่างเท่ากันเสมอ (ใน DEGREES ซึ่งเป็นสิ่งที่เกี่ยวข้องกับแผนที่ของ Google) ที่นี่และในเอกวาดอร์เช่นเดียวกับในเสา

คุณรู้หรือไม่ว่าที่ไหนสักแห่งในแถวพิกเซลแรกของแผนที่โลกมาตราส่วนคือ 1: 1


5
หมายเลข 591657550.500000 หมายถึงอะไร
Justin Dearing

2
@Sergio ทำไมไม่เพียง 591657550.5
Birowsky

2
"หมายเลขนั้นมาจากความละเอียดไทล์ที่ตั้งค่าไว้ที่ 256 พิกเซลและจากความละเอียดหน้าจอ (96dpi)" gis.stackexchange.com/a/111589/92997
juffel

ใช้งานไม่ได้ - ขึ้นอยู่กับ Latitude แต่สูตรของคุณไม่ได้
Evgenii Vorobei

9

เช่นมีตารางในเป็นเอกสารของระบบกระเบื้อง Virtal โลกจากไมโครซอฟท์ แต่ตามที่กล่าวไว้โดย GuillaumeC ค่าขึ้นอยู่กับละติจูดและความละเอียดหน้าจอ ตารางแสดงค่าที่วัดได้ที่ Equator และที่ความละเอียดหน้าจอ 96 dpi

PS: ไม่แน่ใจ แต่ระดับการซูมโดย Microsoft อาจเลื่อนไป 1 เมื่อเปรียบเทียบกับระดับการซูมโดย Google แต่พวกเขาใช้การประมาณการเดียวกันเพื่อให้ค่ายังคงถูกต้องสำหรับ Google


7

Radius @ Equator 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 ฉันเคยเห็นใน Wikipedia มาแล้วไม่กี่แห่งและไม่ถูกต้องค่าที่ถูกต้องคือ 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 เมตร นั่นคือความยาวและความสูงของหนึ่งพิกเซลจากภาพที่ละติจูด 45 ที่ระดับการซูม 20 หากหน้าจอของคุณจับภาพขนาด 1,000x1000 พิกเซลของพื้นที่นั้นมิติคือ 105.56 ตารางเมตร ถ้าคุณต้องการหารหารด้วย 0.3048

ในส่วนของแหล่งข้อมูลฉันได้วิศวกรย้อนกลับเมื่อประมาณ 5 ปีก่อนจากข้อมูลและเอกสารต่างๆที่ฉันพบบนเว็บรวมถึงเว็บไซต์สนับสนุนการทำแผนที่ของ Google และ MS

ฉันใช้เวลานับร้อยและวางซ้อนกับข้อมูลการสำรวจภาคสนามจริงและถูกต้องเสมอ ตรวจสอบกับตารางที่โพสต์ที่นี่และตัวเลขจะตรงกัน


2
ฉันไม่แน่ใจว่าวิธีนี้ตอบคำถาม
Devdatta Tengshe

ฉันเห็นด้วยกับ @Devdatta คุณช่วยได้โปรดระบุแหล่งที่มาและบริบทบางอย่าง
อาโรน

ไม่แน่ใจว่าความคิดเห็นเหล่านี้เป็นก่อนหรือหลังการแก้ไข แต่ฉันใช้คำตอบนี้และมันใช้งานได้ดี
bjnortier

4

เพิ่งทำการคำนวณและได้ผลลัพธ์ดังนี้

Google Maps แสดงไม้บรรทัด 1 กม. (ด้านล่างซ้ายของแผนที่) ซึ่งมีความยาว 90 พิกเซลที่ระดับการซูม 13 ซึ่งหมายถึงสิ่งต่อไปนี้:

สมมติว่าความละเอียดหน้าจอคือ 96 dpi หรือ 36 dpcm ที่ระดับการซูม 13 เรามี 0.4km (จาก 36/90) ใน 1 ซม. ซึ่งให้มาตราส่วนแผนที่ 1: 40,000 สำหรับหน้าจอ 96dpi

สำหรับการใช้งานบนหน้าจอที่หลากหลายวิธีที่ดีที่สุดคือใช้ 90px เป็นพื้นฐานเนื่องจากตัวเลขทั้งหมดจะถูกปัดเศษในทุกระดับการซูมเช่น

  • ระดับการซูม 12: 2km ใน 90px
  • ระดับการซูม 11: 4km ใน 90px
  • ระดับการซูม 10: 8km ใน 90px

และอื่น ๆ

โปรดทราบว่านี่คือการประมาณที่ควรจะทำงานได้ดีขึ้นหรือน้อยลงในเครื่องชั่งขนาดเล็กมากกว่าเครื่องที่มีขนาดใหญ่

(และ Google ชอบตัวเลขรอบในที่สุด ... )


1
หากคุณมองอย่างใกล้ชิดคุณจะพบว่าความยาวของเส้นเปลี่ยนไปขึ้นอยู่กับละติจูดของพื้นที่ที่คุณกำลังดู
rcoup

1
สิ่งนี้ใช้ได้ที่ละติจูดที่ระบุเท่านั้นตามที่ @rcoup กล่าวถึง ไม่เพียง แต่ความยาวของสเกลบาร์เท่านั้นจะแตกต่างกันไป เพื่อดำเนินการต่อตัวอย่างนี้เมื่อซูม 13 ระยะทางที่แสดงโดยมาตราส่วนของแถบคือ 2 กม. ใน North Cape (ละติจูด 71 °), 1 กม. รอบละติจูด 45 °และ 500 เมตรที่ equateur
François

3

จากข้อมูลทั้งหมดที่มีให้ฉันได้สร้างฟังก์ชั่นที่ให้ 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);
}

3

ฉันยังไม่สามารถเพิ่มความคิดเห็นได้ แต่นี่อาจเป็นแหล่งที่มาของคำตอบของ Pete ด้านบน: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[... ] โปรดทราบว่าระดับการซูมที่เพิ่มขึ้นแต่ละครั้งจะมีขนาดใหญ่เป็นสองเท่าในทิศทาง x และ y ดังนั้นระดับการซูมที่สูงขึ้นแต่ละครั้งจะมีความละเอียดมากกว่าระดับก่อนหน้าถึงสี่เท่า ตัวอย่างเช่นที่ระดับการซูม 1 แผนที่จะประกอบด้วยไทล์ 4 256x256 พิกเซลทำให้เกิดพื้นที่พิกเซลจาก 512x512 ที่ระดับการซูม 19 แต่ละค่า x และ y พิกเซลบนแผนที่สามารถอ้างอิงได้โดยใช้ค่าระหว่าง 0 ถึง 256 * 2 19


1

ฉันคำนวณเครื่องชั่งสำหรับสี่ระดับการซูม:

ระดับการซูม มาตราส่วน 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

ดูเหมือนว่าสเกลจะเพิ่มเป็นสองเท่าเมื่อระดับการซูมเพิ่มขึ้นหนึ่งขั้น ดังนั้นฉันหวังว่าสเกลสำหรับระดับการซูม 16 จะเป็น 1: 8000 และต่อไป


3
ยินดีต้อนรับสู่ GIS.SE! คุณช่วยระบุแหล่งที่มาหรือคำนวณได้อย่างไร?
พอล

0

สวัสดีฉันคิดว่าฉันได้คำนวณว่า 1pixel = 11.627km เป็นเส้นตรง ไม่คำนึงถึงรัศมีของโลก นี่คือการเชื่อมโยงของวิดีโอที่อธิบายวิธี: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be หวังว่าจะล้างใจของคุณ


มันไม่ใช่. ค่าของพิกเซลขึ้นอยู่กับละติจูด
John Powell

โอ้ฉันเข้าใจแล้วไม่ใช่เรื่องซับซ้อนที่ฉันเข้าไป
Mr. Totardo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.