Neo4j的地理空间特性

很多数据库都有地理空间特性,例如mysql在5.0以上就有,es也有。

从Neo4j 3.0版本开始就内置了有限的空间支持功能。默认支持点和距离。假定点设置了经纬度属性值,就可计算出两点之间的距离。先让我们创建塔,并养成好习惯定义相应的约束:

CREATE CONSTRAINT ON (t:Tower) ASSERT t.name IS UNIQUE
CREATE (paris:Tower {name:"Eiffel Tower",country:"FRA",latitude:48.82322,longitude:2.29323})

CREATE (guangzhou:Tower {name:"Guangzhou Tower",country:"CN",latitude:68.82322,longitude:128.29323})

可通过下面查询语句获得埃菲尔铁塔和其他塔之间的距离:

MATCH (et:Tower {name:'Eiffle Tower'}), (other:Tower)
RETURN et.name, other.name, round(distance(point(et),
point(other))/10)/100 as dist_km

这里的关键是点(point),一个地理位置点是用图数据库中的一个带有纬度和经度属性的节点进行表示,distance函数是通过两点位置计算出来的。Round函数的作用是舍入到最近的整数,使用小技巧(/10/100),可将数值保留到小数点后两位

可通过以下方式查询APOC的空间过程列表:

CALL apoc.help("spatial")

APOC提供了地理编码的可能性,它将地址转换成空间坐标并按距离对路径进行排序。虽然它只是将地址映射到坐标,但不只是两个浮点数,地理编码并不容易,大量工程师在通过代码进行地理编码的变换。存储汽车行走时拍摄的照片需要消耗大量存储资源,识别图片中的数字需要消耗大量的CPU计算资源。因此,首选是不要自己来处理地理编码,而是依赖一个可被APOC透明调用的提供方。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注