gpt4 book ai didi

javascript - 如何在谷歌地理编码调用中传递一些参数

转载 作者:行者123 更新时间:2023-12-03 01:33:50 25 4
gpt4 key购买 nike

我有一个包含四个字段的地址的对象数组,field1 是当前位置(商店),其余的是地址信息。

我的问题是如何确保最后得到带有 key:value (store:cords) 的结果,以便我知道哪个商店有哪些电线。

这是我到目前为止编写的代码:

var NodeGeocoder = require('node-geocoder')
const csv=require('csvtojson')
const csvFilePath='location.csv'
csv({noheader:true})
.fromFile(csvFilePath)
.then((jsonObj)=>{
convertAddressesToCoords(jsonObj, function(coords){
console.log('converting finished.');
console.log(coords.length);
console.log(coords);
});
});

function convertAddressesToCoords(addresses, callback) {
var coords = [];
var options = {
provider: 'google',
httpAdapter: 'https',
apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxx',
formatter: null
};

var geocoder = NodeGeocoder(options);

for(var i = 0; i < addresses.length; i++) {
currAddress = addresses[i].field2 + ' ' + addresses[i].field3 + ' ' + addresses[i].field4;
geocoder.geocode(currAddress, function(err, results) {
coords.push(results);
if(coords.length == addresses.length) {
if( typeof callback == 'function' ) {
callback(coords);
}
}
});
}
}

当前代码工作正常,我可以为每个地址获取坐标,但问题是最后我不知道哪个商店有哪个坐标,因为谷歌地理编码校准是异步的,所以我找不到一种方法来完成这项工作.

最佳答案

循环数组然后在最后调用回调可以工作,但它很难阅读并且可能会导致一些问题,因此我会在这里使用 Promises:

const getCoords = geocoder => address => new Promise((resolve, reject) => {
address = [address.field2, address.field3, address.field4].join(" ");
geocoder.geocode(address, function(err, coords) {
if(err) reject(err) else resolve({ address, coords });
});
});

现在要获得某个坐标,您可以这样做:

getCoords(NodeGeocoder(options))({field2: "Unknown Location"})
.then(({ address, coords }) => console.log(adress + " is at " + coords));

现在从您的 csv 中获取这一点也很容易:

csv({noheader:true})
.fromFile(csvFilePath)
.then(data => Promise.all(data.map(getCoords(NodeGeocoder(options)))
.then(positions => {
//...
})

并且positions现在是一个坐标/地址对的数组。

<小时/>

如果您想使用您的代码,只需添加

const currAddress = addresses[i].field2 + ' ' + addresses[i].field3 + ' ' + addresses[i].field4;

将其保留在闭包中,然后您可以将其推送到结果:

coords.push({ coords: results, address: currAddress });

关于javascript - 如何在谷歌地理编码调用中传递一些参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51169770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com