如何字符串化google LatLng对象
How do I stringify a google LatLng object?
我正在使用google maps API并尝试将点数组字符串化,每个点都有纬度和经度。我要做的是对数据进行字符串化,并将其存储在数据库中,以便以后检索。问题是,由于谷歌地图存储和使用数据的方式,JSON.stringify
的结果有时是奇怪的随机的。例如,有时数据看起来像这样:
[{"Na":35.99663,"Oa":-78.94982},
{"Na":35.996370000000006,"Oa":-78.94914},
{"Na":35.99595,"Oa":-78.94833000000001},...]
有时完全相同的数据看起来像这样:
[{"Ia":35.99663,"Ja":-78.94982},
{"Ia":35.996370000000006,"Ja":-78.94914},
{"Ia":35.99595,"Ja":-78.94833000000001},...]
事实上,我已经看到了大约十种不同的变化。当我将字符串化的数据存储在数据库中并检索它时,这会导致很多问题,因为我永远不知道应该使用哪种格式。我要做的是替换键,使数据看起来更像这样:
[{"lat":35.99663,"lon":-78.94982},
{"lat":35.996370000000006,"lon":-78.94914},
{"lat":35.99595,"lon":-78.94833000000001},...]
我已经写了代码来找出谷歌地图使用的是哪些随机字母。有了这些信息,我想用"lat"或"lon"替换每一个出现的随机字母。我希望使用像这样的替换方法…
function formatData(data) {
//data is an object that I want to stringify
//this testPoint and testString help us figure out which letters google is using this time around
var testPoint = new google.maps.LatLng(23,45);
var testString = JSON.stringify(testPoint);
var strangeLat = testString.substring(2,4); //this is a random two character string which represents latitude in the stringified data
var strangeLon = testString.substring(10,12); //this is a random two character string which represents longitude in the stringified data
//stringify the data and replace all occurences of the random letters with lat and lon
var formattedData = JSON.stringify(data, function(key,value) {
//do something here to replace the keys
});
return formattedData;
}
我知道如何用替换函数替换值,但我不知道如何替换键。我四处搜索并在网上找到了一些类似的案例:JSON。stringify,改变关键字的大小写和替换关键字JSON在javascript。然而,我很难理解他们,也无法想出一个解决方案来满足我的需求。
提前感谢任何帮助或建议!
更新!
谢谢所有。综合你的建议,我想出了一个解决方案。下面是它的样子:
function formatData(data) {
//data is an array of many LatLng objects
newData = [];
for(var i = 0; i < data.length; i++) {
var obj = new Object();
obj['lat'] = data[i].lat();
obj['lon'] = data[i].lng();
newData.push(obj);
}
return JSON.stringify(newData);
}
JSON。Stringify的行为并不奇怪……Google maps API用随机键发送JSON,不幸的是你不能使用他们的键…
如果你需要获得纬度和经度,你需要使用他们的API为相同的…
你需要使用以下方法:
lat() and lng() //refer: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng
由于你在这里处理点,你需要使用点API,在这种情况下,lat
/lng
是属性…
是指:http://code.google.com/apis/maps/documentation/javascript/reference.html点
如果你还想使用stringify:
JSON.stringify({lat: testPoint.y , lon: testPoint.x);
直接使用JSON.stringify({lat: testPoint.lat(), lon: testPoint.lon()})
下面的方法将按您的要求执行
var ar = [{"Ia":35.99663,"Ja":-78.94982},{"Ia":35.996370000000006,"Ja":-78.94914},{"Ia":35.99595,"Ja":-78.94833000000001}];
var newAr = [];
for(var i = 0; i < ar.length; i++)
{
var obj = new Object();
var u = 0;
for(var x in ar[i])
{
if(u == 0)
obj['lat'] = ar[i][x];
else
obj['lon'] = ar[i][x];
u++;
}
newAr.push(obj);
}
alert(newAr.toSource());
我所做的:1. 我已经创建了一个新的数组2. 然后我遍历了ar3.然后我从ar中循环遍历对象属性4. 并将属性值赋给新属性
就这样了
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何将LatLng对象与数组中的另一个对象进行比较
- 查找与通过两次调用地理编码创建的两个 latlng 对象的距离
- 传单错误:无效的 LatLng 对象:( ,未定义)
- 将lat-long字符串转换为googlemaps API LatLng对象
- 错误:对象#<ui>没有方法'包含LatLng'
- 带有传单地图的无效LatLng对象
- L.latLng()创建的对象抛出无效的LatLng对象;在setZoomAround()上使用时
- 不能使用google.maps.LatLng对象's late
- 如何字符串化google LatLng对象
- 转换DATUM WGS84坐标为谷歌地图v3 JS Latlng对象
- invalidValueError:setCenter:不是LatLng或LatLngLiteral对象