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);
我正在尝试在 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);