12

我正在创建一个谷歌地图混搭并使用 SQL 2008。

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

我以前从未使用过 SQL 空间功能。我应该为此使用geographyor数据类型吗?geometry

4

3 回答 3

16

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

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

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;
于 2009-12-08T16:46:00.323 回答
6

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

我都很困惑。我应该使用几何或地理哪个数据存储?

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

The geometry and geography types in both databases, PostGIS and SQL Server, follow the same concept, so the answer given in the PostGIS FAQ is applicable to your problem.

于 2010-01-25T00:40:22.770 回答
4

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

于 2009-12-08T16:15:44.083 回答