如何在OpenLayers中沿道路绘制直线

How to draw a line following the road in OpenLayers

本文关键字:道路 绘制 OpenLayers      更新时间:2024-03-09

在OSM基层上,我在3个点后面画了一条线,用一个点数组和对象/方法OpenLayers.Geometry.LineString

现在,我希望这条线沿着这条路走。花了几个小时在互联网上,不可能找到解决方案。这个有对象吗?我必须先从互动程序中获取一些信息吗?

我可以请人帮忙吗?

下面是我画直线的方法

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]);
}

通常OpenLayers只显示光栅瓷砖,但无法从中提取道路几何信息。为此,您需要原始数据或其他预处理数据。OpenLayers和传单都能够显示GPX文件。因此,一旦你有了一个GPX文件,其他一切都会变得简单起来。

不幸的是,您没有告诉我们您是想沿着它走一条特定的道路(基于名称/地址?还是基于坐标?),或者您是想显示沿着几条道路的路线还是完全不同的东西。

为了从OpenStreetMap中检索原始地理信息,有一个官方的API,还有一个Overpass API,它通常要快得多,可以指定相当复杂的查询。但是显示这样的原始数据首先需要大量的预处理。

如果要显示路由,则可以为OSM选择一个可用的在线路由器,例如OSRM。其中许多提供了计算路线的GPX导出,然后可以与OpenLayers一起使用。

还有一些选择,但在不知道你实际想做什么的情况下在这里展示它们会浪费时间。