【问题标题】:Is it possible to know street direction (compass)?是否有可能知道街道方向(指南针)?
【发布时间】:2015-03-03 23:40:48
【问题描述】:

我正在做一个项目,我们需要知道街道的方向(指南针)。 实际上,我们只有一个 GeoPoint(纬度;经度和航向),我们计划使用 reverseGeocoding 来判断它在哪里(哪条街道?);然后我们想知道他是不是走错路了。

谷歌地图、OSM、Mapquest 它们都在街道上显示一个箭头,指示其方向。我猜他们是动态地画的,所以他们必须知道他们的角度。这就是我想知道的(如果可能的话)

提前致谢!

#

编辑:

我在想,也许他们把街道切成小块,然后他们说“这条街道的轨道从 (lat1;lng1) 到 (lat2;lng2)”,这会给这条轨道一个方向,所以他们可以画出那个箭头。也不是每条街道都是一条直线,所以它的方向不仅仅是一个,这取决于你在街道的哪个部分。

【问题讨论】:

  • 对于 Google Maps API:反向地理编码响应中没有街道方向的指示。 IMO,在街道上以错误方式行驶的用户应该意识到,在您的应用程序告诉他之前......
  • 嗨!感谢您的输入!案件将是某人违规。你知道我可以找出街道方向的其他方法吗?如前所述,如果他们在地图上画一个箭头,我猜他们必须知道街道方向(角度)。我不会想象有人一幅幅画它们
  • 他们当然知道。但是您无法通过记录在案的 API 方法访问每条数据。我想不出用 Google Maps API 获取这些信息的方法。也许使用另一个 API。您的编辑是正确的,街道并非(全部)笔直。

标签: google-maps google-maps-api-3 openstreetmap mapquest


【解决方案1】:

使用 OpenStreetMap 可以确定当前位置的街道是否是单向街道以及用户是否开错了方向。

Overpass API 允许在给定的bounding box(您的当前位置)内下载对象。对于下载街道,您必须指定highway tag,单向街道由oneway tag 标记。理想情况下,您应该阅读一些有关 OSM 的基本 elementstags 的内容,以了解 OSM 的内部工作方式。然后开始使用 overpass turbo,这是 Overpass API 的一个不错的 Web 前端。

看到这个example query on overpass turbo

[out:json][timeout:25];
// gather results
(
  way["highway"](51.04525236350533,13.778518438339233,51.04603818288315,13.779301643371582);
);
// print results
out body;
>;
out skel qt;

它在给定的边界框中检索带有 highway 标记的所有方式。

请注意,如果给定的边界框包含多个高速公路,或者没有一个边界框太小,则结果可能包含多条高速公路。

【讨论】:

    【解决方案2】:

    所以你需要知道的是街道名称,以及如果司机朝正确的方向行驶,这是单向(我是否正确理解这一点?)

    要解决这个问题,您可以使用像 GraphHopper 这样的路由引擎,我是 ;) 的作者,并使用您拥有的点作为起点。

    您可以通过简单的矢量数学从起点和航向加上例如终点来计算终点。 1 米或 2 米的距离。

    那么如果这两个点的直线距离与路线距离相似,他就正确地在赛道上。如果计算出的路线是直线距离长度的 2 倍以上,那么这条街道是单向的,并且他正在朝错误的方向行驶。参见this route(7 米长)与this route(145m)。作为一个很好的副作用,您还可以在说明中获得街道名称。

    顺便说一句:记录的 GPS 信号可能是错误的(您不应该依赖单个信号),您可以查看 map matching 以通过许多记录点来改进它。

    【讨论】:

      【解决方案3】:

      首先,您至少需要 2 分。方向只有一点是没有意义的。

      获得 2 分后,请使用 google.maps.geometry.spherical.computeHeading(point1, point2)

      这里有一个很好的演示: https://developers.google.com/maps/documentation/javascript/examples/geometry-headings

      顺便说一句,getHeading() 用于确定在拍摄当前显示的航拍图像时飞机面向的方向。 AFAIK,任何具有可用航拍图像模式的给定点通常有 4 个彼此相距约 90 度的视图,但它们并不总是与基本方向对齐。您可以通过调用 setHeading() 来更改视图。

      【讨论】:

      • 感谢您的回答。如果我理解正确,那不是我要找的。 getHeading 会给我方向,我想知道街道的流通方式。并且知道这一点和我自己的方向,我可以判断我是否走错路
      • getHeading 并不像您认为的那样。从文档中查看此示例:developers.google.com/maps/documentation/javascript/examples/…
      • 对我的误解深表歉意。我仍然不知道如何实现我的目标。我正在跟踪一辆车,我知道它在哪里,它要去哪里。我想告诉它“你在 xxxxxxxx 街上开车,但那条街是从东到西,你从西到东开车。你走错路了”。再次感谢您,感谢您帮助我
      【解决方案4】:

      您可能想使用getHeading() 它返回航拍图像的罗盘航向。航向值以度数(顺时针)从基本方向北测量。

      【讨论】:

      • 谢谢!我认为这会给我自己的标题。而且我想知道街道的方向,这样我就可以判断我是否(故意)走错路了
      • getHeading() 哪个 API?这不是原始问题的答案 + 质量非常低。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多