【发布时间】:2012-08-31 04:01:57
【问题描述】:
我正在开发一个安卓导航应用。我想在用户越野时提示用户。那么,如果我有一个 GPS Lat/Lng 点,是否可以确定该点是否位于道路上?是否有任何 API 支持此类检查?这通常在所有道路上进行,而不是在具有指定路径/多段线的情况下进行。
【问题讨论】:
-
越野是什么意思?问题是道路是用线表示的,而线没有宽度。如果汽车在路上有两个轮子,在肩膀上有两个轮子,它是越野吗?您可能需要考虑一个特定大小的缓冲区,然后检查代表车辆的点是否在其中。
-
@Marcelo,道路用线表示对吗?那么如何判断一个坐标是否在那条线上呢?
-
想想几何!如果线条没有宽度,则该点必须在线上 100% 才能为您提供数字匹配。如果距离只有 1 毫米,您将找不到匹配项,但 1 毫米对于汽车来说微不足道。您可以将小数四舍五入并更接近,但这样做实际上是在考虑我在第一条评论中建议的缓冲区。
-
@Marcelo,我同意缓冲区的想法,但仍然如何检查它是否在公路线上?
-
如果您使用缓冲技术和启用空间的数据库(如 PostgreSQL/PostGIS),那么您可以使用内置几何函数在服务器端执行检查并传递结果到您的应用程序。参见例如函数 ST_Within(geometry A, geometry B);这里:postgis.refractions.net/documentation/manual-1.4/ST_Within.html - 几何 A 将是代表车辆的点,几何 B 将是缓冲道路。
标签: android google-maps android-maps