Blo*_*sie 9 javascript google-maps imagemap google-maps-api-3
请注意:
这个问题与我在stackoverflow上发现的问题非常相似.
Google Maps v3 ImageMapType防止环绕
但是,上面的问题和答案对我的示例/问题不起作用,因为我需要能够在任何缩放级别查看我的所有图像,更重要的是我需要绘图工具才能正常工作.
我的场景:
我有一个自定义谷歌地图使用ImageMapType,它也有DrawingManager图书馆和工具.
我的问题:
乍一看,所有工作都很顺利,但是如果您要绘制任何标记或多边形,然后平移地图,则标记/多边形会重复或在视图中的地图区域内移动.
在地图上绘制大多边形时会出现同样的问题,因为在绘制多边形时,您会注意到正在绘制的线将突然捕捉到多边形的错误边.
我的问题:
如何防止包装问题,以便所有标记不会移动或复制,以便绘图工具无需捕捉到多边形的另一面?
在线示例:
http://jsbin.com/ecujug/5/edit#javascript,live
问题视频:
https://dl.dropbox.com/u/14037764/Development/stackoverflow/map-drawing/issue.html
期望的效果:
Eng*_*eer 13
1-3您应该在更高级别工作,而不是缩放级别,并选择另一个原点而不是(0,0)图像的图块.您需要的只是简单的数学.默认情况下,您的地图将以LatLng(0,0)点为中心(如您所述MapOptions),计算将围绕该点进行.
在任何缩放,有完全2^zoom x 2^zoom瓦片:
zoom
_______________________ 2
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|
zoom
2
Run Code Online (Sandbox Code Playgroud)
由于LatLng(0,0)是中央GPS点,瓦片,其中包含该点,应该是中央瓦片tile-sheet:
zoom
_______________________ 2
| |
| |
| | zoom
| | 2 zoom-1
| o----------|-------* ------ = 2
| |_| | 2
| | |
| | |
| | |
|__________|__________|
zoom |
2 | zoom-1
* 2
Run Code Online (Sandbox Code Playgroud)
所以在任何zoom级别,中央区块都有(2^(zoom-1), 2^(zoom-1))坐标.那个图块将是origin映射的.通过从当前图块的坐标减去原点坐标,我们将有一个coordinate-space当我们在1-3缩放级别工作并且原点是(0,0)图块时.
首先,选择更高的缩放级别,例如:
var MIN_ZOOM = 11,
MAX_ZOOM = 13;
Run Code Online (Sandbox Code Playgroud)
映射将通过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 };
}
Run Code Online (Sandbox Code Playgroud)
最后,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"
};
Run Code Online (Sandbox Code Playgroud)