我想在同一个谷歌地图中绘制多个多边形,我需要做的是从列表框中读取latlngs,它们是这样的:
LAT1,lng1,1 LAT2,lng2,1 lat3,lng3,1 LAT1,lng1,2 LAT2,lng2,2 lat3,lng3,2
并且根据右边的值(1或2)我将读取相应的latlns并绘制多边形,实际上我正在这样做,在我的循环中多边形被绘制但是有一条连接它们的线,什么我可以吗?,我的意思是,如何在没有这条连接线的情况下绘制多边形?,非常感谢!!!
这是我的代码:
<script type="text/javascript">
var bermudaTriangle=[];
var places = [];
var geoDataSplit;
function initialize() {
var mapDiv = document.getElementById('map_canvas');
var coords = document.getElementById("selPoly");
var map = new google.maps.Map(mapDiv, {
center: new google.maps.LatLng(19.3162200000000, -99.2204930000000),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var latlng;
for (var i = 0; i < coords.options.length; i++)
{
var geoData = coords.options[i].text;
geoDataSplit = geoData.split(",");
var counter = geoDataSplit[2];
for (geoDataSplit[2] = 1; geoDataSplit[2] <= 2; geoDataSplit[2]++)
{
if (counter == geoDataSplit[2]) {
latlng = new google.maps.LatLng(parseFloat(geoDataSplit[0]), parseFloat(geoDataSplit[1]));
places.push(latlng);
bermudaTriangle = new google.maps.Polygon({
paths: places,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35
});
}
}
}
bermudaTriangle.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body style="font-family: Arial; border: 0 none;">
<form id="form1" runat="server">
<div>
<asp:ListBox ID="selPoly" runat="server"></asp:ListBox>
</div>
</form>
<div id="map_canvas" style="width: 1024px; height: 768px"></div>
</body>
答案 0 :(得分:0)
绘制多边形是在点之间绘制线条(您给出的后续点,可能是列表中的第一个和最后一个点)。当它们包围一个空间时 - 你得到一个多边形,空间充满了颜色。该线始终位于两个后续点之间。
如果需要单独的多边形,则必须创建单独的多边形(使用new google.maps.Polygon
)。如果你得到的只是一个点列表,那么由你来决定或者找到一个算法来检测空间是否已被封闭,并且应该创建一个新的多边形。
顺便说一下,使用现在的算法,new google.maps.Polygon
行可以(并且可能应该)在循环之外,在bermudaTriangle.setMap(map)
之前的行中向下推;
OH等待实际上是一个解决方案。或者至少是半解决方案。您可以使线条不可见(strokeOpacity: 0
)。由于它们的填充,多边形仍然可见,或多或少像这样: