SQL 2008 地理 & 几何 - 该用哪个?

12

我正在创建一个Google地图混合程序,并使用SQL 2008。

我将在地球上拥有大量点,并希望在SQL中执行各种计算 - 例如选择包含在特定多边形内的所有点,或选择与XY距离在10km以内的所有点。

我以前从未使用过SQL空间功能。我应该使用geography还是geometry数据类型?

3个回答

16

地理信息是用于在地球上标绘点的类型。

如果您有一个存储Google Maps点的表格,就像这样:

CREATE TABLE geo_locations (
    location_id       uniqueidentifier  NOT NULL,
    position_point    geography         NOT NULL
);

那么您可以使用此存储过程填充其中的点:

CREATE PROCEDURE proc_AddPoint
    @latitude     decimal(9,6),
    @longitude    decimal(9,6),
    @altitude     smallInt
AS

DECLARE @point     geography = NULL;

BEGIN

    SET NOCOUNT ON;

    SET @point = geography::STPointFromText('POINT(' + CONVERT(varchar(15), @longitude) + ' ' + 
                                                       CONVERT(varchar(15), @latitude) + ' ' + 
                                                       CONVERT(varchar(10), @altitude) + ')', 4326)

    INSERT INTO geo_locations
    (
        location_id, 
        position_point
    )
    VALUES 
    (
        NEWID(),
        @point
    );

END

如果你想查询纬度、经度和海拔高度,只需使用以下查询格式:

SELECT
    geo_locations.position_point.Lat  AS latitude,
    geo_locations.position_point.Long AS longitude,
    geo_locations.position_point.Z    AS altitude
FROM
    geo_locations;

6

您可以按照PostGIS FAQ中提供的答案进行操作。

我很困惑,应该使用几何数据存储还是地理数据存储?

简短回答:地理数据类型是一种新的数据类型,支持长距离的测量。如果您使用地理数据类型,您不需要学习太多平面坐标系统的知识。如果您只关心距离和长度测量,并且您的数据来自全球各地,那么地理数据类型通常是最好的选择。几何数据类型是一种较旧的数据类型,有许多支持它的函数,并得到第三方工具的大力支持。如果您对空间参考系统非常熟悉,或者您正在处理所有数据都适合单个空间参考系统(SRID)的本地化数据,或者您需要进行大量的空间处理,则最好使用几何数据类型。请参阅“PostGIS函数支持矩阵”第8.8节,了解当前支持哪些功能和不支持哪些功能。

PostGIS和SQL Server中的几何和地理类型遵循相同的概念,因此在PostGIS FAQ中给出的答案适用于您的问题。


4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接