打开街道地图 - 根据给定节点绘制线条

时间:2013-06-03 09:18:31

标签: routing drawing openstreetmap

与朋友一起,我们已经开始了一个有趣的小方案项目来测试我们过去几个月学到的东西。我们决定做一个简单的地图导航程序,该程序将从用户输入(起始位置+所需位置)并根据我们提取的Open Street Maps数据绘制路线。对于我们的第一次尝试,我们假设用户在汽车中并在Java中实现了k最短路径以找到它们之间的路径。我还使用了一个简短的算法来找到用户当前和所需位置的最近节点,虽然不完美,但它可以很好地适应我们希望达到的水平。并且它工作得非常好,给予所有测试图的路线始终有效且通常很快,几次甚至是最佳的。结果返回到节点的ArrayList(id,ref,long,lat)。

我们现在想要的是能够在网页的地图视图中输入起始节点,终结节点和所有找到的路由节点。我们的一般想法是,用户将能够在地图上单击两个点,并且将沿着节点绘制红线 - 我们的javal类返回的方式。你怎么建议我们这样做?我已经成功地使用js来集中用户所需的地图和缩放级别以及中心点,但实时线条图已经证明是难以捉摸的。我没有要求解决方案,因为这实际上违背了整个项目的想法,但我真的可以使用一些指针来了解我将要查看的资源。

2 个答案:

答案 0 :(得分:0)

您可以查看众多online routers for OSM中的一个,以了解如何在网页中绘制路线。或者,您可以生成GPX文件并使用LeafLetOpenLayers或类似的库在地图上绘制。

答案 1 :(得分:0)

以下是如何使用 OpenLayers.Geometry.LineString()将行添加到Open Street Map的示例。我已经对此进行了测试,它运行正常。

  locations = [[-77.3861, 38.9695], [-122.1781, 37.459], [-122.1781, 37.459], [-122.1781, 37.459], [-122.1781, 37.459], [-122.1826, 37.3762], [-122.1781, 37.459], [-122.1826, 37.3762], [-122.1826, 37.3762], [-122.1826, 37.3762]];
  var lines = new OpenLayers.Layer.Vector("Lines Overlay");
  var coordinates = [];
  for (var i = 0; i < locations.length; i++) {
    coordinates.push(new OpenLayers.Geometry.Point(locations[i][0], locations[i][1]).transform(fromProjection, toProjection));
  }
  var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(coordinates));
  lines.addFeatures(feature);
  map.addLayer(lines);

其他API帮助位于: http://dev.openlayers.org/docs/files/OpenLayers/Geometry/LineString-js.html