地理位置

地理位置(GEOGRAPHY)是由经纬度构成的表示地理空间信息的数据类型。Nebula Graph当前支持简单地理要素中的Point、LineString和Polygon三种地理形状。支持SQL-MM 3中的部分核心geo解析、构造、格式设置、转换、谓词和度量等函数。

GEOGRAPHY

GEOGRAPHY的基本类型是点,由经纬度确定一个点,例如"POINT(3 8)"表示经度为,纬度为。多个点可以构成线段或多边形。

类型示例说明
Point“POINT(3 8)”点类型
LineString“LINESTRING(3 8, 4.7 73.23)”线段类型
Polygon“POLYGON((0 1, 1 2, 2 3, 0 1))”多边形类型

示例

geo相关函数请参见geo函数

  1. //创建Tag,允许存储任意形状地理位置数据类型。
  2. nebula> CREATE TAG any_shape(geo geography);
  3. //创建Tag,只允许存储点形状地理位置数据类型。
  4. nebula> CREATE TAG only_point(geo geography(point));
  5. //创建Tag,只允许存储线段形状地理位置数据类型。
  6. nebula> CREATE TAG only_linestring(geo geography(linestring));
  7. //创建Tag,只允许存储多边形形状地理位置数据类型。
  8. nebula> CREATE TAG only_polygon(geo geography(polygon));
  9. //创建Edge type,允许存储任意形状地理位置数据类型。
  10. nebula> CREATE EDGE any_shape_edge(geo geography);
  11. //创建存储多边形地理位置的点。
  12. nebula> INSERT VERTEX any_shape(geo) VALUES "103":(ST_GeogFromText("POLYGON((0 1, 1 2, 2 3, 0 1))"));
  13. //创建存储多边形地理位置的边。
  14. nebula> INSERT EDGE any_shape_edge(geo) VALUES "201"->"302":(ST_GeogFromText("POLYGON((0 1, 1 2, 2 3, 0 1))"));
  15. //查询点103的属性geo。
  16. nebula> FETCH PROP ON any_shape "103" YIELD ST_ASText(any_shape.geo);
  17. +----------+---------------------------------+
  18. | VertexID | ST_ASText(any_shape.geo) |
  19. +----------+---------------------------------+
  20. | "103" | "POLYGON((0 1, 1 2, 2 3, 0 1))" |
  21. +----------+---------------------------------+
  22. //查询边201->302的属性geo。
  23. nebula> FETCH PROP ON any_shape_edge "201"->"302" YIELD ST_ASText(any_shape_edge.geo);
  24. +---------------------+---------------------+----------------------+---------------------------------+
  25. | any_shape_edge._src | any_shape_edge._dst | any_shape_edge._rank | ST_ASText(any_shape_edge.geo) |
  26. +---------------------+---------------------+----------------------+---------------------------------+
  27. | "201" | "302" | 0 | "POLYGON((0 1, 1 2, 2 3, 0 1))" |
  28. +---------------------+---------------------+----------------------+---------------------------------+
  29. //为geo属性创建索引并使用LOOKUP查询。
  30. nebula> CREATE TAG INDEX any_shape_geo_index ON any_shape(geo);
  31. nebula> REBUILD TAG INDEX any_shape_geo_index;
  32. nebula> LOOKUP ON any_shape YIELD ST_ASText(any_shape.geo);
  33. +----------+-------------------------------------------------+
  34. | VertexID | ST_ASText(any_shape.geo) |
  35. +----------+-------------------------------------------------+
  36. | "103" | "POLYGON((0 1, 1 2, 2 3, 0 1))" |
  37. +----------+-------------------------------------------------+

最后更新: October 22, 2021