geo实现方案
实现 方案 Geo
2023-09-14 08:58:46 时间
1、数据库内在支持GIS(地理信息系统)
MySQL: 目前只有MyISAM引擎是支持GIS的,Innodb在5.7版本中才支持空间索引。MyISAM这个引擎
不支持事务、外键,而且是表锁。适合读为主,不适合写操作。而且如果单独建一张表的话,那每次都要与
现有的表联合查询返回tag的地点,效率多少会有些影响,而且也不确定Django是否支持Innodb与myISAM
引擎联合查询。(目前用的Innodb引擎)
其它数据库:MongoDB和postgresql都是支持GIS的,前者没有仔细研究,后者在GIS方面很强大,
但目前还不考虑切换数据库。
2、第三方app或框架
GeoDjango:它是一个支持GIS存储和查询的Django衍生项目。不过这个框架太重了,内容太多,简单
熟悉了一下,它的功能还是很强大的。但在数据库层,它也是需要数据库支持GIS的。
数据库全文检索:用的比较多的是lucene和sphinx工具,熟悉这两个工具的时间成本太高了,而且从性能
上来说和自己用mysql查询差不多。
3、自己开发
考虑有两种方案,
(1) 数据库保存地点的经纬度,查找附近的地点时,用球面两点间距离公式计算并排序。
为了提高效率,还可以将其保存成存储过程。
(2)将经纬度转为一维数据geohash,这样可以在geohash上用加索引,而且用like语句
可实现查询。不过要至少调用6条like语句,而且不能实现任意距离的搜索,只能搜索几个距离
范围内的地点。
目前,公司负责开发的产品需求并不需要精确搜索,从时间成本、性能两方面考察这些方案,最好的两个方案是
比较合适的。最终选定geohash方案
相关文章
- mybatis 使用resultMap实现表间关联
- ssm使用全注解实现增删改查案例——applicationContext.xml
- Java实现 LeetCode 479 最大回文数乘积
- Java实现无向图的欧拉回路判断问题
- Java实现荷兰国旗问题
- Java实现 蓝桥杯VIP 算法训练 和为T
- Java实现 蓝桥杯VIP 基础练习 报时助手
- 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案
- 实现RTSP摄像机进行网页直播和微信直播的技术方案:EasyNVR自动更新方法
- Java动态代理之JDK实现和CGlib实现
- flask实现token方案
- 几种java线程池的实现算法分析
- SAP UI5控件aggregation的一个模拟实现
- Atitit 数据存储实现方案总结 提升开发效率 不要一股脑把数据塞到远程关系型数据库,会造成开发效率的降低。。根据不同的要求,选择最简化快速的方案 目录 1. 选择存储原则2 1.1. 简单快
- 【springboot系列】Spring Boot 实现接口幂等性的 4 种方案
- Python每日一练——第18天:实现斐波那契数列的三种方法
- 含分布式电源的配电网可靠性评估研究(Matlab代码实现)
- 【多旋翼无人机】非对称多旋翼无人机线性控制的建模、仿真与实现【多旋翼无人机的设计、开发、建模与仿真,比例积分微分控制、线性二次高斯控制和模型预测控制等控制方案】(Matlab代码实现)
- 系统中生成编号/单号问题的实现方案讨论
- python实现md5
- Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
- PostgreSQL的学习心得和知识总结(一百二十)|语法级自上而下完美实现MySQL数据库的 update/delete limit 的实现方案
- PostgreSQL的学习心得和知识总结(一百一十六)|关于PostgreSQL数据库开源作业调度扩展 pg_cron 默认GMT时区修改 的实现方案(提交到Git仓库)
- PostgreSQL的学习心得和知识总结(五十九)|内核级自上而下完美实现PostgreSQL数据库 新增表权限实现列数据无权访问 的实现方案
- RequestDispatcher实现请求转发