使用 Google Maps API (v3),我为虚构的游戏世界创建了自定义地图类型。默认情况下,地图,甚至自定义地图类型,水平重复(见下图)。
是否可以防止地图水平重复?对于我的地图,它并不代表行星或球形世界,因此让它永远水平重复根本没有意义。我已经想出了如何简单地不为左右重复的地图加载图块,如下所示:
但是,当您创建标记时,标记仍会显示在所有重复的地图中:
是否可以防止标记重复?或者有没有可能让地图完全不重复?这样我就不必处理重复的标记?
变通方法:将平移限制在地图边界之外 我已经阅读了各种变通方法,这些变通方法仅讨论了限制用户可以向左或向右平移的距离。这对我不起作用,因为我必须允许用户一直放大并立即查看整个地图。如果它们一直放大,重复的标记仍然可见,这是不可接受的。
是否可以在地图上添加一堆填充?这样地图之间就有很大的空间:
如果我能够添加足够的填充,那么限制平移将对我有用,因为任何重复的标记都可能被填充推得足够远,以至于用户永远看不到它们。
最后是我的代码,非常简单:
(注意:我使用的地图瓦片图像尚未在线提供)
<!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>