使用 Google Maps API (v3),我为虚构的游戏世界创建了自定义地图类型。默认情况下,地图,甚至自定义地图类型,都会水平重复(见下图)。
Larger Image here https://i.stack.imgur.com/6cPuZ.jpg
是否可以防止地图水平重复?对于我的地图,它并不代表行星或球形世界,因此让它永远水平重复根本没有意义。我已经弄清楚如何简单地不加载左侧和右侧重复地图的图块,如下所示:
Larger Image here https://i.stack.imgur.com/GpSUJ.jpg
但是,当您创建标记时,标记仍然会显示所有重复的地图:
Larger Image here https://i.stack.imgur.com/WJmfB.jpg
是否可以防止标记重复?或者有没有可能让地图完全不重复?这样我就不必处理重复的标记了?
解决方法:限制平移超出地图范围我读过各种解决方法,讨论了简单地限制用户可以向左或向右平移的距离。这对我来说不起作用,因为我必须允许用户一直缩小并立即查看整个地图。如果它们完全缩小,重复的标记仍然可见,这是不可接受的。
是否可以在地图上添加一堆填充?这样地图之间就有很大的空间:
Larger Image here https://i.stack.imgur.com/9Zmi0.jpg
如果我能够添加足够的填充,那么限制平移将对我有用,因为任何重复的标记都可能被填充推得足够远,以至于用户永远不会看到它们。
最后我的代码,非常简单:
(注意:我正在使用的地图图块图像尚未在线提供)
<!DOCTYPE html>
<html style='height: 100%'>
<head>
<link rel="stylesheet" type="text/css" href="normalize.css" />
<style>
html, body { height: 100%;}
#map_canvas { height: 1000px;}
</style>
</head>
<body style='height: 100%'>
<div id="map_canvas"></div>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type='text/javascript'>
var options =
{
getTileUrl: function(coord, zoom)
{
// Don't load tiles for repeated maps
var tileRange = 1 << zoom;
if ( coord.y < 0 || coord.y >= tileRange || coord.x < 0 || coord.x >= tileRange )
return null;
// Load the tile for the requested coordinate
var file = 'images/zoom' + zoom + '/tile_' + zoom + '_' + (coord.x) + '_' + (coord.y) + '.jpg';
return file;
},
tileSize: new google.maps.Size(256, 256),
minZoom: 1,
maxZoom: 9,
radius: 1738000, // I got this from an example in the api, I have no idea what this does
name: 'Map',
};
var mapOptions =
{
center: new google.maps.LatLng(0,0),
zoom: 2,
backgroundColor: '#000',
streetViewControl: false,
mapTypeControl: false
};
var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
var mapType = new google.maps.ImageMapType(options);
map.mapTypes.set('map', mapType);
map.setMapTypeId('map');
var marker = new google.maps.Marker({
position: new google.maps.LatLng(0,0),
map: map,
title: "Test"
});
</script>
</body>
</html>