JSON字符串更改Google MAPS API v3的键

JSON字符串更改Google MAPS API v3的键,json,google-maps-api-3,polygon,latitude-longitude,Json,Google Maps Api 3,Polygon,Latitude Longitude,这个问题我已经在这里见过好几次了,但是我的回答并不完全适用于我的情况 我正在使用google.maps.Polygon对象保存在地图上绘制的边界 稍后我将使用“getPath”方法,并将其添加到Json字符串中 JSON字符串总是不同的。有时,我可以通过以下方式获取多边形角点: thisShape.data.b[i].kb thisShape.data.b[i].lb 其他时间由 thisShape.data.b[i].Qa thisShape.data.b[i].Ra 等等 随着时间的推移,J

这个问题我已经在这里见过好几次了,但是我的回答并不完全适用于我的情况

我正在使用google.maps.Polygon对象保存在地图上绘制的边界

稍后我将使用“getPath”方法,并将其添加到Json字符串中

JSON字符串总是不同的。有时,我可以通过以下方式获取多边形角点:

thisShape.data.b[i].kb thisShape.data.b[i].lb

其他时间由

thisShape.data.b[i].Qa thisShape.data.b[i].Ra

等等

随着时间的推移,Json字符串的键似乎会发生变化。但是,我不负责Google Api返回的多边形对象

有没有办法在不知道钥匙的情况下抓住经度和纬度? 你知道如何在我的多边形中循环而不用担心它会在几周内破裂吗

非常感谢


假设您有一个名为“savePolygonda”的方法,该方法创建了一个Json字符串,如下所示:

var allData = {};
    $("div.shapes").each(function(){
      var id = $(this).attr("id");
      var type  = id.split('_')[0];
      var feature = MapToolbar.features[type+'Tab'][id];
      var vertices = feature.getPath();
      allData[id] = { color: feature.fillColor, data: vertices};
    });
    var allDataJson = JSON.stringify(allData);
for (var polyId in allData) {
    if (allData.hasOwnProperty(polyId)) {
      var thisShape = allData[polyId];
      var color = thisShape.color;
      var vertices=new Array();

      for ( var i=0; i<thisShape.data.b.length; ++i )
      {
        var coordX = thisShape.data.b[i].kb; //Problem here
        var coordY = thisShape.data.b[i].lb; //Problem here
        var point = new google.maps.LatLng(coordX, coordY);
        vertices[i] = point;
      }
      var poly = new google.maps.Polygon({
        strokeWeight: 2,
        fillColor: color,
        paths: vertices
      });
      poly.setMap(map);  
    }
然后是另一个在其他地方读取json字符串的方法,如下所示:

var allData = {};
    $("div.shapes").each(function(){
      var id = $(this).attr("id");
      var type  = id.split('_')[0];
      var feature = MapToolbar.features[type+'Tab'][id];
      var vertices = feature.getPath();
      allData[id] = { color: feature.fillColor, data: vertices};
    });
    var allDataJson = JSON.stringify(allData);
for (var polyId in allData) {
    if (allData.hasOwnProperty(polyId)) {
      var thisShape = allData[polyId];
      var color = thisShape.color;
      var vertices=new Array();

      for ( var i=0; i<thisShape.data.b.length; ++i )
      {
        var coordX = thisShape.data.b[i].kb; //Problem here
        var coordY = thisShape.data.b[i].lb; //Problem here
        var point = new google.maps.LatLng(coordX, coordY);
        vertices[i] = point;
      }
      var poly = new google.maps.Polygon({
        strokeWeight: 2,
        fillColor: color,
        paths: vertices
      });
      poly.setMap(map);  
    }
for(allData中的变量polyId){
if(allData.hasOwnProperty(polyId)){
var thisShape=allData[polyId];
var color=thisShape.color;
var顶点=新数组();

对于(var i=0;i它看起来像
getPath()
返回
LatLng
MVCArray
,您应该通过调用
lat()
lng()从中提取纬度和经度
方法,而不是直接访问属性。如果可以在JavaScript中使用,这些属性将被声明为
私有
。但同样的情况也适用于
MVCArray
,您可以选择使用
forEach()
,或者,如果还不能轻松使用lambda函数,则可以使用
getAt()
,使用
getLength()的结果作为保护:

polygon.getPath().forEach(function(latLng, idx) {
   var lat = latLng.lat();
   var lng = latLng.lng();
   // do something
});

var path=polygon.getPath();
var len=path.getLength();
对于(var idx=0;idx

如果多边形只包含一条路径,这些示例就可以了。否则,您也必须在路径上循环。

您的
savepolygonda
示例代码中的问题是,您试图直接在JSON对象中使用顶点数据。相反,您需要使用文档化的方法来获取f的纬度和经度值rom顶点数组并序列化它们

要修复此问题,您可以更改此代码:

var vertices = feature.getPath();
allData[id] = { color: feature.fillColor, data: vertices};
致:

并在其他地方定义此功能:

function getLatLngVertices( path ) {
    var pathArray = path.getArray();
    var vertices = [];
    for( var i = 0, n = pathArray.length;  i < n;  i++ ) {
        var latLng = pathArray[i];
        vertices.push({ lat: latLng.lat(), lng: latLng.lng() });
    }
    return vertices;
}
函数getLatLngVertices(路径){ var pathArray=path.getArray(); var顶点=[]; 对于(变量i=0,n=pathArray.length;i
现在,在解析此JSON的代码中,您可以使用:

var data = thisShape.data;
for( var i = 0, n = data.length; i < n; ++i ) {
    var point = data[i];
    vertices[i] = new google.maps.LatLng( point.lat, point.lng );
  }
var data=thisShape.data;
对于(变量i=0,n=data.length;i
你的意思是你在从最小化的代码中获取数据?你应该避免我包含的内容,这是唯一一个看起来被最小化的外部库。我的代码都没有最小化,据我所知,我们无法控制谷歌提供的api结构可能的重复哦,这看起来很有希望,但我不会能够在服务器端解码字符串吗?这是他们在其他类似答案中建议的,但我不确定我是否能够使用它,除非完全改变我的方法。我将在我的question@Nick:好的,现在我看到您的问题有点不同-很遗憾,我没有时间详细说明您的代码:-(-你应该关注Molle博士的链接,虽然哦!!我会尝试一下,很快让你知道!!