提问一下关于地理位置问题


定义一个多边形范围,然后查询这个范围内的所有数据,有人遇到这个需求吗?
要实现这样的需求需要怎么存数据呢?计划是打算在nebula数据库里存所有的县的一个坐标,然后前端传过来一个多边形坐标,查询在多边形坐标内的所有县节点!

可以的。 nebula 提供了基于 S2 的 geography 数据处理能力,可以覆盖基本的 geography 场景。
对于你的需求,只需要用 geography 数据类型进行建模,通过 ngql 来实现业务查询即可。比如将 县 的坐标定义为 POINT 类型,然后用以下语句查询某经纬度范围内的所有县:

MATCH (v:county) 
WHERE ST_DWITHIN(v, ST_GeogFromText("POLYGON((100.4 34.3,113.8 34.3,113.8 36.6,100.4 36.6 ,100.4 34.3)), 0) 
RETURN v.county.name

具体查看下官方文档。

3 个赞

我感觉这个似乎更合适?
MATCH (v:city)
WHERE ST_CoveredBy(v.city.geo, POLYGON(100.4 34.3,113.8 34.3,113.8 36.6,100.4 36.6 ,100.4 34.3))
RETURN v.county.name

city是县;
具体可以参考:


貌似返回结果报错了

好了好了,我的问题,找到错误了

来来,说下原因是啥(万一以后有其他人也遇到相似的报错 :face_with_peeking_eye:

注意括号,放错位置了…
现在有个新问题:
查不全数据



什么原因呢?

是不是索引是插入了一部分数据之后创建的,这种情况下需要执行一次索引重建

1 个赞

是的,有建立索引的操作,但是我执行索引重建之后也没有办法查出来…这个问题是所有类型都会存在还是只有地理坐标类型存在这个问题呢

不应该有这个问题,你这个 tag 上创建了几个索引?

就只有一个索引

奇怪,可以看看 PROFILE MATCH (v:only_point) RETURN v 的结果么?



你看下这三张图片

求助 @critical27

麻烦问下,你的 explorer 和 nebula 各自的版本号多少?

image

nebula 是最新版本

最新是 master?还是 v3.3.0?你 show hosts graph 看下版本号


3.3.0

我把only_point tag 删了然后就能执行,就是报only_point类型找不到

贴下DESC TAG only_pointEXPLAIN MATCH (v:only_point) RETURN v的结果 现在不好说是不是跟地理的有关 可能还得调日志级别