- 我可以放置在“区域”边缘的
google.maps.Marker
。 google.maps.Polygon
代码生成的工件。它是预期的红色,但完全不合适且奇怪地平坦。
var regionData = tecMap.regions[r];
var regionMapMarkers = new google.maps.MVCArray();
for (c in regionData.coords) {
var point = projection.worldToMap(regionData.coords[c]);
debugRegionPoints.push(point);
var thisLatLng = projection.fromPointToLatLng(point);
debugRegionLatLngs.push(thisLatLng);
regionMapMarkers.push(thisLatLng);
}
regionMapMarkers.forEach(function(latLng, m){
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: '',
optimized: false
});
regionCorners.push(marker);
});
var paths = new google.maps.MVCArray();
paths.push(regionMapMarkers);
var region = new google.maps.Polygon({
fillColor: "#FF0000",
fillOpacity: 0.35,
map: map,
paths: paths,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2
});
regionPolys.push(region);
如果你对数组的数组感到困惑,它与谷歌地图Javascript API相当。
如果你想查看地图和相关脚本,可以在此处找到它。代码片段位于Scripts/tectonicus.js
,从第659行开始。
[编辑] 一些调试信息:
这似乎是一个渲染问题,而不是“计算”问题。 从firebug控制台,在我链接的地图中,
regionPolys[0].getPath().getArray();
和
for (i in regionCorners) {console.log(regionCorners[i].getPosition())};
将返回
P { Na=0.20123958504464223, Oa=-22.5249097921875}
P { Na=-0.21702715474330336, Oa=-32.7277467}
P { Na=0.19466306397879407, Oa=-37.51230686484375}
P { Na=0.12889785332031245, Oa=-49.04594858671875}
如果我没错的话,这意味着它们具有相同的坐标,这与代码相符。
[编辑2] 新进展!
当处理自定义投影(例如用于显示等角Minecraft地图的Tectonicus生成的投影)时,向量似乎存在渲染问题。
在最后的评论之后,我在上面链接的实时代码中添加了两个新的调试数组debugRegionLatLngs
和debugRegionPoints
,上面的代码已经更新,这样您就可以看到它们包含的内容。
[编辑3] 投影和坐标
结合BicycleDude的研究和我的研究,现在几乎可以确定是自定义投影破坏了多边形。实际上,Google Maps API中可能存在相关错误。
使用此投影是因为Minecraft地图可以是虚拟无限的,并且必须使用gmap,在360°经度之后进行包装。另一个相关因素是游戏内坐标以等角方式呈现,而gmaps则期望更像是Mercator投影。
我试图微调投影,但目前没有出现有趣的结果。
path
,实际上应该是paths
。否则,如果能够看到实时代码,将会更有帮助。祝好,Andres - andresf