在 Android 和光线投射中存储自定义地图多边形的最佳技术
Best technique for storing custom map polygons in Android and ray casting
我是 Android 的新手,我正在尝试开发一个应用程序来识别用户的位置是在某个州的给定区域内还是外部。我的方法是获取用户的 latlng 并使用光线投射来识别他们在哪个区域内(它们必须在 1 内)。我所在的地区最好等同于州立公园线,但 Google 在 Google 地图中没有这些(而且它们对于地理围栏来说太不规则了)。因此,我创建了客户多边形。我不是在为代码苦苦挣扎,而是在为处理数据的最佳方式苦苦挣扎。
我应该如何存储和访问用于光线投射的多边形数据?我正在采用将多边形存储在 XML 文件中的方法,但我担心解析 XML 和 运行 向上投射的光线可能需要花费时间和处理能力给定状态下的 30 个多边形。我的多边形非常复杂,一个州的 XML 文件超过 4MB。我的多边形只需要读取,不需要写入,因为它们会随应用程序一起提供。
我认为最好的选择是将多边形存储在地理数据库中。到目前为止,我找到的最佳解决方案是 SpatiaLite,它构建在 SQLite 上,在 Android.
上运行得非常好
使用这种方法,您可以将多边形存储在数据库中,并查询哪些多边形与给定的 LatLng(点)相交。查询将如下所示(未测试):
select * from polygons_table where st_intersects(Geometry, MakePoint(longitude, latitude, 4326));
请注意,我使用 4326 作为 SRID,因为我假设您会将多边形存储在 WGS84 中。
Here 您可以找到 SpatiaLite 3.0.0-BETA SQL 函数参考列表.
我是 Android 的新手,我正在尝试开发一个应用程序来识别用户的位置是在某个州的给定区域内还是外部。我的方法是获取用户的 latlng 并使用光线投射来识别他们在哪个区域内(它们必须在 1 内)。我所在的地区最好等同于州立公园线,但 Google 在 Google 地图中没有这些(而且它们对于地理围栏来说太不规则了)。因此,我创建了客户多边形。我不是在为代码苦苦挣扎,而是在为处理数据的最佳方式苦苦挣扎。
我应该如何存储和访问用于光线投射的多边形数据?我正在采用将多边形存储在 XML 文件中的方法,但我担心解析 XML 和 运行 向上投射的光线可能需要花费时间和处理能力给定状态下的 30 个多边形。我的多边形非常复杂,一个州的 XML 文件超过 4MB。我的多边形只需要读取,不需要写入,因为它们会随应用程序一起提供。
我认为最好的选择是将多边形存储在地理数据库中。到目前为止,我找到的最佳解决方案是 SpatiaLite,它构建在 SQLite 上,在 Android.
上运行得非常好使用这种方法,您可以将多边形存储在数据库中,并查询哪些多边形与给定的 LatLng(点)相交。查询将如下所示(未测试):
select * from polygons_table where st_intersects(Geometry, MakePoint(longitude, latitude, 4326));
请注意,我使用 4326 作为 SRID,因为我假设您会将多边形存储在 WGS84 中。
Here 您可以找到 SpatiaLite 3.0.0-BETA SQL 函数参考列表.