【问题标题】:Open Street Maps - Drawing a line based on given nodesOpen Street Maps - 根据给定节点绘制一条线
【发布时间】:2013-06-03 09:18:30
【问题描述】:

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

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

【问题讨论】:

    标签: routing drawing openstreetmap


    【解决方案1】:

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

    【讨论】:

    • 谢谢你的回答,我会在一个小时内检查它
    • 谢谢你一千遍!!!参加了快速的 GPX 速成课程,并成功地完成了不仅是这个问题,而且完成了我回答后的所有任务!我会在 +15 岁时返回代表,再次感谢您最及时的回答!
    【解决方案2】:

    这是一个如何使用 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

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多