Рисование нескольких линий GeoJSON с помощью Mapbox и Nominatim

Я пытаюсь нарисовать улицу, когда пользователь нажимает на нее на карте, которая использует данные OSM и отображается с помощью Mapbox. Я получаю координаты щелчком мыши и отправляю их на сервер, а затем возвращаю LineStrings, которые Nominatim предоставляет для конкретной улицы. У меня проблема с более длинными улицами: они кажутся неполными (например, 100 м правильно проведенной линии, затем 100 улиц отсутствует, а затем снова обычная линия), некоторые более длинные улицы могут состоять даже из 10 или больше сегментов. На мой взгляд, эта проблема может быть вызвана тем, что osm имеет неполные данные (хотя я в этом сомневаюсь) или я неправильно рисую / загружаю данные. Мой код выглядит так:

map.on("click", function(e) {
      //get coordinates and send them to the server.

      function getRequest() {
        return $.ajax({
          url: "/street",
          data: clickCoords,
        });
      };

      $.when(getRequest()).done(function(response, status, jqXHR) {
        streetGEOJSON = response;
        var feat = [];
        for (var i = 0; i < streetGEOJSON.length; i++) {
          feat[i] = {
            "type": "Feature",
            "geometry": {
              "type": "LineString",
              "coordinates": streetGEOJSON[i]
            }
          }
        }
        var lines = {
          "type": "geojson",
          "data": {
            "type": "FeatureCollection",
            "features": feat
          }
        }
        map.addSource("street", lines);

        map.addLayer({
          "id": "street",
          "type": "line",
          "source": "street",
          "filter": ["==", "$type", "LineString"],
          "layout": {
            "line-join": "round",
            "line-cap": "round"
          },
          "paint": {
            "line-color": "#888",
            "line-width": 8
          }
        });
      });
example of wronly drawn street: http://prntscr.com/erfwhr

также заметил это: http://prntscr.com/erg0r0. данные, передаваемые в качестве ответа на запрос, могут иметь длину до 3000 или более символов. Я предполагаю, что проблема в том, что браузер не ждет всех координат ..

Любая помощь или понимание были бы очень признательны.


person L.P.    schedule 02.04.2017    source источник


Ответы (1)


Я отправлю ответ, если кто-то столкнется с подобными проблемами :) проблема была не в запросе с сервера, а в номинальном сокращении результатов поиска, поэтому решение заключалось в том, чтобы включить & dedupe = 0 в запрос получения для nominatim.

person L.P.    schedule 02.04.2017