Sql server SQL Server空间从线字符串转换为多边形
有人能帮我将SQL Server几何图形对象转换为几何多边形对象吗 我有一个形状对象,它是“俄亥俄州南部平面图”,坐标为SRID32123,我想将其转换为SRID3857的几何多边形 这就是我目前所拥有的。。。当我运行它时,会出现以下错误 错误:“24119:多边形输入无效,因为外环的起点和终点不同。多边形的每个环必须具有相同的起点和终点。”Sql server SQL Server空间从线字符串转换为多边形,sql-server,spatial,spatial-query,Sql Server,Spatial,Spatial Query,有人能帮我将SQL Server几何图形对象转换为几何多边形对象吗 我有一个形状对象,它是“俄亥俄州南部平面图”,坐标为SRID32123,我想将其转换为SRID3857的几何多边形 这就是我目前所拥有的。。。当我运行它时,会出现以下错误 错误:“24119:多边形输入无效,因为外环的起点和终点不同。多边形的每个环必须具有相同的起点和终点。” 错误是告诉你问题出在哪里。也就是说,多边形需要以同一点开始和结束。您的行字符串没有(开始于544447.66750002524 219649.366967
错误是告诉你问题出在哪里。也就是说,多边形需要以同一点开始和结束。您的行字符串没有(开始于
544447.66750002524 219649.36696754955
,结束于544419.05563904892 220098.0278227763
)。我能够通过获取线字符串的起点并将其附加到末尾来使其工作。如果这是一次性操作,那就足够了。错误会告诉您问题所在。也就是说,多边形需要以同一点开始和结束。您的行字符串没有(开始于544447.66750002524 219649.36696754955
,结束于544419.05563904892 220098.0278227763
)。我能够通过获取线字符串的起点并将其附加到末尾来使其工作。如果这是一次性操作,那就足够了。与前面的答案一致,请简单地使用脚本,并进行如下更改:
--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
与前面的答案一致,请简单地使用您的脚本,稍作更改,如下所示:
--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