【问题标题】:Live routing using Openlayers and OSM使用 Openlayers 和 OSM 进行实时路由
【发布时间】:2022-01-27 18:44:39
【问题描述】:

我正在构建一个导航应用程序。我正在使用 openlayers 和 osm。到目前为止,我已经绘制了 2 点之间的路径。但由于我的位置每 5 秒更新一次,我必须重新创建路径。即使重新创建路径,旧路径也不会被删除。我该如何解决这个问题?

  var vectorSource = new ol.source.Vector(),
  url_osrm_nearest = '//router.project-osrm.org/nearest/v1/driving/',
    url_osrm_route = '//router.project-osrm.org/route/v1/driving/',
    icon_url = '//cdn.rawgit.com/openlayers/ol3/master/examples/data/icon.png',
    vectorLayer = new ol.layer.Vector({
      source: vectorSource
    }),
    styles = {
      route: new ol.style.Style({
        stroke: new ol.style.Stroke({
          width: 6, color: [40, 40, 40, 0.8]
        })
      }),
      icon: new ol.style.Style({
        image: new ol.style.Icon({
          anchor: [0.5, 1],
          src: icon_url
        })
      })
    };
    var utils = {
  getNearest: function(coord){

    var coord4326 =coord;    
    return new Promise(function(resolve, reject) {
      //make sure the coord is on street

      fetch(url_osrm_nearest + coord4326.join()).then(function(response) { 
        // Convert to JSON
        return response.json();
      }).then(function(json) {
        if (json.code === 'Ok') resolve(json.waypoints[0].location);
        else reject();
      });
    });
  },
  createFeature: function(coord) {
    var feature = new ol.Feature({
      type: 'place',
      geometry: new ol.geom.Point(coord)
    });
    feature.setStyle(iconStyle2);
    vectorSource.addFeature(feature);
  },
  createRoute: function(polyline) {

    var route = new ol.format.Polyline({
      factor: 1e5
    }).readGeometry(polyline);
    var feature = new ol.Feature({
      type: 'route',
      geometry: route
    });
    feature.setStyle(styles.route);
    vectorSource.addFeature(feature);
  },
  to4326: function(coord) {
    return ol.proj.transform([
      parseFloat(coord[0]), parseFloat(coord[1])
    ]);
  }
};
const map = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM(),
    }),
      vectorLayer
  ],
  target: 'map',
  view: view,
});
function first_route(data)
{
  lati = data.latii;
  longi = data.longii;    
  utils.getNearest([my_longi,my_lati]);
  utils.getNearest([longi,longi]);    
  utils.createFeature([longi,longi]);
  var point1 = [my_longi,my_lati];
  var point2 = [longi,longi];
  fetch(url_osrm_route + point1 + ';' + point2).then(function(r) { 
    return r.json();
  }).then(function(json) {
    if(json.code !== 'Ok') {              
      return;
    }      
    utils.createRoute(json.routes[0].geometry);
  });
}

function locate() {
  const coordinates = geolocation.getPosition();
  iconCar.setGeometry(coordinates ? new ol.geom.Point(coordinates) : null)
  if(iconCar.getGeometry() != null)
  map.getView().fit(iconCar.getGeometry(),{maxZoom: 16});
  if(coordinates != null)
  {
    my_lati = geolocation.getPosition()[1];
    my_longi = geolocation.getPosition()[0];
   
  }    
  utils.getNearest([my_longi,my_lati]);
  utils.getNearest([longi,lati]);    
  utils.createFeature([longi,lati]);
  var point1 = [my_longi,my_lati];
  var point2 = [longi,lati];
  fetch(url_osrm_route + point1 + ';' + point2).then(function(r) { 
    return r.json();
  }).then(function(json) {
    if(json.code !== 'Ok') {        
      return;
    }      
    utils.createRoute(json.routes[0].geometry);
  });
  
}

setInterval(locate, 14000);

位置每 5 秒更新一次。因此,地图上的路线也需要改变。但是当我尝试这样做时,它不会删除旧路线。它在同一条路线上绘制另一条路线。

【问题讨论】:

    标签: javascript dynamic routes openlayers openstreetmap


    【解决方案1】:

    如果您将路线特征设为全局变量,您可以创建它,或者如果它已经存在,则更新它

    var routeFeature;
    
    
      createRoute: function(polyline) {
        var route = new ol.format.Polyline({
          factor: 1e5
        }).readGeometry(polyline);
        if (!routeFeature) {
          routeFeature = new ol.Feature({
            type: 'route',
            geometry: route
          });
          routeFeature.setStyle(styles.route);
          vectorSource.addFeature(routeFeature);
        } else {
          routeFeature.setGeometry(route);
        }
      },
    

    【讨论】:

    • 很遗憾这不起作用。
    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多