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

时间:2009-12-08 15:59:38

标签: sql-server-2008 geometry geospatial geography

我正在创建Google地图mashup并使用SQL 2008。

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

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:6)

您可以按照PostGIS常见问题

中给出的答案进行操作

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

  

简答:地理是一种新数据   支持远程的类型   距离测量。如果你使用   地理 - 你不需要学习   很多关于平面坐标系。   如果你所有人,地理通常是最好的   关心的是测量距离和   长度,你有所有的数据   全世界。几何数据类型是   较旧的数据类型,有很多   支持它并享受的功能   来自第三方工具的大力支持。   如果你很舒服,这是最好的   使用空间参考系统或您   正在处理本地化数据   您的所有数据都适合单个空间   参考系统(SRID),或者您需要   做很多空间处理。   请参见第8.8节“PostGIS   功能支持矩阵“看看是什么   目前支持的是什么   不

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

答案 2 :(得分:4)

您很可能想要地理类型,因为它可以解释地球的曲率。几何更像是对事物的“平面”观点。查看此文章了解更多信息 http://www.mssqltips.com/tip.asp?tip=1847