Câu trả lời:
Nếu bạn đang thiết kế bản đồ mà bạn dự định phủ lên bản đồ google hoặc trái đất ảo và tạo sơ đồ ốp lát thì tôi nghĩ những gì bạn đang tìm kiếm là tỷ lệ cho mỗi mức thu phóng, hãy sử dụng những điều sau:
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
Nguồn: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htmlm
Tôi đã tìm thấy phản hồi này - được viết bởi một nhân viên Google - đây có thể là câu trả lời chính xác nhất:
Điều này sẽ không chính xác, bởi vì độ phân giải của bản đồ với phép chiếu Mercator (như bản đồ Google) phụ thuộc vào vĩ độ.
Có thể tính toán bằng công thức này:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
Điều này dựa trên giả định rằng bán kính trái đất là 6378137m. Đó là giá trị chúng tôi sử dụng :)
lấy từ: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
BTW - Tôi đoán rằng:
'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
Để giúp bạn hiểu các phép toán (không phải là một phép tính chính xác, nó chỉ mang tính minh họa):
giả sử màn hình máy tính của bạn có 100 pixel mỗi inch (PPI). Điều đó có nghĩa là 256 pixel có chiều dài khoảng 6,5 cm. Và đó là 0,065 m .
ở mức thu phóng 0 , toàn bộ kinh độ 360 độ có thể nhìn thấy trong một ô duy nhất . Bạn không thể quan sát điều này trong Google Maps vì nó tự động chuyển sang mức thu phóng 1, nhưng bạn có thể thấy nó trên bản đồ của OpenStreetMap (nó sử dụng cùng một sơ đồ ốp lát).
Suy thoái 360 trên đường xích đạo bằng với chu vi của Trái đất, 40.075,16 km, là 40075160 m
chia 40075160 m với 0,065 m và bạn sẽ nhận được 616313361 , đây là thang đo mức thu phóng 0 trên Xích đạo cho màn hình máy tính có 100 DPI
Ngoài ra hãy xem: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
591657550.500000
là Mức 0 theo câu trả lời này. Nhưng theo @CaptDragon là Cấp 1. Tôi nên xem xét bắt đầu từ cấp 1 để tính toán với Google Maps?
Không dễ. Với phép chiếu, kích thước của pixel pixel phụ thuộc vào vĩ độ của khu vực bạn quan tâm. Sau đó, về mặt chuyển đổi kích thước pixel của gạch theo kích thước pixel màn hình, nó phụ thuộc vào màn hình và độ phân giải của dữ liệu được hiển thị, dpi màn hình của bạn đang sử dụng.
Câu trả lời đúng có thẩm quyền:
591657550.500000 / 2^(level-1)
nó cung cấp cho bạn bảng ở trên, nhập mức thu phóng.
Dùng thử trực tiếp trên jsfiddle.net
Vì câu hỏi chỉ dành cho Google MAPS, không phải EARTH, OP không quan tâm đến hình học 3D. Các bản đồ của Google luôn được làm phẳng để 1 pixel luôn có cùng khoảng cách (trong DEGREES, đó là điều cần quan tâm đối với bản đồ google), ở đây và trong bộ sinh thái như ở các cực.
Nhân tiện, bạn có nhận ra rằng ở đâu đó bên trong hàng pixel đầu tiên trên bản đồ thế giới, tỷ lệ là 1: 1 không?
Có một bảng như vậy trong tài liệu của Hệ thống Ngói Trái đất Virtal từ Microsoft . Nhưng như GuillaumeC đã nói, các giá trị phụ thuộc vào vĩ độ và độ phân giải màn hình. Bảng đưa ra các giá trị như được đo tại Xích đạo và ở độ phân giải màn hình 96 dpi.
PS: Không chắc về điều đó, nhưng các mức thu phóng của Microsoft có thể bị thay đổi 1 so với các mức thu phóng của Google. Nhưng họ chắc chắn sử dụng cùng một phép chiếu để các giá trị vẫn đúng cho Google.
Bán kính @ Xích đạo chính xác 6.378.137 mét (WGS-84)
Chu vi tại Xích đạo = 40.075.017 mét (2πr)
Thu phóng cấp 24 sử dụng 2 đến 32 pixel (4.294.967.296) pixel theo chu vi.
Chu vi xích đạo / 2 32 = .009330692 mét trên mỗi pixel
Đơn vị tại Latitude = (Cosine of Latitude) X (Đơn vị tại Xích đạo)
Mức thu phóng tăng gấp đôi mỗi lần tăng.
1 feet (Quốc tế) = 0,3048 mét
Biên tập
Vâng, nó không thực sự là một câu hỏi chính đáng để bắt đầu. Tỷ lệ tỷ lệ có liên quan đến tài liệu in không phải màn hình máy tính. Những gì bạn cần cho những hình ảnh này được sử dụng với bất kỳ độ chính xác nào là để biết kích thước của từng pixel sau đó chia tỷ lệ hình ảnh theo bất cứ thứ gì bạn phủ lên nó.
Vì vậy, trở lại 15-20 năm trước, ai đó đã lấy WGS-84 làm dữ liệu cơ sở. (lưu ý trong bài viết trước, ai đó đã sử dụng giá trị 40.075.160 Tôi đã thấy điều này trên Wikipedia một vài nơi và nó không chính xác. Giá trị đúng là 40.075.017
Sau đó, họ lấy nó và chia cho số nguyên 32 bit đầy đủ. Đây là một lựa chọn hợp lý vì nó mang lại độ chính xác toàn cầu đến khoảng một centimet, rất nhiều cho hình ảnh trên không. Số nguyên 32 bit cũng hiệu quả để lưu trữ và xử lý.
Tại sao đây là cấp 24 được chọn Tôi không biết tuy nhiên vì một người khác ở đây đã làm việc 0 đưa bạn xuống một ô 256 pixel cho trái đất.
Bây giờ cho một ví dụ về cách sử dụng dữ liệu trên. Hãy nói rằng tôi có một hình ảnh ở mức thu phóng 20 (như thu phóng như hiện tại cho phép bạn nhận được) Lấy 0,009330692 (Thu phóng 24 ở xích đạo) nhân đôi nó cho thu phóng 23, một lần nữa cho thu phóng 22, một lần nữa cho thu phóng 21 và một lần cuối cho thu phóng 20 Bây giờ bạn sẽ có 0.149231071.
Bây giờ hãy nói rằng hình ảnh của chúng tôi ở vĩ độ 45. Lấy Cosine của điều đó (0,707106781) và nhân nó với 0,149231071 của chúng tôi và nó sẽ cung cấp cho bạn 0,105564729 mét. Đó là chiều dài và chiều cao của một pixel từ một hình ảnh ở vĩ độ 45 ở mức thu phóng 20. Nếu màn hình của bạn chụp một hình ảnh 1000 x 1000 pixel của khu vực đó thì kích thước là 105,56 mét vuông. Nếu bạn muốn chia đôi chân đó 0,3048
Đối với các nguồn, tôi đã đảo ngược kỹ sư khoảng 5 năm trước từ nhiều thông tin và tài liệu khác nhau mà tôi tìm thấy trên web bao gồm các trang web hỗ trợ lập bản đồ của Google và MS.
Tôi đã sử dụng hàng trăm thời gian này và phủ nó với dữ liệu khảo sát thực tế và nó luôn luôn chính xác. Kiểm tra nó với bất kỳ bảng nào được đăng ở đây và các con số sẽ khớp.
Chỉ cần thực hiện một số tính toán và nhận được kết quả sau đây:
Google Maps hiển thị thước kẻ 1km (phía dưới bên trái của bản đồ) có chiều dài 90 pixel, ở mức thu phóng 13. Có nghĩa là như sau:
Giả sử độ phân giải màn hình là 96 dpi hoặc 36 dpcm, ở mức thu phóng 13, chúng ta có 0,4km (từ 36/90) trong 1cm, mang lại tỷ lệ bản đồ 1: 40.000 cho màn hình 96dpi.
Đối với các hoạt động khác nhau trên màn hình, tốt nhất là lấy 90px làm cơ sở, vì tất cả các số sẽ được làm tròn ở tất cả các mức thu phóng, tức là
vân vân
Lưu ý rằng đây là một xấp xỉ nên hoạt động tốt hơn hoặc ít hơn trên quy mô nhỏ hơn là quy mô lớn.
(Và Google thích số tròn cuối ...)
Dựa trên tất cả các thông tin được cung cấp, tôi đã xây dựng một hàm cung cấp z tốt nhất được áp dụng cho bản đồ khi bạn muốn có một đường ngang đại diện cho N% của Bản đồ được hiển thị.
Bản đồ được hiển thị được đặc trưng bởi chiều rộng pixel của chính 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);
}
Tôi chưa thể thêm nhận xét nhưng đây là nguồn trả lời có thể có của Pete ở trên: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordins
[...] Lưu ý rằng mỗi mức thu phóng tăng dần lớn gấp đôi theo cả hai hướng x và y. Do đó, mỗi mức thu phóng cao hơn chứa độ phân giải gấp bốn lần so với mức trước đó. Ví dụ: ở mức thu phóng 1, bản đồ bao gồm 4 ô 256x256 pixel, dẫn đến không gian pixel từ 512x512. Ở mức thu phóng 19, mỗi pixel x và y trên bản đồ có thể được tham chiếu bằng cách sử dụng giá trị trong khoảng từ 0 đến 256 * 2 19
Tôi đã tính tỷ lệ cho bốn mức thu phóng:
Mức thu phóng | Tỷ lệ 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000
Có vẻ như tỷ lệ được nhân đôi khi mức thu phóng tăng thêm một bước. Vì vậy, tôi hy vọng tỷ lệ cho mức thu phóng 16 sẽ là 1: 8000, v.v.
Xin chào Tôi nghĩ rằng tôi đã tính được rằng 1pixel = 11,627km theo đường thẳng; không tính đến bán kính trái đất. Đây là liên kết của video giải thích cách thức: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Hy vọng rằng rõ ràng tâm trí của bạn.
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (mét <1128) {zoomfactor = 15; } if if ((mét> 1128) && (mét <2256)) {zoomfactor = 14; } if if ((mét> 2256) && (mét <4513)) {zoomfactor = 13; } if if ((mét> 4513) && (mét <9027)) {zoomfactor = 12; } khác if ((mét> 9027) && (mét <18055)) {zoomfactor = 11; } if if ((mét> 18055) && (mét <36111)) {zoomfactor = 10; } khác nếu ((mét> 36111) && (mét <72