Ошибка Nodejs Геокодирование с OpenStreetMap / Nominatim - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть веб-сайт, которому нужно получить Широту и Долготу, соответствующие адресу пользователя, а затем ввести информацию в мою базу данных (mongodb).

Google / Bing / Yahoo слишком дороги для нас, поэтому мы пошли с 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:\Users\justi\Documents\GitHub\carpoolingApplication\routes\api\students.js:105:37)
[0]     at Geocoder.tryCatcher (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\util.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:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\lib\httpadapter\fetchadapter.js:47:15
[0]     at tryCatcher (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\util.js:16:23)
[0]     at Promise._settlePromiseFromHandler (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\promise.js:547:31)
[0]     at Promise._settlePromise (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\promise.js:604:18)
[0]     at Promise._settlePromise0 (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\promise.js:649:10)
[0]     at Promise._settlePromises (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\promise.js:725:18)
[0]     at _drainQueueStep (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\async.js:93:12)
[0]     at _drainQueue (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\async.js:86:9)
[0]     at Async._drainQueues (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\async.js:102:5)
[0]     at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\justi\Documents\GitHub\carpoolingApplication\node_modules\node-geocoder\node_modules\bluebird\js\release\async.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). И я думаю, что сделал слишком много запросов. Но как я могу решить эту проблему?

Спасибо за вашу помощь!

...