移动端数据库开发空间索引点滴

本文介绍了SQLite默认配置下的局限性,并提供了两种增强空间索引的方法:交叉编译和使用spatialite-android。此外,还深入探讨了GeoHash算法原理及其在地理信息系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       默认sqlite3 不够用,默认不支持空间索引,有2种方法可以做R树。一种交叉编译,另外一种使用强大的

spatialite-android.


     1 sqlite3 有2种方法可用,默认是存储文件,另外可以作为内存数据库,就是运行加载数据,关闭程序数据全毁。
     2 后者支持强大的R树功能,还不错,尽管光阴荏苒,但算法还不落后。csdn spatialite-android-so库这个就是的。0分可下载。
   
    折磨2个小时,遇到好多奇特问题。咬牙解决。含糊不清如下:
1  5.0以上android不再有过时的google map overlay等。类库已经找不到,全部注释。
2  有一个3个包的android程序,需要有时间搞清楚结构以及依赖,可以把jar包为何打包失败搞清楚。
3  数据类的封装方法可以小花时间。

https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial
http://geopaparazzi.github.io/geopaparazzi/


         空间索引进阶。
1 多维空间索引有最新进展,可以支持3维 4维(foreign table);
2 geohash 采用哈夫曼编码,将2维---》1维,实质就是4叉树。这一点清晰,分形(curve)方法Z曲线   (wiki百科This can also be seen as a consequence of relying on the  Z-order curve  (which could more appropriately be called an N-order visit in this case) for ordering the points, as two points chttp://hankesi2000.iteye.com/blog/1344914lose-by might be visited at very different times. However, two points with a long common prefix will be close-by.)

如图所示,我们将二进制编码的结果填写到空间中,当将空间划分为四块时候,编码的顺序分别是左下角00,左上角01,右下脚10,右上角11,也就是类似于Z的曲线,当我们递归的将各个块分解成更小的子块时,编码的顺序是自相似的(分形),每一个子快也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。(这段和下段来自:zhanlinjun)  这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000,编码是相邻的,但距离相差很大。

  

  除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。为什么GeoHash不选择Hilbert空间填充曲线呢?可能是Peano曲线思路以及计算上比较简单吧,事实上,Peano曲线就是一种四叉树线性编码方式。

其中val可以认为是下一次的中间值,而err是误差,通过mid+err=val,err当前值是上一次误差的一半。 这样,取出图中的bit位:1011 1100 1001,同样的方法,将经度(范围-180到180)算出来为 0111 1100 0000 0。 缩小范围,一般最多缩小13次就可以了(经纬度的二进制位相加最多25位,经度13位,纬度12位)。这时的中间值,将跟给定的值最相近。 下面是误差计算方法:

互联网GeoHash算法主要针对的是经纬度系统,所以其算法中的编码范围、编码精确度都相对固定。范围为[-90,90],[-180,180]。 

在纬度相等的情况下:

经度每隔0.00001度,距离相差约1米;

每隔0.0001度,距离相差约10米;

每隔0.001度,距离相差约100米;

每隔0.01度,距离相差约1000米;

每隔0.1度,距离相差约10000米。 

在经度相等的情况下:

纬度每隔0.00001度,距离相差约1.1米;

每隔0.0001度,距离相差约11米;

每隔0.001度,距离相差约111米;

每隔0.01度,距离相差约1113米;

每隔0.1度,距离相差约11132米。

Geohash,如果geohash的位数是6位数的时候,大概为附近1千米。

参考:http://www.cnblogs.com/naaoveGIS/archive/2016/01/27/5164187.html

http://hankesi2000.iteye.com/blog/1344914



1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值