从Neo4j 3.5以后,地理坐标作为Point数据类型成为数据库模式支持的类型,另外数据库也提供基本的操作函数,例如计算两个坐标之间距离的函数distance()。更多关于Neo4j坐标类型和函数操作的介绍请参见:Spatial functions - Neo4j Cypher Manual。
因此,一些在早期APOC版本中包含的关于地理位置的过程和函数已经不再需要。APOC目前仍然提供的相关过程如下。注意,默认情况下APOC使用来自OpenStreetMap的地址服务。可以在neo4j.conf中指定使用的地图服务(OpenStreetMap或者GoogleMap):
| neo4j.conf | # 指定地图服务提供商opencage apoc.spatial.geocode.opencage.key=XXXXXXXXXXXXXXX apoc.spatial.geocode.opencage.url= apoc.spatial.geocode.opencage.reverse.url= |
如果要使用其他地图数据服务商,需要指定服务的正向和反向查询URL。可参考下面的配置(以opencage为例):
| neo4j.conf | # 可用取值有:osm, google, opencage # OpenStreetMap查询请求之间的延迟,单位为ms # GoogleMap查询请求之间的延迟,单位为ms # 访问GoogleMap的key # 访问GoogleMap的client ID apoc.spatial.geocode.google.client=xxxx # 访问GoogleMap的用户signature |
| 名称 | 说明 |
| apoc.spatial.geocode('address') | 从地理编码服务中查找位置的地理坐标,返回空或多个结果(最多100条)。 |
| apoc.spatial.geocodeonce('address') | 从地理编码服务中查找位置的地理坐标,返回空或者1个结果。 |
| apoc.spatial.reverseGeocode( | 从地理编码服务中查找经度和纬度的地址。 |
| apoc.spatial.sortPathsByDistance( | 根据路径节点上的纬度/经度属性,按地理距离对给定的路径集合进行排序。 |
// 返回给定地址的地理坐标 CALL apoc.spatial.geocode(address) YIELD location, latitude, longitude, description3. 示例 – apoc.spatial.geocode
// (1) 返回天安门广场的地理坐标。
CALL apoc.spatial.geocode('天安门广场')
YIELD location, latitude, longitude, description
RETURN *
4. 过程调用接口 – apoc.spatial.reverseGeocode
CALL apoc.spatial.reverseGeocode( latitude,longitude ) YIELD location, latitude, longitude, description5. 示例 - apoc.spatial.reverseGeocode
// (2) 返回地理坐标对应的地址信息。 CALL apoc.spatial.reverseGeocode( 39.905, 116.397 ) YIELD location, latitude, longitude, description RETURN *



