SQL Server导入WKT多边形生成geography空间对象有效性报错求助
问题根源
报错的核心原因是你使用的WKT格式不符合SQL Server空间类型的解析规范:你为每个坐标对额外添加了一层小括号,导致解析器无法正确识别坐标结构,和坐标精度、多边形类型无关。
修正方案
1. WKT格式调整
标准WKT中,坐标对之间仅用逗号分隔,不需要给单个坐标对套独立括号:
- 单多边形
POLYGON使用两层括号包裹坐标序列 - 多多边形
MULTIPOLYGON使用三层括号包裹坐标序列
2. 可运行的修正代码
单多边形版本
select Geography::STGeomFromText( 'POLYGON ((-84.976413007999952 29.721111997000037, -84.976519975999963 29.721016060000068, -84.976666054999953 29.721056006000026, -84.976939993999963 29.721130048000077, -84.977004007999938 29.721208937000029, -84.977324076999935 29.721559927000044, -84.977269923999984 29.722414001000061, -84.977025066999943 29.723020043000076, -84.976738926999985 29.723191025000062, -84.976370053999972 29.723202056000048, -84.975935996999965 29.722776022000062, -84.97589605099995 29.72236302400006, -84.97570701799998 29.722185022000076, -84.975701000999948 29.722102957000061, -84.975679941999942 29.721772025000064, -84.976135057999954 29.72136303800005, -84.976413007999952 29.721111997000037))' , 4326)
多多边形版本
select Geography::STGeomFromText( 'MULTIPOLYGON (((-84.976413007999952 29.721111997000037, -84.976519975999963 29.721016060000068, -84.976666054999953 29.721056006000026, -84.976939993999963 29.721130048000077, -84.977004007999938 29.721208937000029, -84.977324076999935 29.721559927000044, -84.977269923999984 29.722414001000061, -84.977025066999943 29.723020043000076, -84.976738926999985 29.723191025000062, -84.976370053999972 29.723202056000048, -84.975935996999965 29.722776022000062, -84.97589605099995 29.72236302400006, -84.97570701799998 29.722185022000076, -84.975701000999948 29.722102957000061, -84.975679941999942 29.721772025000064, -84.976135057999954 29.72136303800005, -84.976413007999952 29.721111997000037)))' , 4326)
3. 批量导入注意事项
- 检查你的GeoJSON转WKT的工具逻辑,去掉自动给每个坐标加括号的错误处理
- 如果遇到多边形环方向错误、自相交等问题,可以追加
MakeValid()方法自动修复:Geography::STGeomFromText('WKT字符串',4326).MakeValid() - SQL Server原生支持双精度坐标,不需要提前截断坐标精度
内容的提问来源于stack exchange,提问作者ccdrm
相关产品推荐
相关产品推荐

