【问题标题】:How to get long and lat based on a geography spatial data type?如何根据地理空间数据类型获得经纬度?
【发布时间】:2019-09-13 04:22:08
【问题描述】:

我遇到的问题是我试图根据位置字段获取经纬度值,我有地理列,但我总是收到如下所示的错误:

消息 403,第 16 级,状态 1,第 9 行
数据类型的运算符无效。运算符等于等于,类型等于地理。

这基本上是查询:

select Loc.Lat, Loc.Long  from VideoGamesLocation
where  Loc= '0xE6100000010CBFF1B56796AE4A4029A78951EA6519C0'

你们知道如何根据上述查询获取 lat 和 long 的值吗?

【问题讨论】:

  • 这看起来不像是 GUID,也不像二进制字符串。那个字符串是从哪里来的?
  • 那个是地理空间数据类型David,是Loc字段。
  • 字符串 '0xE610000001CFDSFDS45E4A4029A78951EA6519C0' 与地理实例有何关系?这不是 WKT 或 WKB。它甚至不是一个十六进制字符串,因为它的中间有SFDS
  • 有一个错字,即存储在地理数据类型字段中的值。
  • 所以基本上,这部分工作:从 VideoGamesLocation 中选择 Loc.Lat, Loc.Long ,但是当我尝试按 Loc 过滤时,出现上述错误。

标签: sql sql-server tsql geometry geospatial


【解决方案1】:

好的。然后转换为geography 并使用STEquals 或其他函数之一进行比较。 EG

drop table if exists VideoGamesLocation
create table VideoGamesLocation(id int, Loc geography)

DECLARE @g geography;   
SET @g = cast(0xE6100000010CBFF1B56796AE4A4029A78951EA6519C0 as geography)
insert into VideoGamesLocation(id, Loc) values (1,@g)


select Loc.Lat, Loc.Long  from VideoGamesLocation
where  1=Loc.STEquals(cast(0xE6100000010CBFF1B56796AE4A4029A78951EA6519C0 as geography))

【讨论】:

    【解决方案2】:

    使用 .STEquals 运算符代替 = 。 如果相等,此函数将返回 1。

    还可以使用 cast 函数将 '0xE61000..' 转换为地理数据类型。

    所以,sql 查询应该是: 从 VideoGamesLocation 中选择 Loc.Lat、Loc.Long 其中 1=Loc.STEquals(cast(0xE6100000010CBFF1B56796AE4A4029A78951EA6519C0 作为地理))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多