【发布时间】:2012-02-06 08:11:59
【问题描述】:
大约一周前,我遇到了一个问题:在自定义的 google 地图上,我的多边形不会显示,而相同坐标的标记完全可以。尽管我努力使用 Google Maps API,但似乎我找不到原因。
Here is a link to a screenshot of the map.紫色箭头和数字是我添加的,它们显示:
-
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);
如果您对数组数组感到好奇,这与Google Maps Javascript API 完全一样。
如果想看地图和相关脚本,可以find it here。
代码 sn-p 在Scripts/tectonicus.js 中,从第 659 行开始。
[编辑]一些调试信息:
这似乎是一个渲染问题,而不是“计算”问题。 从萤火虫控制台,在我链接的地图中,两个
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}
如果我是对的,这意味着它们具有相同的坐标,这与代码相同。
[Edit2] 新进展!
在处理自定义投影时,矢量似乎存在渲染问题,例如用于显示此等距 Minecraft 地图的投影。 (使用 Tectonicus 生成)
在最后一个 cmets 之后,我将添加到两个新调试数组上方链接的实时代码中,
debugRegionLatLngs 和 debugRegionPoints。上面的代码已更新,因此您可以看到它们包含的内容。
[Edit3]投影和坐标
Cross BicycleDude 的研究与我的研究相比,现在几乎可以肯定是自定义投影破坏了多边形。其实还有a possibly related bug in Google Maps' API。
之所以使用此投影,是因为 Minecraft 地图几乎是无限的,但必须使用 gmap,它在 360° 经度后环绕。同样相关的是,游戏内坐标以等距方式呈现,而 gmaps 期望更像墨卡托投影。
我尝试稍微调整一下投影,但到目前为止没有任何有趣的结果。
【问题讨论】:
-
我相信您在多边形属性中使用了
path,而实际上它应该是paths,否则,在某处查看实时代码会有所帮助。干杯,安德烈斯 -
我找到了一些空间来上传地图和相关代码的副本。链接在问题中。如果您希望我进行任何测试,请询问。 :)
-
您能否发布一个稍微小一点的示例来重现这一点,或者至少将我们指向您示例中的 Google 地图代码?我迷失在所有的 JavaScript 文件中......
-
@bamnet 抱歉,我在上次编辑中没有包含此内容。您要查找的代码部分位于
Scripts/tectonicus.js中,从第 659 行开始。使用此代码编辑主帖。 -
再看一遍后,我认为您的自定义投影(无论您用于“我的世界”投影的是什么)是什么给了您奇怪的行为。你的多边形的坐标看起来很奇怪。经度之间的增量是不同的度数,但纬度的增量是小数。我建议使用以下代码来查看坐标是否真正遵循地图上的标准北/南东/西逻辑。 --- google.maps.event.addListener(map, 'click', function(e) { alert(e.latLng.lat()+', '+e.latLng.lng()); });跨度>
标签: javascript google-maps google-maps-api-3 polygon projection