Я пытаюсь нарисовать улицу, когда пользователь нажимает на нее на карте, которая использует данные 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
}
});
});
также заметил это: http://prntscr.com/erg0r0. данные, передаваемые в качестве ответа на запрос, могут иметь длину до 3000 или более символов. Я предполагаю, что проблема в том, что браузер не ждет всех координат ..
Любая помощь или понимание были бы очень признательны.