代码之家  ›  专栏  ›  技术社区  ›  Mr. Flibble

SQL 2008地理和几何图形-使用哪种?

  •  12
  • Mr. Flibble  · 技术社区  · 15 年前

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

    我以前从未使用过和SQL空间特性。我应该用这个吗 geography 或者 geometry 这个的数据类型?

    3 回复  |  直到 15 年前
        1
  •  16
  •   Daniel Vassallo    15 年前

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

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

    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;
    
        2
  •  6
  •   Sudhir    11 年前

    PostGIS 常见问题

    I'm all confused. Which data store should I use geometry or geography?

    简而言之:地理是一种新的数据 支持长距离传输的类型 地理--你不需要学习 如果你愿意的话,地理通常是最好的 长度,并且您拥有来自所有 一种较旧的数据类型,具有多个 支持它的功能和享受 来自第三方工具的强大支持。 如果你很舒服的话最好 正在处理本地化数据,其中 所有数据都可以放在一个空间中 进行大量的空间处理。 请参阅第8.8节PostGIS 功能支持矩阵,看看是什么 当前支持什么 不

    PostGIS和SQL Server数据库中的几何图形和地理类型遵循相同的概念,因此PostGIS常见问题解答中给出的答案适用于您的问题。

        3
  •  4
  •   ktharsis    15 年前

    很可能您需要地理类型,因为它考虑了地球的曲率。几何学更适合于“平面”的事物视图。查看本文以了解更多信息 http://www.mssqltips.com/tip.asp?tip=1847

    推荐文章