SQL 2008地理和几何 - 使用哪些?

Mr.*_*ble 12 geometry geography geospatial sql-server-2008

我正在创建一个Google地图mashup并使用SQL 2008.

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

我之前从未使用过SQL空间功能.我应该使用geographygeometry数据类型吗?

Dan*_*llo 16

地理是用于绘制地球上的点的类型.

如果您有一个存储谷歌地图点的表格,如下所示:

CREATE TABLE geo_locations (
    location_id       uniqueidentifier  NOT NULL,
    position_point    geography         NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

然后你可以用这个存储过程填充它的点:

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
Run Code Online (Sandbox Code Playgroud)

然后,如果要查询纬度,经度和海拔高度,只需使用以下查询格式:

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;
Run Code Online (Sandbox Code Playgroud)


mlo*_*kot 6

您可以按照PostGIS FAQ中给出的答案进行操作

我很困惑.我应该使用几何或地理位置的数据存储?

简答:地理是一种支持远程距离测量的新数据类型.如果使用地理 - 您不需要了解平面坐标系.如果您关心的只是测量距离和长度,并且您拥有来自世界各地的数据,那么地理位置通常是最好的.Geometry数据类型是一种较旧的数据类型,它具有许多支持它的功能,并且受到第三方工具的大力支持.如果您对空间参考系统非常熟悉,或者您正在处理所有数据都适合单个空间参考系统(SRID)的本地化数据,或者您需要进行大量空间处理,那么它是最好的.请参阅第8.8节"PostGIS功能支持矩阵"以查看当前支持的内容和不支持的内容.

PostGIS和SQL Server这两个数据库中的几何和地理类型遵循相同的概念,因此PostGIS FAQ中给出的答案适用于您的问题.