1

当用户在使用 OSM 数据并由 Mapbox 呈现的地图上单击街道时,我正在尝试绘制街道。我从单击中获取坐标并将它们发送到服务器,然后返回 Nominatim 为特定街道提供的 LineStrings。我对较长的街道有疑问:它们似乎不完整(例如,100m 的正确绘制的线,然后 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/erfwhr

也注意到了这一点:http: //prntscr.com/erg0r0。作为获取响应传递给的数据可能长达 3000 个或更多字符。我猜这就是问题所在,浏览器不会等待所有坐标..

任何帮助或见解将不胜感激。

4

1 回答 1

2

如果有人遇到类似问题,我将发布答案:) 问题不在来自服务器的请求中,而是在 nominatim 减少搜索结果中,因此解决方案是将 &dedupe=0 包含在 nominatim 的获取请求中。

于 2017-04-02T16:36:30.553 回答