【问题标题】:STGeomFromText error 24141: A number is expected at position 27 of the input. The input has ,STGeomFromText 错误 24141:输入的位置 27 处应有一个数字。输入有 ,
【发布时间】:2014-11-06 05:30:59
【问题描述】:

找不到无法将用户定义函数的返回值直接传递给 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

【问题讨论】:

    标签: sql-server-2008 spatial


    【解决方案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';
    

    【讨论】:

    • 谢谢。函数 GeoCoordinateInBoundery 将返回格式正确的字符串。当我使用一个变量来保存函数的返回值时,geometry::STGeomFromText 运行顺利,没有错误。
    • 它没有回答我的问题。变量@points 已重写为格式正确的@ss
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2018-03-31
    • 2017-09-09
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多