ズーム レベルの代わりに、より高いレベルで作業し、画像のタイル1-3
以外のオリジンを選択する必要があります。(0,0)
必要なのは単純な数学だけです。デフォルトでは、マップはLatLng(0,0)
ポイントを中心に配置されるため( で述べたようにMapOptions
)、計算はそのポイントを中心に実行されます。
仮説
どのズームでも、完全に2^zoom x 2^zoom
タイルがあります。
zoom
_______________________ 2
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
zoom
2
中央の GPS ポイントと同様LatLng(0,0)
に、そのポイントを含むタイルは の中央タイルである必要がありますtile-sheet
。
zoom
_______________________ 2
| |
| |
| | zoom
| | 2 zoom-1
| o----------|-------* ------ = 2
| |_| | 2
| | |
| | |
| | |
|__________|__________|
zoom |
2 | zoom-1
* 2
したがって、どのzoom
レベルでも、中央のタイルには(2^(zoom-1), 2^(zoom-1))
座標があります。そのタイルはorigin
マッピングの になります。現在のタイルの座標から原点の座標を差し引くことで、ズーム レベルでcoordinate-space
作業していたときと原点がタイルだったときのようになります。1-3
(0,0)
実装
まず、より高いズーム レベルを選択します。次に例を示します。
var MIN_ZOOM = 11,
MAX_ZOOM = 13;
マッピングは関数ごとに行われgetNormalizedCoord
ます:
function getNormalizedCoord(coord, zoom) {
//Amount of total tiles:
// MIN_ZOOM -> 1 tile
// MIN_ZOOM+1 -> 2 tiles
// MIN_ZOOM+2 -> 4 tiles
var totalTiles = 1 << (zoom - MIN_ZOOM),
y = coord.y,
x = coord.x;
var originx = 1 << (zoom-1),
originy = 1 << (zoom-1);
if(y < originx || y >= originx + totalTiles ||
x < originx || x >= originx + totalTiles){
return null;
}
x -= originx;
y -= originy;
return { x:x, y:y };
}
そして最後に、次のようにするImageMapOptions
必要があります。
var siteMapOptions = {
getTileUrl: function (coord, zoom) {
var normalizedCoord = getNormalizedCoord(coord, zoom);
if (normalizedCoord) {
return 'https://edocstorage.blob.core.windows.net/siteimages/2fa9fc72-23a7-41ed-86a1-b83a3ba04790/_siteTiles/tile_' +
(zoom-MIN_ZOOM) + '_' +
normalizedCoord.x + '-' +
normalizedCoord.y + '.png';
} else {
return 'content/tilecutter/empty.jpg';
}
},
tileSize: new google.maps.Size(256, 256),
maxZoom: MAX_ZOOM,
minZoom: MIN_ZOOM,
radius: 1738000,
name: "Site Plan"
};