我有一个包含Location列的表。此列是目前存储在电子表格中的varchar(255)。它包含一个较长的SRID字符串值,如下例所示:this._taskListService.getTaskList({userId: '012345'})...
问题,我需要按原样获取该值,并将其作为地理数据类型存储在我的地址表中。当我查看地址表时,我看到存在的其他位置数据,它看起来与我上面的示例值完全相同。
但是,当我尝试使用Select语句中的0xE6100000010C61C3D32B65A14440C4B12E6EA3BD5BC0
时,出现此错误:
在执行用户定义的例程或聚合“地理位置”期间发生了.NET Framework错误:
System.FormatException:24114:输入的已知文本(WKT)中的标签0xE6100000010C1F6FA8无效。有效标签是POINT,LINESTRING,POLYGON,MULTIPOINT,MULTILINESTRING,MULTIPOLYGON,GEOMETRYCOLLECTION,CIRCULARSTRING,COMPOUNDCURVE,CURVEPOLYGON和FULLGLOBE(仅限地理数据类型)。 System.FormatException:...
如何将此现有Convert(Geography, Location)
数据转换或转换为地址表中已存在的地理位置数据?
答案 0 :(得分:1)
您可以使用geography :: STGeomFromWKB,它需要二进制值和SRID作为输入。 你有一个存储在varchar中的二进制值,并将其转换/转换为二进制的问题实际上会使它变得不同。
请参阅:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql关于二进制数据类型。
尝试详细说明以下示例(适用于我的SQL 2014):
DECLARE @location varchar(255)='0xE6100000010C61C3D32B65A14440C4B12E6EA3BD5BC0'
DECLARE @binlocation varbinary (max)=CONVERT(varbinary(max), @location, 1)
DECLARE @b geography
SET @b=@binlocation
SELECT @b.ToString()