Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用Google Maps数据库中的set latlong绘制多边形_Arrays_Google Maps_Polygon - Fatal编程技术网

Arrays 使用Google Maps数据库中的set latlong绘制多边形

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

我试图在地图上画多边形,但失败了。我已经从数据库中设置了latlng。我已经在这里读了教程

我正在使用vb.net进行查询

这是我的密码:

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'});