我正在做一个项目,我们需要知道街道的方向(指南针)。实际上,我们只有一个GeoPoint (lat;long and heading),我们计划使用reverseGeocoding来告诉它在哪里(哪条街?);然后我们想知道他是否走错了方向。
谷歌地图,OSM,Mapquest它们都在街道上显示一个箭头,指示它的方向。我猜他们是按时间来画的,所以他们必须知道他们的角度。这就是我想知道的(如果可能)
提前感谢!
编辑:
我在想,也许他们把街道切成小块,然后他们说“这条街道的轨迹从(lat1;lng1)到(lat2;lng2)”,这会给那个轨迹一个方向,这样他们就可以画那个箭头了。此外,并不是每条街道都是一条直线,所以它的方向不只是一条,它取决于你所在的街道的哪一部分。
发布于 2015-03-04 19:58:43
使用OpenStreetMap,可以确定当前位置的街道是否为单行道,以及用户是否正在向错误的方向行驶。
Overpass API允许在给定的bounding box (您的当前位置)内下载对象。要下载街道,您必须指定highway tag,单向街道由oneway tag标记。理想情况下,您应该阅读一些关于OSM的基本elements和tags的内容,以了解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;它检索给定边界框中带有高速公路标签的所有道路。
请注意,如果给定的边界框中包含多个高速公路,或者所有边界框都不太小,则结果可能包含多个高速公路。
发布于 2015-03-05 07:29:02
因此,您需要知道的是街道名称,以及当这是一条单行道时,司机是否走对了方向(我是否正确理解了这一点?)
要解决这个问题,您可以使用像GraphHopper这样的路由引擎,我是其中的作者;),并使用您拥有的点作为起点。
终点你可以通过简单的向量数学从起点和航向加上1到2米的距离来计算。
如果这两个点的直线距离与路线距离相似,那么他就正确地在轨道上了。如果计算出的路线长度大于直线距离的2倍,那么这条街道是单行道,他在错误的方向上行驶。请参阅this route (7米长)与this route (145米长)。作为一个很好的副作用,您还可以在说明中获得街道名称。
顺便说一句:记录的全球定位系统信号可能是错误的(你不应该依赖于单一的信号),你可以通过许多记录点来研究map matching来改善这一点。
发布于 2015-03-04 08:13:22
首先,你至少需要2分。只有一点,方向就没有意义。
一旦你有了你的2点,使用google.maps.geometry.spherical.computeHeading(point1, point2)
这里有一个很好的演示:https://developers.google.com/maps/documentation/javascript/examples/geometry-headings
顺便说一句,getHeading()用于确定拍摄当前显示的航空图像时飞机面对的方向。AFAIK,任何给定的点,如果有可用的航空图像模式,通常会有4个视图,彼此之间大约90度,但它们并不总是与基本方向一致。您可以通过调用setHeading()来更改视图。
https://stackoverflow.com/questions/28844173
复制相似问题