最近在研究tile38地理空间数据库,下面来介绍一下其中SET命令如何在tile38数据库中使用:
语法
SET key id [FIELD name value ...] [EX seconds] [NX|XX] (OBJECT geojson)|(POINT lat lon z)|(BOUNDS minlat minlon maxlat maxlon)|(HASH geohash)|(STRING value) 复制代码
这个SET
语法特别像redis中的hash数据结构的语法,key
代表一个大的group,里面可以有很多数据对象,每一个数据对象都对应一个id
,所以语法就以SET key id
开头。
id
后面都属于该数据对象的具体属性,比如我们可以在数据对象中携带自定义业务字段,比如高度:
SET shanghai pearlOfTheOrient FIELD height 468 POINT 121.506377 31.245105 复制代码
上面的语法解析下来就是设置shanghai[上海] pearlOfTheOrient[东方明珠]的经纬度,顺便把高度也放在这个点坐标里面
。
我们也可以使用多个FIELD
字段,把需要的多个业务字段都放在里面。这个FIELD
字段可以在将来作为查询条件找出符合业务要求的数据。
可选参数
EX
表示这条数据多久过期,单位为秒。NX
表示只有数据库中没有这个id
才会设置进去,否则不设置。这个就是创建的作用。XX
和NX
相反,只有数据库中有这个id
才会设置进去,其实就是更新的作用。
数据类型
OBJECT
、POINT
、BOUNDS
、HASH
和STRING
分别表示不同的数据类型:
OBJECT
一般通过一组经纬度坐标来表示点、线、面
点:
SET key id OBJECT {"type":"Point","coordinates":[-112.2693,33.5123]} 复制代码
- 线:
SET key id OBJECT {"type":"LineString","coordinates":[[70.3125,56.9449741808516],[94.921875,60.58696734225869]]} 复制代码
- 面:
SET key id OBJECT {"type":"Polygon","coordinates":[ [ [ 39.867514, 116.577703 ], [ 39.867757, 116.582268 ], [ 39.868634, 116.578497 ], [ 39.867514, 116.577703 ] ] ]} 复制代码
- 需要注意的是,在
OBJECT
里面,坐标位置顺序是[纬度,经度];如果是画多边形,那么起始位置和结束位置一定是同一个位置。 POINT
最简单,就提供一个经纬度坐标即可:
SET key id POINT -112.2693 33.5123 复制代码
- 另外
POINT
还允许额外有一个z
参数,我们可以使用海拔或者时间戳来填补这个参数:
SET key id POINT -112.2693 33.5123 40 复制代码
- 这个
z
参数也可以作为查询条件。 BOUNDS
就是设置一个矩形,一般创建一个矩形只需要两个点即可,一个点是左下角,一个点是右上角:
SET key id BOUNDS 30 -110 40 -100 复制代码
HASH
是一种使用短字母数字字符串表示位置(世界任何地方)的便捷方式,使用较长的字符串可以获得更高的精度。可查看相关资料
SET props area1 HASH 9tbnwg 复制代码
- 小伙伴可以通过这个网站转换geohash:csxgame.top/#/
STRING
可以用来设置一些原始字符串,字符串类型的值可以是纯文本或一系列原始字节