SQL Server混合字符串数字的地理空间数据如何转换为Polygon类型
转换方案
SQL Server 原生支持空间数据类型 GEOMETRY,其中就包含 Polygon 子类,你可以通过内置的空间函数完成字符串到多边形类型的转换,具体操作如下:
前置确认
首先确认你的 geospacial_valid 字段存储的内容是否符合 WKT(Well-Known Text) 多边形格式,标准的多边形WKT结构为:
POLYGON((经度1 纬度1, 经度2 纬度2, 经度3 纬度3, ... , 经度1 纬度1))
如果你的字段内容已经符合上述格式,直接使用转换函数即可;如果只有坐标串没有前缀,需要先做字符串拼接补全格式。
具体转换代码
- 标准WKT格式直接转换
-- 4326为WGS84坐标系的SRID,可根据你实际使用的坐标系替换为对应SRID SELECT GEOMETRY::STGeomFromText(geospacial_valid, 4326) AS converted_polygon FROM 你的表名;
- 仅存坐标串时先补全格式再转换
如果你的字段内仅存储坐标点序列(如116.3 39.9,116.4 39.9,116.4 40.0,116.3 40.0,116.3 39.9),可拼接前后缀生成标准WKT:
SELECT GEOMETRY::STGeomFromText('POLYGON((' + geospacial_valid + '))', 4326) AS converted_polygon FROM 你的表名;
- 处理无效多边形
如果存在多边形首尾点不闭合、边交叉等无效情况,可调用MakeValid()方法自动修正:
SELECT GEOMETRY::STGeomFromText(geospacial_valid, 4326).MakeValid() AS converted_polygon FROM 你的表名;
持久化存储转换结果
如果需要把转换后的多边形永久存储到表中,可新增空间类型字段后批量更新:
-- 新增Polygon类型字段 ALTER TABLE 你的表名 ADD geospacial_polygon GEOMETRY; -- 批量更新转换结果 UPDATE 你的表名 SET geospacial_polygon = GEOMETRY::STGeomFromText(geospacial_valid, 4326).MakeValid() WHERE geospacial_valid IS NOT NULL;
内容的提问来源于stack exchange,提问作者slashie
相关产品推荐
相关产品推荐

