有可能知道街道方向(指南针)吗?

时间:2015-03-03 23:40:48

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

我正在开展一个项目,我们需要知道街道的方向(指南针)。 实际上,我们只有一个GeoPoint(lat; long和heading),我们正计划使用reverseGeocoding来告诉它在哪里(哪条街道?);然后我们想知道他是否走错了路。

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

提前致谢!

编辑:

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

4 个答案:

答案 0 :(得分:6)

使用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 标记检索所有方式。

请注意,如果结果可能包含多个高速公路,如果它们包含在给定的边界框中,或者没有任何边界框太小。

答案 1 :(得分:2)

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

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

您可以通过简单的矢量数学从起点和标题加上计算结果。距离1或2米。

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

BTW:录制的GPS信号可能是错误的(您不应该依赖于单个信号),您可能需要查看map matching以通过许多记录点来改善这一点。

答案 2 :(得分:0)

首先,你需要至少2分。只有一点,方向毫无意义。

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

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

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

答案 3 :(得分:-1)

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