首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证lat/long坐标在地理列上的SQL空间表中

验证lat/long坐标在地理列上的SQL空间表中
EN

Stack Overflow用户
提问于 2015-05-22 21:34:54
回答 1查看 1.3K关注 0票数 0

我们有一个空间表(dbo.Map),其中11个多边形代表11个区域。该表具有唯一的ID、名称和与其关联的其他元数据,以及名为geo的地理数据类型列。我们还有一个单独的表(dbo.points),其中包含在第一个表定义的区域中的具有lat/longs的点的列表。除非我们能够将lat/long连接到地理列,否则这两个表没有任何可连接的内容。我们如何返回给定区域中所有点的列表?

EN

回答 1

Stack Overflow用户

发布于 2015-05-23 00:48:13

我是这样做的:

首先,我必须推断出您的模式。我会选择这样的东西:

代码语言:javascript
复制
create table dbo.Map (
   MapID int identity not null,
   geo geography not null
);

create table dbo.Points (
   PointID int identity not null,
   Latitude decimal(9, 7),
   Longitude decimal(10, 7),
   geo as geography::Point(Latitude, Longitude, 4236) persisted
);

接下来,选择:

代码语言:javascript
复制
select PointID, MapID
from dbo.Points as p
left join dbo.Map as m
   on p.geo.STIntersects(m.geo) = 1

您可能想添加一些where子句,但这是最基本的:“我如何找到我的观点所在的区域?”

还请注意,point表有一个持久化计算列,它是一个地理实例,表示经度和纬度列所给出的点。这样做有以下几个原因:

  1. 你不能把垃圾数据(例如abs(Latitude) > 90)放进纬度和经度。
  2. 将地理实例存储在行中,因此不必每次计算它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30406220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档