【发布时间】:2023-03-29 11:35:01
【问题描述】:
借助 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>
【问题讨论】:
-
@RASG 仅解决了平移限制。地图两侧仍需要填充。
-
抱歉,本来打算把它当作一个骗子来关闭,但后来意识到事实并非如此。随时重新申请赏金。
标签: javascript google-maps google-maps-api-3