Skip to content
📖0 阅读·🤍0 点赞

ES常用空间数据类型故事版

  • geo_point:geo_point类型用于表示纬度和经度点,即地理坐标点。这种类型适用于存储地理位置信息,比如城市的经纬度坐标。
  • geo_shape:geo_shape类型用于表示复杂的空间形状,例如多边形、线条等。这种类型适用于存储地理区域的边界信息,比如国家的边界、地图上的区域等。
  • point:point类型表示任意的笛卡尔点,即平面上的点。这种类型适用于存储二维空间中的点坐标。
  • shape:shape类型表示任意的笛卡尔几何,即平面上的几何形状。这种类型适用于存储二维空间中的复杂几何形状。

与Redis的GEO数据类型相比,Elasticsearch的空间数据类型在功能和用途上有一些区别:

  • Redis的GEO数据类型主要用于存储地理位置信息和进行地理位置相关的查询,比如查找附近的位置、计算距离等。而Elasticsearch的空间数据类型除了能够存储地理位置信息外,还可以存储和处理更复杂的空间几何数据,比如多边形、几何形状等。
  • Elasticsearch的空间数据类型适用于存储和检索更复杂的地理空间数据,可以进行更灵活和精确的空间查询和分析。而Redis的GEO数据类型主要用于简单的地理位置存储和查询,功能相对简单。 好的,这次我们把数字村的故事扩展到更广阔的天地!村民们不再满足于记录数字和文本,开始需要描绘位置、形状和疆域。于是,村里成立了空间规划局,下设几个部门,专门处理各种空间信息。

故事:数字村的空间规划局

随着数字村的发展,村民们需要记录店铺的位置、划分土地边界、甚至设计建筑图纸。为了处理这些与“空间”和“形状”相关的信息,村里成立了功能强大的空间规划局

规划局里有几位专家,他们各自擅长处理不同类型的空间数据。有趣的是,隔壁的Redis小镇也有一位处理地理位置的GEO专员,我们也会顺便对比一下他的工作方式。

  1. 经纬度坐标员 (geo_point) - 表示地理坐标点(纬度和经度)

    • 专家: 点先生
    • 招牌: “一个点,定乾坤!” (存储单个地理坐标)
    • 做什么:
      • 点先生只做一件事:精确地记录地球表面上的一个点。他用纬度 (latitude)经度 (longitude) 这两个坐标来唯一确定一个位置。
    • 记录什么:
      • 面包店的精确位置{ "lat": 40.7128, "lon": -74.0060 } (纽约市坐标)
      • 外卖员的实时位置
      • 地震的震中位置
    • 能回答什么问题(查询):
      • 附近搜索:帮我找到距离我当前位置1公里内的所有咖啡馆。
      • 距离计算:从我家到火车站直线距离有多远?
      • 边界框筛选:找出位于这个矩形区域内的所有加油站。
    • 特点: 专门处理地球地理上的
  2. 地理形状画师 (geo_shape) - 表示复杂的地理形状(多边形、线条等)

    • 专家: 形女士
    • 招牌: “勾勒山河,描绘疆界!” (存储复杂地理区域)
    • 做什么:
      • 形女士比点先生厉害,她不只是记录点,而是能记录复杂的地理形状。她使用一种叫 GeoJSON 的特殊“画法”来描绘形状。
    • 记录什么:
      • 数字村的边界(一个不规则的多边形)。
      • 村里的主干道(一条线串)。
      • 中心公园的轮廓(一个多边形)。
      • 一片由多个岛屿组成的区域(多重多边形)。
    • 能回答什么问题(查询):
      • 形状相交:这条规划的新公路会穿过我们的自然保护区吗?(判断线与多边形相交)
      • 点面包含:这个建筑工地是否在批准的开发区范围内?(判断点是否在多边形内)
      • 形状包含:这个行政区是否完全包含了那个湖泊?(判断形状包含关系)
    • 特点: 专门处理地球地理上的复杂形状(面、线、点集)。使用球面几何计算,考虑地球曲率,非常精确。
  3. 平面坐标员 (point) - 表示任意的平面笛卡尔点

    • 专家: 平小姐
    • 招牌: “纸上谈兵,精确制图!” (存储二维平面坐标点)
    • 做什么:
      • 平小姐的工作和点先生 (geo_point) 很像,但有一个关键区别:她不关心地球是圆的!她只在一个抽象的二维平面上工作。这个平面可以是一张地图、一张设计图、一个游戏画面,或者任何笛卡尔坐标系。
    • 记录什么:
      • 一张网页设计图上一个按钮的坐标 (x, y)。
      • 一个2D游戏中一个游戏角色的屏幕坐标。
      • 一张室内平面图上某个插座的位置。
    • 特点: 处理任意平面上的。计算的是平面距离(直线距离),而不是地球表面的弧长。
  4. 平面形状画师 (shape) - 表示任意的平面笛卡尔几何形状

    • 专家: 莎先生
    • 招牌: “尺规作图,几何之美!” (存储二维平面几何形状)
    • 做什么:
      • 莎先生是形女士 (geo_shape) 在平面领域的对应专家。他在二维平面上描绘复杂的几何形状。
    • 记录什么:
      • 一个集成电路板的布线图(复杂的多边形和线)。
      • 一个CAD设计图中一个零件的轮廓。
      • 一个数学函数图像所围成的区域。
    • 特点: 处理任意平面上的复杂形状。使用平面几何计算,速度快,但只适用于不考虑地球曲率的场景。

番外篇:数字村 vs Redis小镇的空间专家

  • Redis小镇的GEO专员

    • 职责:他有点像我们村的点先生 (geo_point),但功能更单一。他主要就是一个高效的地址簿
    • 擅长
      1. 存储:快速记录一个名字(如“中央广场”)和对应的一个坐标。
      2. 附近搜索:非常快地找出某个点附近N米内的所有地点。这是他最拿手的!
      3. 距离计算:计算两个地点间的距离。
    • 特点极快(基于内存),但功能单一。他只能处理,无法处理复杂的形状(如多边形边界)。他更像一个专业的“周边查找工具”。
  • 数字村空间规划局的综合优势

    • 功能全面:我们不仅有点先生(类似Redis GEO),还有能处理复杂边界和区域的形女士、能处理抽象平面图形的平小姐莎先生
    • 查询分析强大:除了简单的附近搜索,我们支持复杂的空间关系判断(相交、包含、within等),并能将空间查询与Elasticsearch强大的全文检索、过滤、聚合分析结合。
    • 数据持久化:数据存储在磁盘上,适合海量地理空间数据的存储和复杂分析。

故事总结:

选择哪位空间专家,取决于你的场景:

  • 处理真实世界的地理位置点(如店铺、设备定位)?找经纬度坐标员 (geo_point)。如果只需要极快的附近搜索,隔壁Redis小镇的GEO专员也是个好选择。
  • 处理真实世界的复杂地理区域(如国界、电子围栏)?必须找地理形状画师 (geo_shape)
  • 处理抽象平面上的点和形状(如图像坐标、游戏画面、CAD图纸)?找平面坐标员 (point)平面形状画师 (shape)

数字村的空间规划局,因其功能的全面性和强大的分析能力,成为了处理复杂空间数据的首选!而Redis的GEO则因其极致的简单和速度,在特定的“附近的人/地点”场景中闪闪发光。