STPointFromText没有在代码中提供坐标

时间:2017-06-22 07:38:59

标签: sql-server geospatial

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

这就是我现在所拥有的;

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

但是如果我尝试用像<; p>这样的语句来执行它

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

我得到&#34;将数据类型varchar转换为地理位置时出错。&#34;

据我了解,&#34; STPointFromText&#34;用于将varchar转换为Geography,但我看到的每个例子都有坐标&#39;硬编码&#39;可以这么说。

例如;

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您没有使用看起来像WKT的东西而已婚,但我是否可以推荐Point()静态方法?它需要三个参数(纬度,经度和SRID)并返回地理或几何点对象。像这样:

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

答案 1 :(得分:0)

你几乎就在那里,你必须记住你必须将输入转换为地理领域。试试这个:

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)