
本次测试只是大概了解 SQL Server 在地理空间的基本使用方法。由于文章使用到了2个函数 STRING_AGG 和 CONCAT_WS,建议使用 SQL Server 2017 及以上版本,本人测试的是 SQL Server 2019。可从网上随便找一份数据进行测试,本人则找了一份广东省的城市经纬度,创建以下表。
CREATE TABLE GuangDong(city VARCHAR(50) NOT NULL,longitude DECIMAL(10,6) NOT NULL,latitude DECIMAL(10,6) NOT NULL,)
现在将测试,绘制空间线将这些城市点连接起来。上面已经创建了表,再新增一个空间字段 LocationGeog,并使用纬度和经度信息填充它。你可以使用Long和Lat名称来查看点的纬度和经度。
ALTER TABLE GuangDong add LocationGeog geographyUPDATE GuangDong set LocationGeog = geography::Point(Latitude, Longitude, 4326)
现在再查询表,除了显示表格记录,查询结果窗口也出现了“空间结果”。

图一
这些点非常小,很考验视力!不过我们确实看到了地理位置上各城市点的分布情况。当然也可以单独绘制一个点。
--SELECT geography::Point(纬度,经度,4326)SELECT geography::Point(22.62,114.07,4326) --广东深圳
进行多个点的绘制,使用空间数据类型 MULTIPOINT。
SELECT geometry::STGeomFromText('MULTIPOINT(114.07 22.62,113.23 23.16,113.52 22.3)', 4326);SELECT geometry::STGeomFromText('MULTIPOINT((114.07 22.62),(113.23 23.16),(113.52 22.3))', 4326);

图二
进行线条绘制,则使用空间数据类型 LINESTRING。
SELECT geography::STGeomFromText('LINESTRING(114.07 22.62,113.23 23.16,113.52 22.3)',4326)

图三
按照以上格式,使用函数 STRING_AGG 和 CONCAT_WS 将所有城市经纬度拼接起来。
SELECT STRING_AGG(CONCAT_WS(' ', LocationGeog.Long, LocationGeog.Lat),',')FROM GuangDong-- 113.23 23.16,113.19 23.4,114.2 24.09,113.81 23.13,113.55 23.57,114.25 23.75,113.36 22.95, ……
为了方便观看,我这使用 Latitude+Longitude 先排序,再按顺序连接各城市。
SELECT geography::STGeomFromText('LINESTRING(' + STRING_AGG(CONCAT_WS(' ', LocationGeog.Long, LocationGeog.Lat),',') + ')',4326)FROM(SELECT TOP 10000 * FROM GuangDong ORDER BY Latitude+Longitude) T

图四
至此,完成基本测试。对于上面出现的 4326,可选数字参考 sys.spatial_reference_systems ,表示要返回的 geography 实例的空间引用标识符 (SRID)。
最近文章推荐:
历史文章推荐:

文章转载自SQLServer,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




