找不到我无法将用户定义函数的返回值直接传递给STGeomFromText的原因。请帮忙。
declare @points nvarchar(max);
set @points = '43.6950681126962,-79.4046143496645,43.6959369175095,-79.3999794923712,43.6946181896527,-79.3994001349161,43.6778911368006,-79.3695525136617,43.6787446722787,-79.3714193302229,43.6760133178263,-79.3941859209041,43.6755011769934,-79.3969110453878,43.6906308086704,-79.4031123121585,43.6950681126962,-79.4046143496645';
/*-----------failed, return error 24141-*/
/*Msg 6522, Level 16, State 1, Line 12
A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry":
System.FormatException: 24141: A number is expected at position 27 of the input. The input has ,.
System.FormatException:
at Microsoft.SqlServer.Types.OpenGisWktReader.RecognizeDouble()
at Microsoft.SqlServer.Types.OpenGisWktReader.ParseLineStringText()
at Microsoft.SqlServer.Types.OpenGisWktReader.ParsePolygonText()
at Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type)
at Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid)
*/
select COUNT(*) from t
where geometry::STGeomFromText( dbo.GeoCoordinateInBoundery(@points), 0) .STContains( geometry::STGeomFromText('Point(' + cast(t.Latitude as varchar(32)) + ' ' +
cast(t.Longitude as varchar(32)) + ')', 0)) = 1
/*----OK-------*/
declare @ss nvarchar(max)
set @ss = dbo.GeoCoordinateInBoundery(@points)
select COUNT(*) from t
where geometry::STGeomFromText( @ss, 0) .STContains( geometry::STGeomFromText('Point(' + cast(t.Latitude as varchar(32)) + ' ' +
cast(t.Longitude as varchar(32)) + ')', 0)) = 1
答案 0 :(得分:1)
WKT的有效语法在lat和long值对之间放置一个空格,并在每个坐标之间添加逗号。
所以你应该:
set @points = '43.6950681126962 -79.4046143496645,43.6959369175095 -79.3999794923712,43.6946181896527 -79.3994001349161,43.6778911368006,-79.3695525136617,43.6787446722787 -79.3714193302229,43.6760133178263 -79.3941859209041,43.6755011769934 -79.3969110453878,43.6906308086704 -79.4031123121585,43.6950681126962 -79.4046143496645';