我正在创建一个Google地图混合程序,并使用SQL 2008。
我将在地球上拥有大量点,并希望在SQL中执行各种计算 - 例如选择包含在特定多边形内的所有点,或选择与XY距离在10km以内的所有点。
我以前从未使用过SQL空间功能。我应该使用geography
还是geometry
数据类型?
我正在创建一个Google地图混合程序,并使用SQL 2008。
我将在地球上拥有大量点,并希望在SQL中执行各种计算 - 例如选择包含在特定多边形内的所有点,或选择与XY距离在10km以内的所有点。
我以前从未使用过SQL空间功能。我应该使用geography
还是geometry
数据类型?
地理信息是用于在地球上标绘点的类型。
如果您有一个存储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;
您可以按照PostGIS FAQ中提供的答案进行操作。
简短回答:地理数据类型是一种新的数据类型,支持长距离的测量。如果您使用地理数据类型,您不需要学习太多平面坐标系统的知识。如果您只关心距离和长度测量,并且您的数据来自全球各地,那么地理数据类型通常是最好的选择。几何数据类型是一种较旧的数据类型,有许多支持它的函数,并得到第三方工具的大力支持。如果您对空间参考系统非常熟悉,或者您正在处理所有数据都适合单个空间参考系统(SRID)的本地化数据,或者您需要进行大量的空间处理,则最好使用几何数据类型。请参阅“PostGIS函数支持矩阵”第8.8节,了解当前支持哪些功能和不支持哪些功能。
PostGIS和SQL Server中的几何和地理类型遵循相同的概念,因此在PostGIS FAQ中给出的答案适用于您的问题。
很可能你需要地理类型,因为它考虑了地球的曲率。几何更适用于“平面”视图。查看此文章以获取更多信息 http://www.mssqltips.com/tip.asp?tip=1847