我正在尝试从数据库中绘制几个分离的多边形(建筑物)。我从数据库中获取的数据如下所示:
<buildings>
<building build_id="94" build_gebaeude="A"
build_geoX="49.26173942769648" build_geoY="7.350542675857582"
/>
<building build_id="95" build_gebaeude="A"
build_geoX="49.26173942769648" build_geoY="7.3524094933319475"
/>
<building build_id="96" build_gebaeude="A"
build_geoX="49.26019903253632" build_geoY="7.35234512031559"
/>
<building build_id="97" build_gebaeude="A"
build_geoX="49.26032506667364" build_geoY="7.350692879562416"
/>
<building build_id="98" build_gebaeude="B"
build_geoX="49.26155738350112" build_geoY="7.362129818801918"
/>
<building build_id="99" build_gebaeude="B"
build_geoX="49.26157138692462" build_geoY="7.364275586013832"
/>
<building build_id="100" build_gebaeude="B"
build_geoX="49.260255047748224" build_geoY="7.364361416702309"
/>
<building build_id="101" build_gebaeude="B"
build_geoX="49.260311062896506" build_geoY="7.362065445785561"
/>
</buildings>
以下代码显示了我正在执行的操作来绘制建筑物:
for (var i = 0; i < building.length-1; i++) {
var point = new google.maps.LatLng(
parseFloat(building[i].getAttribute("build_geoX")),
parseFloat(building[i].getAttribute("build_geoY"))
);
latlngbounds.extend(point);
if( building[i].getAttribute("build_gebaeude") ==
building[i+1].getAttribute("build_gebaeude") )
{
path.push(point);
}
else {
path.push(point);
poly = new google.maps.Polygon({
paths: path,
strokeWeight: 5,
strokeOpacity: 1,
fillOpacity: 0.30,
strokeColor:'#FFFFFF',
fillColor: '#a3141d'
});
polygons.push(poly);
path.clear();
}
}
polygons[0].setMap(map);
polygons[1].setMap(map);
问题是不是所有的点都被抽到了?我不明白问题出在哪里?
看起来 paths
数组可能有问题。从您包含的代码中不清楚paths
是 JavaScript Array
还是类似数组的对象,但由于您正在for
循环中使用paths
,然后尝试清除循环中的paths
,我建议:
- 根据需要在循环中创建新
paths
Array
- 添加代码以管理数组循环的状态
- 更改用于检查建筑物属性和测试相等性的代码
- 由于您要将路径数组传递给 Polygon 构造函数,因此不要清除数组
var paths = null;
var aNewPathIsNeeded = true;
for ( var i = 0; i < building.length-1; i++) {
//Create your point
//Extend your bounds
//Since you always add the point to the paths array, move it out of the if
//check and perform some array state management:
if ( aNewPathIsNeeded ) {
paths = new Array( point );
aNewPathIsNeeded = false;
}
else { paths.push( point ); }
//Change the if condition to deal with just the specific case of interest:
var currentBldgAttr = building[i].getAttribute("build_gebaeude");
var nextBldgAttr = building[i+1].getAttribute("build_gebaeude");
if ( !( currentBldgAttr === nextBldgAttr ) ) { //Change to use: '==='
//Create your polygon
//Add the polygon to the polygons array
//New code to manage paths state:
aNewPathIsNeeded = true;
}
}
我不确定您的问题到底是什么,但我相信这段代码将帮助您继续前进。作为旁注,clear()
不是 JavaScript Array
方法;当你想清空一个Array
时,使用:array.length = 0
如:JavaScript的array.clear()不是一个函数吗?