为什么我们在 SQL 数据库中有几何数据类型?

ksi*_*kar -2 postgresql datatypes spatial

  1. SQL 表中特定 SDI 数据类型的用途是什么?
  2. 它们可以表示为“(3,1)”(如果是平面上的点)VARCHAR,然后由应用程序检索并处理它们?
  3. 几何和地理数据类型有什么区别?
  4. 请在 SQL 源代码中提及 SDI 类型的应用程序,以便更好地理解。
  5. 是否有任何示例数据库(最好是 postgreSQL)来演示这些数据类型的使用,因为学习者可以使用这些数据来更好地理解它们的效用?

Kár*_*agy 5

1)目的是提供可以在Postgresql中索引和查询的数据实体(例如坐标或路径)的逻辑表示。并且 postgresql 也可以理解这种数据类型。

2)从技术上讲这是可能的,但最好将其存储为两个浮点数,以便您可以对其进行过滤。从不建议尝试超越数据库数据类型。例如,如果您将其存储为 VARCHAR,您将如何查询 ((1,3), (7,9)) 边界框中的所有数据点。这将变得非常复杂,并且在应用程序级别进行管理并不理想。

3)说起来很简单:几何数据表示一个正常的笛卡尔坐标窗格,其中维度是空间中的直线。地理是基于纬度、经度并使用大地测量计算的。当您开始谈论点之间的距离和距离之间的可变性时,差异变得更加明显。

在平面计算中,(1,1) 和 (2,2) 之间的距离与 (101,101) 和 (202,202) 相同。在大地测量中,距离变化很大取决于您离赤道有多远。

这在 gis stackoverflow 的另一个答案中得到了更详细的回答:https : //gis.stackexchange.com/questions/6681/what-are-the-pros-and-cons-of-postgis-geography-and-geometry-types

4) 例子:

create table something (
  id serial PRIMARY KEY,
  p point not null
);

insert into something (p) values (point(1,2)), (point(5,6)), (point(123,32));

select * from something where p <@ BOX(POINT(1,1), POINT(2,2));
 id |   p
----+-------
  1 | (1,2)
(1 row)
Run Code Online (Sandbox Code Playgroud)

5)我只是开始玩查询,插入和查询数据以发现这些数据类型的威力。