JSON字符串更改Google MAPS API v3的键
这个问题我已经在这里见过好几次了,但是我的回答并不完全适用于我的情况 我正在使用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返回的多边形对象 有没有办法在不知道钥匙的情况下抓住经度和纬度? 你知道如何在我的多边形中循环而不用担心它会在几周内破裂吗 非常感谢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
假设您有一个名为“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博士的链接,虽然哦!!我会尝试一下,很快让你知道!!