多边形不正确的问题-Postgis查询不起作用

多边形不正确的问题-Postgis查询不起作用,gis,postgis,Gis,Postgis,我有两个表格,一个代表多边形,第二个代表点。我想知道两件事,第一件是第一个表中多边形的面积,第二件是两个几何体之间相交的面积: 1第一个表的多边形的面积 2位于多边形内部的点周围半径为150米的缓冲区并集的面积 SELECT residenziali.code, ST_Area(residenziali.the_geom::geography, true) as area_zona, ST_Area(ST_Intersection(residenziali.the_

我有两个表格,一个代表多边形,第二个代表点。我想知道两件事,第一件是第一个表中多边形的面积,第二件是两个几何体之间相交的面积: 1第一个表的多边形的面积 2位于多边形内部的点周围半径为150米的缓冲区并集的面积

SELECT residenziali.code,
       ST_Area(residenziali.the_geom::geography, true) as area_zona, 
       ST_Area(ST_Intersection(residenziali.the_geom, 
               (ST_Union(ST_Buffer(fermate.the_geom::geography, 150)::geometry)))::geography,true) as intersect 
 FROM residenziali 
 JOIN fermate ON st_contains(residenziali.the_geom , fermate.the_geom) 
WHERE residenziali.id = '969' 
GROUP BY residenziali.code,residenziali.the_geom
我进行了查询,但出现了一些问题,因为如果我将WHERE子句设置为仅选择第一个表中的一个多边形,那么所有多边形都可以正常工作,但是如果我需要所有多边形的数据,然后我得到错误:执行交点时出错:地形异常:输入几何0无效:12.20304662098798 46.117661703823636在12.20304662098798 46.117661703823636处或附近的自交点

SELECT residenziali.code,
       ST_Area(residenziali.the_geom::geography, true) as area_zona, 
       ST_Area(ST_Intersection(residenziali.the_geom, 
               (ST_Union(ST_Buffer(fermate.the_geom::geography, 150)::geometry)))::geography,true) as intersect 
 FROM residenziali 
 JOIN fermate ON st_contains(residenziali.the_geom , fermate.the_geom) 
WHERE residenziali.id = '969' 
GROUP BY residenziali.code,residenziali.the_geom
第一个有效的查询是:

SELECT residenziali.code,
       ST_Area(residenziali.the_geom::geography, true) as area_zona, 
       ST_Area(ST_Intersection(residenziali.the_geom, 
               (ST_Union(ST_Buffer(fermate.the_geom::geography, 150)::geometry)))::geography,true) as intersect 
 FROM residenziali 
 JOIN fermate ON st_contains(residenziali.the_geom , fermate.the_geom) 
WHERE residenziali.id = '969' 
GROUP BY residenziali.code,residenziali.the_geom
当我删除WHERE子句时,它不再工作了,错误是什么

SELECT residenziali.code,
       ST_Area(residenziali.the_geom::geography, true) as area_zona, 
       ST_Area(ST_Intersection(residenziali.the_geom, 
               (ST_Union(ST_Buffer(fermate.the_geom::geography, 150)::geometry)))::geography,true) as intersect 
 FROM residenziali 
 JOIN fermate ON st_contains(residenziali.the_geom , fermate.the_geom) 
WHERE residenziali.id = '969' 
GROUP BY residenziali.code,residenziali.the_geom

两个表的几何列均为_geom,第一个表为Residenzali,第二个表为fermate,均使用WGS84。谢谢

检查以确保两个表中都没有几何图形错误。从Residenzali选择ST_IsValidthe_geom和从fermate选择ST_IsValidthe_geom给你什么?不太可能是这样。它更可能是联合缓冲区返回一些非多边形的人工制品types@sovemp你是对的,我有一些错误的政策,postgis无法计算面积。我用qgis打开它并调整它。谢谢你的帮助!!没有多少人了解地理信息系统世界。再次感谢@用户3868481。事实上,有很多人具有GIS知识,但在发布这样的问题之前,希望您先从有效的多边形开始。以后,请先使用ST_IsValid或ST_MakeValid。
SELECT residenziali.code,
       ST_Area(residenziali.the_geom::geography, true) as area_zona, 
       ST_Area(ST_Intersection(residenziali.the_geom, 
               (ST_Union(ST_Buffer(fermate.the_geom::geography, 150)::geometry)))::geography,true) as intersect 
 FROM residenziali 
 JOIN fermate ON st_contains(residenziali.the_geom , fermate.the_geom) 
WHERE residenziali.id = '969' 
GROUP BY residenziali.code,residenziali.the_geom