SQL Server 空间从线串转换为多边形

时间:2021-06-07 18:02:00

标签: sql-server spatial spatial-query

谁能帮我将 SQL Server Geometry Shape 对象转换为 Geometry Polygon 对象。

我有一个 Shape 对象,它是“Ohio state plan south”坐标,SRID 为 32123,我想将其转换为 SRID 3857 的几何多边形

这就是我目前所拥有的......当我运行它时出现错误。

错误:“24119:多边形输入无效,因为外环的起点和终点不同。多边形的每个环必须具有相同的起点和终点。”

DECLARE @predata varchar(MAX) = 'LINESTRING (544447.66750002524 219649.36696754955, 544446.556000026 219690.21900326665, 544443.99000002549 219720.61000326276, 544435.09000002721 219836.23000326566, 544431.66000001959 219896.72000326123, 544430.0600000252 219924.97000326123, 544422.56000002555 219999.65000326186, 544419.05563904892 220098.02782277763)';
DECLARE @data geometry;
DECLARE @linestring geometry = @predata;
DECLARE @srid int;
SET @predata = REPLACE(@predata, 'LINESTRING', 'POLYGON(') + ')';
SELECT @predata AS PolygonString

SET @data = geometry::STGeomFromText(@predata, 3857);
SELECT @data AS GeographyPolygon

2 个答案:

答案 0 :(得分:1)

错误告诉您问题是什么。也就是说,多边形需要以相同的点开始和结束。您的线串没有(从 544447.66750002524 219649.36696754955 开始,到 544419.05563904892 220098.02782277763 结束)。我能够通过获取线串的起点并将其附加到末尾来使其工作。如果这是一次性操作,那就足够了。

答案 1 :(得分:1)

同意上一个答案,请简单地使用您的脚本,稍作改动,如下所示:

--start point should be same as end point
DECLARE @predata varchar(MAX) = 'LINESTRING (
544447.66750002524 219649.36696754955, 
544446.556000026 219690.21900326665, 
544443.99000002549 219720.61000326276, 
544435.09000002721 219836.23000326566, 
544431.66000001959 219896.72000326123, 
544430.0600000252 219924.97000326123, 
544422.56000002555 219999.65000326186, 
544447.66750002524 219649.36696754955)'; 
--end point should be same as start point
DECLARE @data geometry;
DECLARE @linestring geometry = @predata;
DECLARE @srid int;
SET @predata = REPLACE(@predata, 'LINESTRING', 'POLYGON(') + ')';
SELECT @predata AS PolygonString
SET @data = geometry::STGeomFromText(@predata, 3857);
SELECT @data AS GeographyPolygon