Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL 2008地理和几何图形-使用哪种?_Sql Server 2008_Geometry_Geospatial_Geography - Fatal编程技术网

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

Sql server 2008 SQL 2008地理和几何图形-使用哪种?,sql-server-2008,geometry,geospatial,geography,Sql Server 2008,Geometry,Geospatial,Geography,我正在创建一个GoogleMapMashup并使用SQL2008 我将在地球上有大量的点,并希望在SQL中对它们执行各种计算-例如选择特定多边形中包含的所有点,或选择XY 10km范围内的所有点 我以前从未使用过和SQL空间特性。我应该使用地理数据类型还是几何数据类型?您很可能需要地理数据类型,因为它考虑了地球的曲率。几何学更适合于平面视图。查看本文以了解更多信息 地理是用于在地球上绘制点的类型 如果您有一个存储谷歌地图点的表格,如下所示: CREATE TABLE geo_locations

我正在创建一个GoogleMapMashup并使用SQL2008

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


我以前从未使用过和SQL空间特性。我应该使用地理数据类型还是几何数据类型?

您很可能需要地理数据类型,因为它考虑了地球的曲率。几何学更适合于平面视图。查看本文以了解更多信息

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

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

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;

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

简而言之:地理是一种新的数据 支持长距离传输的类型 距离测量。如果你使用 地理-你不需要学习 很多关于平面坐标系的知识。 如果你愿意的话,地理通常是最好的 关心的是测量距离和距离 长度,并且您拥有来自所有 世界各地。几何数据类型为 一种较旧的数据类型,具有多个 支持它的功能和享受 来自第三方工具的强大支持。 如果你很舒服的话最好 使用空间参照系或 正在处理本地化数据,其中 所有数据都可以放在一个空间中 参考系统SRID,或者您需要 进行大量的空间处理。 参考第8.8节“PostGIS “功能支持矩阵”查看什么 当前支持什么 不是

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