使用Mapbox和Nominatim绘制多个GeoJSON行

时间:2017-04-02 08:36:33

标签: jquery mapbox-gl-js 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
          }
        });
      });
被绘制的街道的例子:http://prntscr.com/erfwhr

也注意到了这一点:http://prntscr.com/erg0r0。 传递给get响应的数据长度可达3000或更多。我猜这是问题,浏览器不等待所有坐标..

非常感谢任何帮助或见解。

1 个答案:

答案 0 :(得分:2)

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