Arrays 使用Google Maps数据库中的set latlong绘制多边形
我试图在地图上画多边形,但失败了。我已经从数据库中设置了latlng。我已经在这里读了教程 我正在使用vb.net进行查询 这是我的密码:Arrays 使用Google Maps数据库中的set latlong绘制多边形,arrays,google-maps,polygon,Arrays,Google Maps,Polygon,我试图在地图上画多边形,但失败了。我已经从数据库中设置了latlng。我已经在这里读了教程 我正在使用vb.net进行查询 这是我的密码: function showpolygon(){ var data1 = "<%= vpolygon %>"; var ndata1 = data1.split("|"); var len1 = ndata1.length; var nnama, nlat, nlong
function showpolygon(){
var data1 = "<%= vpolygon %>";
var ndata1 = data1.split("|");
var len1 = ndata1.length;
var nnama, nlat, nlong, gmbrpolygon;
var arraypoly = [];
var arraypoly1 = [];
var n =0;
var polygons = [];
alert ("<%= vpolygon %>");
for (var i = 0; i < len1; i++)
{
ndata11 = ndata1[i].split("~");
nlat = parseFloat (ndata11[1]);
nlong = parseFloat(ndata11[2]);
arraypoly = new google.maps.LatLng(nlat,nlong);
//alert(polygons);
arraypoly1.push(arraypoly);
}
polygons.push(arraypoly1);
gmbrpolygon = new google.maps.Polygon({
paths: arraypoly1,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
gmbrpolygon.setMap(map);
}
使用mvc数组时出现的错误是参数0:[object][object],无法设置未定义的属性“0”
使用此代码,控制台javascript中不会出现任何错误,但多边形不会出现。如果提供的字符串格式正确,则您的函数对我来说可以正常工作:
'some~lat~lng|some~lat~lng'
检查字符串是否具有此格式,我猜它确实具有此格式:
'lat~lng|lat~lng'
如果执行此操作,则函数将不起作用,因为您将从每个部分的拆分值2+3创建LatLngs(请注意,数组索引是基于零的),但结果数组将只有2项
您必须更改:
nlat = parseFloat (ndata11[1]);
nlong = parseFloat(ndata11[2]);
进入
由于数据格式不是这里的问题(我仍然不清楚为什么没有MVCArray的第一种方法不起作用),我重新编写了您的函数,它现在使用MVCArray,支持复杂多边形,并接受数据和多边形选项作为参数,以使此函数灵活:
function showpolygon(data,options){
var indexes={lat:1,lng:2},//indexes of lat and lng in the splitted arrays
delimiters = ['#','|','~'],//delimiters for data
paths = new google.maps.MVCArray(),
defaults ={//default polygon options,
//will be merged with the options-argument
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
}, temp;
if(options){
for(var k in options){
defaults[k]=options[k]
}
}
defaults.paths=paths;
temp=data.split(delimiters[0]);
for (var a = 0; a < temp.length; a++){
var current=new google.maps.MVCArray();
temp[a]=temp[a].split(delimiters[1]);
for (var b = 0; b < temp[a].length; b++){
temp[a][b]=temp[a][b].split(delimiters[2]);
current.push(new google.maps.LatLng(temp[a][b][indexes.lat],
temp[a][b][indexes.lng]))
}
paths.push(current);
}
return new google.maps.Polygon(defaults);
}
复杂多边形的示例用法:(注意新的分隔符#
,可以通过函数中的delimiters变量定义分隔符)
演示:您应该包括有关所获得错误的信息。浏览器中呈现的
是什么?这是什么polygons.push(arraypoly1)代码>用于?正如@Filburt所问的,发生了什么错误?对不起,我的问题没有更多细节。我已经编辑了这个问题。谢谢你的回答。你能帮我吗?谢谢你的回答,我已经在编辑这个问题了。你能帮我吗?这对我来说仍然是个谜。我上面的答案是多余的,因为数据的格式是正确的。通过这个,我不能说函数的代码有什么问题,它对我来说很好:。与编辑相关的错误是,没有在某处定义多边形,是否在某处定义了名为多边形的数组?此外,这个数组应该只包含LatLng对象,而不应该将它们包装到另一个对象中(就像您所做的那样)。我制作了一个使用MVCArray的简化版本,试试看:谢谢,因为你,我得到了解决方案。从绘制多边形中设置latlng数组并将它们保存到数据库中,我查看数据库,发现latlng在保存到数据库中时出错。谢谢。
nlat = parseFloat (ndata11[0]);
nlong = parseFloat(ndata11[1]);
function showpolygon(data,options){
var indexes={lat:1,lng:2},//indexes of lat and lng in the splitted arrays
delimiters = ['#','|','~'],//delimiters for data
paths = new google.maps.MVCArray(),
defaults ={//default polygon options,
//will be merged with the options-argument
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
}, temp;
if(options){
for(var k in options){
defaults[k]=options[k]
}
}
defaults.paths=paths;
temp=data.split(delimiters[0]);
for (var a = 0; a < temp.length; a++){
var current=new google.maps.MVCArray();
temp[a]=temp[a].split(delimiters[1]);
for (var b = 0; b < temp[a].length; b++){
temp[a][b]=temp[a][b].split(delimiters[2]);
current.push(new google.maps.LatLng(temp[a][b][indexes.lat],
temp[a][b][indexes.lng]))
}
paths.push(current);
}
return new google.maps.Polygon(defaults);
}
showpolygon("name~54~-82~0|name~55.3~-116~0|name~34~-107~0|name~36~-70~0",
{map:map, strokeColor: '#000000', strokeWeight:4, fillColor:'#00FF00'});
showpolygon("name~1~1~0|name~55.3~55~0|name~43.2~-11~0#name~24~4|name~39~1~0|name~43~22~0|name~31.5~20.8~0",
{map:map, strokeColor: '#0000FF'});