【问题标题】:Know about spatial database concept in SQL Server了解 SQL Server 中的空间数据库概念
【发布时间】:2016-05-19 09:32:49
【问题描述】:

我刚开始使用空间数据库。我有一个表,其中包含 LatitudeLongitude 列,数据类型为 double

现在我想在我的表中添加一个数据类型为geometry 的列,以便我可以使用该表进行空间查询。我想将数据插入到包含该点的列(来自LatitudeLongitude 列。)。

我该怎么做?

【问题讨论】:

  • 试试这个以获得更多信息:stackoverflow.com/questions/11245645/…
  • 我必须使用 Geography @EricYeoman
  • 啊,虽然您的问题确实说明了几何,但 SQL Server 中同时存在几何和地理数据类型 :)

标签: sql-server sql-server-2012


【解决方案1】:

如果是我,我会使用持久化计算列。

create table G(
   [ID] int identity primary key clustered,
   [longitude] float, 
   [latitude] float, 
   [point] as geography::Point(latitude, longitude, 4326) persisted
)

这样一来,你只需要维护经纬度列,点列就会自动更正。

【讨论】:

  • 谢谢..但我已经存在该表只是想添加新列。
  • 这只是一个例子。您可以添加我在上面定义的持久列,就像添加任何其他列一样。
【解决方案2】:

您可能应该将这些点存储为 sql server 地理而不是 sql server 几何。 SQL Server 地理将为您提供更准确的距离和面积计算,因为它考虑了地球的球形形状。 SQL 几何是平面几何,对于纬度和经度尤其不利,因为距离等的单位是度!

在数据类型 geog 的表中创建一个名为(比如)geog 的列。 因为所有数据都是点,所以很容易更新表格:

Update MyTable set geog = geography::Point(latitude, longitude, 4326)

MSDN

这里的 4326 是您使用的空间参考系统。 4326 是 WGS84 空间参考系统的代码,用于全球经纬度坐标。

【讨论】:

  • 感谢您的快速帮助。现在,如果我想找出 200 米之间的点。我怎么能找到这个?
  • 如果您的意思是要在表中找到距另一个点变量(此处称为 testpoint)200m 以内的点,请使用 STDistance。例如:声明@testpoint geography = geography::Point(..... select * from mytable where geog.STDistance(@testpoint)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
相关资源
最近更新 更多