我正在创建Google地图mashup并使用SQL 2008。
我将在地球上拥有大量的点,并希望在SQL中对它们执行各种计算 - 例如选择特定多边形中包含的所有点,或者选择距离XY 10公里内的所有点。
之前我从未使用过SQL空间功能。我应该使用geography
或geometry
数据类型吗?
答案 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