【问题标题】:Best technique for storing custom map polygons in Android and ray casting在 Android 和光线投射中存储自定义地图多边形的最佳技术
【发布时间】:2016-02-27 04:08:11
【问题描述】:

我对 Android 还很陌生,正在尝试开发一个应用程序来识别用户的位置是在一个州的给定区域之内还是之外。我的方法是获取用户的 latlng 并使用光线投射来识别他们在哪个区域内(他们必须在 1 内)。我的地区最好等同于州立公园线,但谷歌在谷歌地图中没有这些(而且它们对于地理围栏来说太不规则了)。因此,我创建了客户多边形。我不是在为代码而苦苦挣扎,而是在为处理数据的最佳方式而苦苦挣扎。

我应该如何存储和访问多边形数据以进行光线投射?我正在采用将多边形存储在 XML 文件中的方法,但我担心在给定状态下解析 XML 并在多达 30 个多边形上运行光线投射可能需要时间和处理能力。我的多边形足够复杂,以至于一种状态的 XML 文件超过 4MB。我的多边形只需要读取而不是写入,因为它们会随应用程序提供。

【问题讨论】:

    标签: android xml google-maps raycasting


    【解决方案1】:

    我认为存储多边形的最佳选择是地理数据库。到目前为止,我发现的最佳解决方案是 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 函数参考列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多