首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:如何检查一个区域是否在纬度/经度位置?

SQL:如何检查一个区域是否在纬度/经度位置?
EN

Stack Overflow用户
提问于 2013-07-05 05:55:21
回答 3查看 2.6K关注 0票数 3

基本上,如果以上数据位于西雅图市中心的以下坐标位置:A点:-122.341518 47.578047 (经纬度)点B:-122.284355 47.578047 (经纬度)点C:-122.278004 47.630362 (经纬度)点:-122.371559 47.630362点(经纬度),我基本上希望使用函数检查和更新上表中的新列(函数)。

如果在市中心找到一个家庭(hhid),将新列“in_downtown”的值设置为1;否则,将其设为null。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-08 01:42:03

代码语言:javascript
复制
BEGIN
FOR a IN (SELECT * FROM clean.households)
LOOP
UPDATE clean.households set geom=ST_GeomFromText('POINT(' || a.x_coord || ' ' || a.y_coord || ')',2285) where hhid ='a.hhid';
UPDATE clean.households set wkt = ST_AsText(ST_Transform(ST_GeomFromText('POINT(' || a.x_coord || ' ' || a.y_coord || ')',2285),4269))where hhid='a.hhid';
RETURN NEXT a;
END LOOP;

这才是有效的答案。谢谢!

票数 2
EN

Stack Overflow用户

发布于 2013-07-05 06:19:30

代码语言:javascript
复制
BEGIN -- (IN wkt TEXT)
DECLARE pos TEXT;
DECLARE X FLOAT;
DECLARE Y FLOAT;
DECLARE spa INT;

DECLARE TOP_EDGE FLOAT;
DECLARE BOTTOM_EDGE FLOAT;
DECLARE LEFT_EDGE FLOAT;
DECLARE RIGHT_EDGE FLOAT;

-- You'll need to set the above variables here
TOP_EDGE = 47.630362;
BOTTOM_EDGE = 47.578047;
LEFT_EDGE = -122.341518;
RIGHT_EDGE = -122.371559;
-- End bounds setup

pos = LEFT(wkt, LENGTH(wkt) - 1);
pos = RIGHT(wkt, LENGTH(wkt) - 6);
spa = INSTR(pos, ' ');

X = FLOAT(LEFT(pos, spa));
Y = FLOAT(RIGHT(pos, LENGTH(pos) - spa - 1); -- May be off by one here.

RETURN CASE WHEN (Y < TOP_EDGE AND Y > BOTTOM_EDGE 
    AND X < RIGHT_EDGE AND X > LEFT_EDGE) THEN 1 ELSE NULL END;
END

这应该很近。如果不将坐标存储为文本,它可能会大大简化。

票数 0
EN

Stack Overflow用户

发布于 2013-07-05 06:24:18

你可以使用多边形的几何对象。你可以这样做:

代码语言:javascript
复制
Declare @point geometry
Declare @polygon geometry
SET @point = geometry::STGeomFromText('POINT (-88.22 41.50000001)', 4326)
SET @polygon = geometry::STGeomFromText('POLYGON ((-88.2 41.5, -88.2 41.6, -88.3 41.6, -88.3 41.5, -88.2  41.5))', 4326)

Select case when @point.STIntersection(@polygon).ToString() = 'GEOMETRYCOLLECTION EMPTY' then 0 else 1 end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17481967

复制
相关文章

相似问题

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