t-SQL:地理点字符串内的选择语句
Posted
技术标签:
【中文标题】t-SQL:地理点字符串内的选择语句【英文标题】:t-SQL: select statement inside of geography POINT string 【发布时间】:2017-03-22 22:46:58 【问题描述】:这是一个废话,但我想我还是会挑选更有经验的人的大脑。
您可能知道,您可以使用以下查询来查找两组坐标之间的距离。
DECLARE @source geography = 'POINT(-93.54803 39.790132)'
DECLARE @target geography = 'POINT(-105.0207 39.9652)'
SELECT @source.STDistance(@target)/1609.344 AS distance_in_miles
我想要一种方法来找到两个邮政编码之间的距离,而不必使用半正弦公式,所以我写了这个:
DECLARE @source GEOGRAPHY
DECLARE @target GEOGRAPHY
DECLARE @Szip VARCHAR(10) = '64601'
DECLARE @Ezip VARCHAR(10) = '80023'
SET @source = (SELECT longitude+ ' ' +latitude FROM us_loc_data WHERE @Szip = zip)
SET @target = (SELECT longitude+ ' ' +latitude FROM us_loc_data WHERE @Ezip = zip)
SELECT @source.STDistance(@target)/1609.344 AS distance_in_miles
我认为上面的方法行不通,因为这个原因它也行不通:
消息 6522,第 16 级,状态 1,第 5 行 在执行用户定义的例程或聚合“地理”期间发生 .NET Framework 错误: System.FormatException: 24114: 输入熟知文本 (WKT) 中的标签 -93.54803 39.790132 无效。
我目前的理解是,为了让它真正起作用,一对用括号封装的坐标需要夹在字符串开头的引号之间。
我想知道我正在尝试做的事情是否可行。 我能否以某种方式将 select 语句分配给我的变量(@source 和 @target)以查询坐标,而不是明确指定 要使用哪个 坐标?
【问题讨论】:
【参考方案1】:示例
DECLARE @Origin GEOGRAPHY
DECLARE @Target GEOGRAPHY
DECLARE @Szip VARCHAR(10) = '64601'
DECLARE @Ezip VARCHAR(10) = '80023'
Select @Origin =GEOGRAPHY::Point([latitude], [longitude], 4326) from us_loc_data WHERE @Szip = zip
Select @Target =GEOGRAPHY::Point([latitude], [longitude], 4326) from us_loc_data WHERE @Ezip = zip
SELECT Distance = @Origin.STDistance(@Target)/1609.344
返回(使用我的邮政编码数据库)
610.093230351351
【讨论】:
再次感谢您帮助我 :) @AnthonySims 很高兴为您提供帮助,.. 再次... :)以上是关于t-SQL:地理点字符串内的选择语句的主要内容,如果未能解决你的问题,请参考以下文章