Error Nodejs Geocode with OpenStreetMap/Nominatim



我有一个网站,它需要获得用户地址对应的纬度和经度,然后在我的数据库(mongodb(中输入信息。

谷歌/必应/雅虎对我们来说太贵了,所以我们选择了OpenStreetMap/Nominatim。

我的代码如下:

const options = {
provider: 'openstreetmap',
};
const geoCoder = NodeGeocoder(options); 

geoCoder
.geocode({
city: Adresse_fixe_ville,
zipcode: Adresse_fixe_postal,
})
.then(async (res) => {
const Latitude = res[0].latitude;
const Longitude = res[0].longitude;
//CREATE A STUDENT WHITH THE INFO + LAT AND LONG
student = new Student({
Civilite,
Nom_patronymique,
Prenom,
Date_naissance,
No_etudiant,
Libelle_nationalite,
Telephone_portable,
Mailum,
Adresse_fixe_postal,
Adresse_fixe_ville,
Libelle_etape,
Latitude,
Longitude,
});
//VERIFICATION of undefined .....
) {
//SAVE THE STUDEN IN THE DATABASE
await student.save();
} else {
//Res error .....
}
})

当我处理小数据量时,一切都很好。(不到40个用户(但当我想上传我的1300个用户时,它在42个用户的过程中被阻止了。事实上,我首先有一个错误:

TypeError: Cannot read property 'latitude' of undefined
[0]     at Geocoder.<anonymous> (C:UsersjustiDocumentsGitHubcarpoolingApplicationroutesapistudents.js:105:37)
[0]     at Geocoder.tryCatcher (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseutil.js:16:23)

然后,当我试图解码地址并保存我的数据库时,我有这个错误消息给所有用户:

HttpError: request to http://nominatim.openstreetmap.org/search?addressdetails=1&city=MONT-DE-MARSAN&zipcode=40000&format=json failed, reason: connect ETIMEDOUT 130.117.76.9:80
[0]     at C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocoderlibhttpadapterfetchadapter.js:47:15
[0]     at tryCatcher (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseutil.js:16:23)
[0]     at Promise._settlePromiseFromHandler (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleasepromise.js:547:31)
[0]     at Promise._settlePromise (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleasepromise.js:604:18)
[0]     at Promise._settlePromise0 (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleasepromise.js:649:10)
[0]     at Promise._settlePromises (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleasepromise.js:725:18)
[0]     at _drainQueueStep (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseasync.js:93:12)
[0]     at _drainQueue (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseasync.js:86:9)
[0]     at Async._drainQueues (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseasync.js:102:5)
[0]     at Immediate.Async.drainQueues [as _onImmediate] (C:UsersjustiDocumentsGitHubcarpoolingApplicationnode_modulesnode-geocodernode_modulesbluebirdjsreleaseasync.js:15:14)
[0]     at processImmediate (internal/timers.js:456:21) {
[0]   name: 'HttpError',
[0]   message: 'request to http://nominatim.openstreetmap.org/search?addressdetails=1&city=MONT-DE-MARSAN&zipcode=40000&format=json failed, reason: connect ETIMEDOUT 130.117.76.9:80',
[0]   code: 'ETIMEDOUT'
[0] }

我对这个问题做了很多研究,但找不到解决方案或替代方案。我知道nominatim的使用政策(https://operations.osmfoundation.org/policies/nominatim/?fbclid=IwAR1amydpXK6TXhWk_DPKwkeRGwFz4Z6OyQpp6DYcpklEZx_6m1e9JpkgvMQ)。我想我提出的要求太多了。但是我该如何解决这个问题呢?

谢谢你的帮助!

您使用的查询错误。

对于"openstreetmap",您只能使用查询。

let results: any = await geocoder.geocode(query);

相关内容

最新更新