如何在OpenLayers中绘制沿着道路的线?

4
在一个OSM基础层上,我用一个点的数组和OpenLayers.Geometry.LineString对象/方法绘制了一条跟随3个点的线。
现在,我想让这条线跟随道路。花费了几个小时在互联网上寻找解决方法,但是没有找到答案。是否有相应的对象可以实现这个功能?我需要先获取瓷砖中的一些信息吗?
请问我能得到一些帮助吗?
下面是我绘制直线的代码:
function init() {

    var epsg4326 = new OpenLayers.Projection("EPSG:4326");
    var map = new OpenLayers.Map('map');

    var osmLayer = new OpenLayers.Layer.OSM("OSM");
    map.addLayer(osmLayer);
    var center = new OpenLayers.LonLat(-71.6, -33.7).transform(epsg4326,map.getProjectionObject());
    map.setCenter(center,4); 

    var points = new Array(
        new OpenLayers.Geometry.Point(-71.26,-32.47),
        new OpenLayers.Geometry.Point(-71.30,-32.97),
        new OpenLayers.Geometry.Point(-70.81,-32.89)
    );

    var myLine = new OpenLayers.Geometry.LineString(points).transform(epsg4326, map.getProjectionObject());
    var myLineStyle = {strokeColor:"#0500bd", strokeWidth:3};
    var myFeature = new OpenLayers.Feature.Vector(myLine, {}, myLineStyle);
    var myVector = new OpenLayers.Layer.Vector("line test");
    myVector.addFeatures([myFeature]);
    map.addLayers([myVector]);

}

你可以请求将这个问题迁移到http://gis.stackexchange.com,因为它不是一个编程问题。然而,我认为让矢量图与底层栅格图块对齐是不可能的。也许通过一些基于画布的魔法可以实现,但我怀疑这不会是一个非常实用的解决方案。 - kryger
我在这里找到了一些信息:http://gis.stackexchange.com/questions/39157/how-to-implement-routing-in-openlayers - user3062040
1个回答

6
通常,OpenLayers只显示栅格瓦片,但无法从中提取道路几何信息。为此,您需要原始或经过预处理的数据。OpenLayers和Leaflet都能够显示GPX文件。因此,一旦您获得了GPX文件,其他所有内容都将变得容易。
不幸的是,您没有告诉我们是否要按特定道路(基于名称/地址?还是基于坐标?)进行跟踪,或者是否要沿多条道路显示路径,或者其他完全不同的内容。
要从OpenStreetMap检索原始地理信息,有一个官方API,还有Overpass API,通常速度更快,并允许指定相当复杂的查询。但是,显示这种原始数据需要进行大量预处理。
如果您想显示路线,则可以选择可用的OSM在线路由器之一,例如OSRM。其中许多提供计算路线的GPX导出功能,您可以将其与OpenLayers一起使用。但是,如果不知道您实际要做什么,这里介绍更多选项将是浪费时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接