2

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

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

4

2 回答 2

1

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

于 2013-06-04T06:39:00.460 回答
0

下面是如何使用OpenLayers.Geometry.LineString()将线条添加到开放街道地图的示例。我已经对此进行了测试,并且可以正常工作。

  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

于 2015-08-23T02:04:55.320 回答