回答:
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
ところで-私はそれを推測しています:
'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
数学を理解しやすくするために(正確な計算ではなく、単に説明のためです):
コンピューターのモニターに100ピクセル/インチ(PPI)があるとします。つまり、256ピクセルの長さは約6.5 cmです。そして、それはだ0.065メートル。
上のズームレベル0、経度の全360度が表示されている単一のタイルに。Googleマップではズームレベル1に自動的に移動するため、これを観察することはできませんが、OpenStreetMapのマップで見ることができます(同じタイルスキーマを使用します)。
赤道上での360度の低下は、地球の円周40,075.16 km(40075160 m)に等しい
除算40075160メートルと0.065メートル、あなたが買ってあげる616313361ズームレベル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によると、値は緯度と画面解像度に依存します。この表には、Equatorおよび96 dpiの画面解像度で測定された値が示されています。
PS:確かではありませんが、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(赤道の単位)
ズームレベルは、増分ごとに2倍になります。
1フィート(国際)= 0.3048メートル
編集
そもそも正当な質問ではありません。縮尺比は、コンピューター画面ではなく、印刷された文書に対するものです。これらの画像を正確に使用するために必要なのは、各ピクセルの寸法を把握し、オーバーレイの種類に応じて画像を拡大縮小することです。
そのため、15〜20年前に誰かがWGS-84を基本データとして使用していました。(以前の投稿で誰かが40,075,160の値を使用したことに注意してください。ウィキペディアでこれをいくつかの場所で見ましたが、それは間違っています。正しい値は40,075,017です
次に、それらを取得し、完全な32ビット整数で除算しました。これは、航空写真に十分な約1センチメートルのグローバルな精度が得られるため、論理的な選択です。32ビット整数も保存および処理に効率的です。
レベル24が選ばれた理由はわかりませんが、ここで他の誰かがうまくいったので、0で地球用の256ピクセルタイルが1つになります。
次に、上記のデータの使用方法の例について説明します。ズームレベル20の画像があるとしましょう(現在のようにズームされています)0.009330692(赤道でズーム24)をズーム23に2倍、ズーム22にもう一度、ズーム21に、ズーム20に最後の1回これで、0.149231071になります。
ここで、画像が緯度45にあるとしましょう。そのコサイン(0.707106781)を0.149231071で乗算すると、0.105564729メートルが得られます。これは、ズームレベル20で緯度45の画像からの1ピクセルの長さと高さです。その領域の1000 x 1000ピクセルの画像をスクリーンキャプチャすると、寸法は105.56メートル四方になります。0.3048を足で分割したい場合
情報源に関しては、約5年前、GoogleやMSのマッピングサポートサイトなど、Webで見つけたさまざまな情報やドキュメントから本質的なリバースエンジニアを行いました。
私はこれを何百回も使用し、実際の現地調査データに重ねており、常に正しいものでした。ここに掲載されている表のいずれかと照合してください。番号が一致します。
いくつかの計算を行ったところ、次の結果が得られました。
Googleマップでは、ズームレベル13で長さが90ピクセルの1kmのルーラー(マップの左下)が表示されます。これは次のことを意味します。
画面の解像度が96 dpiまたは36 dpcmであると仮定すると、ズームレベル13では1 cmで0.4 km(36/90から)になり、96 dpiの画面のマップスケールは1:40,000になります。
画面上のさまざまな操作では、すべての数値がすべてのズームレベルで丸められるため、90pxを基準にすることが最善です。
等々。
これは近似値であり、大きなスケールではなく小さなスケールでほぼ正常に機能することに注意してください。
(そして、Googleは最後にラウンド番号が好きです...)
提供されたすべての情報に基づいて、表示されたマップの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);
}
私はまだコメントを追加できませんが、これは上記のピートの返信の可能性のあるソースです:https : //developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[...]拡大するズームレベルはそれぞれ、x方向とy方向の両方で2倍大きいことに注意してください。したがって、各ズームレベルには、前のレベルの4倍の解像度が含まれます。たとえば、ズームレベル1では、マップは4つの256x256ピクセルタイルで構成され、512x512のピクセルスペースになります。ズームレベル19では、マップ上の各xピクセルとyピクセルは、0〜256 * 2 19の値を使用して参照できます。
こんにちは、私は直線で1pixel = 11.627kmと計算したと思います。地球の半径を考慮しない。ここで説明したビデオのリンク方法:https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be。それがあなたの心をクリアすることを願っています。
Zoom level set meters: ${meters}
); var zoomfactor = 1; if(meters <1128){zoomfactor = 15; } else if((meters> 1128)&&(meters <2256)){zoomfactor = 14; } else if((meters> 2256)&&(meters <4513)){zoomfactor = 13; } else if((meters> 4513)&&(meters <9027)){zoomfactor = 12; } else if((meters> 9027)&&(meters <18055)){zoomfactor = 11; } else if((meters> 18055)&&(meters <36111)){zoomfactor = 10; } else if((meters> 36111)&&(meters <72