当前,我正在使用opengeodata和一些公司内部API进行项目。因此,我在这里使用的代码略有更改。
首先,我正在使用Opencagedata Javascript API从地址中获取经/纬度坐标。
<script>
function geocode(query){
$.ajax({
url: 'https://api.opencagedata.com/geocode/v1/json',
method: 'GET',
data: {
'key': 'MyKey',
'q': query,
'no_annotations': 1
},
dataType: 'json',
statusCode: {
200: function(response){ // success
var lat = response.results[0]['geometry']['lat'];
var lng = response.results[0]['geometry']['lng'];
$('#geo_result').text(lat + ' , ' + lng);
之后,我使用另一个内部API来获取有关此位置周围位置的一些信息。让我们称之为POI。得到这些POI后,我使用拼接将三个最接近的POI过滤到经纬度坐标上,并过滤一些特定的关键字。
var radius = 1.5;
var POI = [];
var apiCall = $.get( "CoorpAPI/"+radius+"/around/"+lat+","+lng );
apiCall.done(function(result) {
var myLoc = result.filter(function(loc) {
return loc.id.substr(0, 3) != 'keyword';
});
$.each(myLoc, function(n, loc) {
POI.push(loc.id)
})
var top3 = POI.slice(0,3);
console.log(top3);
现在,我要针对第二个API来运行这三个“ top3” POI [“ AB1234”,“ BC2345”,“ CD3456”],该API将返回位置信息。这些信息应该被写到第二维的同一数组中。
最后我想拥有类似的东西:
[
0: AB1234
Location Information: A
Location Information: B
1: CD2345
Location Information: C
Location Information: D
...
]
我想循环必须看起来像这样,但是我不知道如何调用api并从api返回的“ top3”位置和位置信息中创建2d数组:
for (var i=0; i < top3.length; i++) {
var apiCall_2 = $.get("CoorpAPI_2"+top3[i]);
// ???
}
如果我对您的理解正确,您想在POI
中使用嵌套数组在第二次API调用后添加更多信息。您可以尝试做的一件事是以以下方式push
而不是仅loc.id
一个数组:
POI.push([loc.id]);
现在您在POI中有一个嵌套数组,而不是单个字符串ID(我猜ID是字符串;也可以是数字)。对于第二个API调用,您可以像这样修改代码:
var apiCall_2 = $.get('CoorpAPI_2'+top3[i][0]);
这样,您使用的ID是嵌套数组中的第一个元素。处理完来自API调用2的所有数据后,您可以将每个数据点分别推入嵌套数组,也可以作为另一个数组,如下所示:
// pushing each data points separately
top3[i].push(dataPoint1);
// ... up to say N data points
top3[i].push(dataPointN);
// adding as an array
top3[i].push([dataPoint1, dataPoint2, dataPointN]);
您的结果将是这样:
[ ["AB1234", "dataPoint1", "dataPoint2"] ]
如果您使用第一种方法,并且像这样
[ [ "AB1234", ["dataPoint1", "dataPointN"] ], ]
如果您使用第二种方法。希望这会有所帮助。