답변:
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)
이것은 지구의 반지름이 6378137m이라는 가정을 기반으로합니다. 우리가 사용하는 가치는 무엇입니까 :)
https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM 에서 가져옴
BTW-나는 추측하고 있습니다 :
'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
수학을 이해하는 데 도움이되도록 (정확한 계산이 아니라 단지 설명을위한 것임) :
컴퓨터 모니터의 인치당 픽셀 수가 100 픽셀이라고 가정 해 봅시다. 즉, 256 픽셀의 길이는 약 6.5cm입니다. 그리고 그것은 0.065 m 입니다.
에 줌 레벨 0 , 경도의 전체 360 개도를 볼 수 있습니다 하나의 타일 . 확대 / 축소 수준 1로 자동 이동하므로 Google지도에서는이를 확인할 수 없지만 OpenStreetMap의지도 에서는 볼 수 있습니다 (동일한 타일링 체계를 사용함).
적도의 360 도는 지구의 둘레 40,075.16km와 동일하며 40075160m입니다.
분할 4천7만5천1백60미터을 가진 0.065 m 당신은 얻을 것이다 616,313,361 줌 레벨 0의 규모이며, 100 DPI와 컴퓨터 모니터의 적도를
또한 확인하십시오 : http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
591657550.500000
이 답변에 따르면 96DPI를 사용하면 스케일 은 레벨 0입니다. 그러나 @CaptDragon에 따르면 레벨은 1입니다. Google지도로 계산하려면 레벨 1부터 시작해야합니까?
그렇게 쉬운 일이 아닙니다. 프로젝션이 주어지면 타일 픽셀의 크기는 관심 영역의 위도에 따라 달라집니다. 그런 다음 타일 픽셀 크기를 화면 픽셀 크기로 변환하는 데있어 화면과 데이터에 표시되는 해상도에 따라 달라집니다. 화면에서 사용중인 dpi
솔직한 정답 :
591657550.500000 / 2^(level-1)
위의 표를 제공하여 확대 / 축소 수준을 입력합니다.
jsfiddle.net에서 실시간으로 사용해보십시오
이 질문은 지구가 아닌 Google MAPS에만 해당되므로 OP는 3D 지오메트리는 신경 쓰지 않습니다. Google지도는 이미 평평하므로 1 픽셀은 여기와 극에서와 같은에 큐레이터에서 항상 같은 거리 (Google지도와 관련이있는 DEGREES)입니다.
그건 그렇고, 세계지도의 첫 번째 픽셀 행 내부의 배율이 1 : 1이라는 것을 알고 있습니까?
Microsoft의 Virtal Earth Tile System 문서 에는 이러한 표가 있습니다. 그러나 GuillaumeC에 따르면 값은 위도와 화면 해상도에 따라 다릅니다. 이 표는 적도 및 96dpi의 화면 해상도에서 측정 한 값을 나타냅니다.
추신 : 확실하지는 않지만 Microsoft의 확대 / 축소 수준은 Google의 확대 / 축소 수준과 비교하여 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의 값을 사용했습니다. 나는 Wikipedia에서 이것을 보았으며 잘못되었습니다. 정확한 값은 40,075,017입니다.
그런 다음 그것을 가져 와서 32 비트 정수로 나눕니다. 이것은 항공 이미지를 위해 충분한 약 1 센티미터까지 전체 정확도를 제공하기 때문에 논리적 선택입니다. 32 비트 정수는 저장 및 처리에도 효율적입니다.
이것이 레벨 24가 선택된 이유는 모르겠습니다. 그러나 다른 누군가가 운동을 했으므로 0은 지구의 256 픽셀 타일 하나까지 당신을 가져옵니다.
위의 데이터를 사용하는 방법에 대한 예를 들어 보겠습니다. 확대 / 축소 수준 20의 이미지를 가지고 있다고 가정 해 봅시다 (현재 얻을 수있게 확대 된 것처럼) 0.009330692 (적도에서 확대 24) : 줌 23, 확대 22, 다시 줌 21, 마지막으로 줌 20 이제 0.149231071이 있어야합니다.
이제 이미지가 위도 45에 있다고합시다. 코사인 (0.707106781)에 0.149231071을 곱하면 0.105564729 미터가됩니다. 확대 / 축소 수준 20에서 위도 45의 이미지에서 1 픽셀의 길이와 높이입니다. 해당 영역의 1000 x 1000 픽셀 이미지를 화면 캡처하면 치수는 105.56 미터입니다. 발을 0.3048로 나누려면
출처에 관해서는 약 5 년 전에 Google 및 MS 매핑 지원 사이트를 포함하여 웹에서 찾은 다양한 정보 및 문서에서 엔지니어를 역전 시켰습니다.
이 백 번을 사용하여 실제로 현장 조사 데이터로 오버레이했으며 항상 정확했습니다. 여기에 게시 된 표와 비교하여 확인하면 숫자가 일치합니다.
일부 계산을 수행하고 다음 결과를 얻었습니다.
Google지도는 확대 / 축소 수준 13에서 길이가 90 픽셀 인 1km 눈금자 (지도 왼쪽 하단)를 표시합니다. 이는 다음을 의미합니다.
화면 해상도가 96dpi 또는 36dpcm이라고 가정하면 확대 / 축소 수준 13에서 1cm에 0.4km (36/90에서)가 있으며 96dpi 화면에 대해 1 : 40,000의 맵 스케일을 생성합니다.
화면의 다양한 작업에서 모든 숫자는 모든 확대 / 축소 수준에서 둥글게되므로 90px를 기준으로하는 것이 가장 좋습니다.
등등.
이것은 근사치보다 작은 규모에서 다소 잘 작동하는 근사치입니다.
(그리고 구글은 결국 둥근 숫자를 좋아합니다 ...)
제공된 모든 정보를 기반으로 표시된지도의 N %를 나타내는 수평선을 원할 때지도에 가장 적합한 z를 제공하는 기능을 만들었습니다.
표시되는지도는 자체 픽셀 너비를 특징으로합니다.
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);
}
댓글을 아직 추가 할 수는 없지만 위의 Pete 회신 출처는 https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates입니다.
[...] 참고로 증가하는 각 확대 / 축소 수준은 x 및 y 방향에서 두 배입니다. 따라서, 각각의 더 높은 줌 레벨은 이전 레벨보다 4 배 많은 해상도를 포함합니다. 예를 들어 확대 / 축소 수준 1에서지도는 4 개의 256x256 픽셀 타일로 구성되어 512x512의 픽셀 공간이됩니다. 확대 / 축소 수준 19에서 0과 256 * 2 19 사이의 값을 사용하여지도의 각 x 및 y 픽셀을 참조 할 수 있습니다.
안녕하세요, 1 픽셀 = 11.627km를 직선으로 계산했다고 생각합니다. 지구의 반지름을 고려하지 않았습니다. 여기에 설명 된 비디오의 링크 방법 : https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . 그것이 당신의 마음을 깨끗하게하기를 바랍니다.
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (미터 <1128) {zoomfactor = 15; } else if ((미터> 1128) && (미터 <2256)) {zoomfactor = 14; } else if ((미터> 2256) && (미터 <4513)) {zoomfactor = 13; } else if ((미터> 4513) && (미터 <9027)) {zoomfactor = 12; } else if ((미터> 9027) && (미터 <18055)) {zoomfactor = 11; } else if ((미터> 18055) && (미터 <36111)) {zoomfactor = 10; } else if ((meters> 36111) && (meters <72