STPointFromText 不在代码中提供坐标

STPointFromText without providing co-ordinates in the code

我正在尝试在 MSSMS 中创建一个存储过程,该过程在执行时会将执行语句中给出的数据插入到先前制作的表中。

这是我目前拥有的;

Create Procedure UDP_INSERT_TABLES3
          @shape_type varchar(30)
         ,@wktdata varchar(max)
         ,@label varchar(40)

    AS
    Begin


        set nocount on;

        if @shape_type = 'Point'
        insert into Points (Point, Label)
        values (@wktdata, @label)
END

但是,如果我尝试使用类似这样的语句来执行此操作;

exec UDP_INSERT_TABLES3 'Point', '(179.59 -40.35)', 'My House'

我得到"Error converting data type varchar to geography."

据我了解,"STPointFromText" 用于将 varchar 转换为 Geography,但我看到的每个示例都可以说是坐标 'hard coded'。

例如;

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

我需要做什么才能转换我的执行语句中给出的坐标?我考虑过使用 CAST,但我不确定如何在一组括号中同时投射纬度和经度,而不是单独投射它们。

如有任何帮助,我们将不胜感激。

您快到了,您必须记住您必须将输入转换为地理字段。试试这个:

CREATE Procedure UDP_INSERT_TABLES3
          @shape_type varchar(30)
         ,@wktdata varchar(max)
         ,@label varchar(40)

AS
BEGIN
   set nocount on;
   if @shape_type = 'Point'
   BEGIN
     insert into Points (Point, Label)
     values (geography::STGeomFromText('POINT' + @wktdata, 4326), @label)
   END
END

然后这些语句:

exec UDP_INSERT_TABLES3 'Point', '(179.59 -40.35)', 'My House'

SELECT Point, Label, Point.ToString() as PointString FROM POINTS

给予:

Point                                           Label       PointString
0xE6100000010CCDCCCCCCCC2C44C07B14AE47E1726640  My House    POINT (179.59 -40.35)

如果您不想使用看起来像 WKT 而不是的东西,我可以建议使用 Point() 静态方法吗?它需要三个参数(纬度、经度和 SRID)和 returns 一个地理或几何点对象。像这样:

declare @lat float = 50, @long float = 50;
select geography::Point(@lat, @long, 4326);