2013-06-03 46 views
2

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

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

回答

0

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

+0

谢谢您的回答,我会检查它的小时 – Spyros

+1

内谢谢你千遍!接受了GPX课程的快速崩溃,并且设法实现了不仅仅是这个问题,而是完成了自我回答以来的所有任务!一旦我达到+15,我将返回给代表,并再次感谢您最快速的答复! – Spyros

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

相关问题