现在有个需求,需要处理一些地理坐标,每个坐标由经度(取值范围-180 至+180 )和纬度(取值范围-90 至+90 )定义。
但是,我用的数据库只支持单列查询,所以我不能用类似于“经度 BETWEEN 20, 30 AND 纬度 BETWEEN 10, 15”这样的条件来查询,必须把经度和纬度用一种方法算出一个结果,存到另一个列里,然后针对那个列进行查询。
不知有没有什么好的算法呢?索引列可以不必是数值型的,字符串也可。
![]() |
1
zhzy 2020-11-15 07:40:58 +08:00 via iPhone
geohash 了解一下
|
![]() |
2
MinQ 2020-11-15 07:47:51 +08:00 via Android
geohash 或者 google s2
|
3
loliordie 2020-11-15 07:47:53 +08:00 via Android
不支持 and 的话做两次查询不行么?
|
![]() |
4
beginor 2020-11-15 07:49:19 +08:00 via Android
什么数据库,不支持空间类型么?不能用 Geometry 类型么?
|
![]() |
5
lihongming OP |
![]() |
6
lihongming OP 我知道很多人会好奇什么数据库这么奇特,但客观条件就是这样,我只能用单列、基本数据类型(数字、布尔、字符串)来查询。
但本帖讨论的是算法,不是数据库本身。为避免话题失焦,就不展开讨论,也不回复各位了,谢谢。 |
![]() |
7
airqj 2020-11-15 09:03:11 +08:00 via Android
|
![]() |
8
aec4d 2020-11-15 09:22:50 +08:00 via iPhone
Geohash google s2 Uber H3
|
![]() |
9
shawndev 2020-11-15 11:08:08 +08:00
geohash
|
![]() |
10
des 2020-11-15 11:19:56 +08:00
geohash,或者自己写也行
https://www.cnblogs.com/tgzhu/p/8286616.html |
![]() |
11
SingeeKing 2020-11-15 17:36:01 +08:00
只好奇什么数据库这么…
|
![]() |
12
lihongming OP 试了一下,geohash 还是无法实现范围查找。
比如下图  SELECT blocks WHERE geohash BETWEEN 211 AND 302 我的本意是想要 211, 300, 213, 302 这四块组成的一个矩形区域,但搜索结果却是 211, 212, 213, 220, 221, 222, 223, 230, 231, 232, 233, 300, 301, 302 这十四块区域。 |