我在location _ table(point _ location geometry)中存储了位置,现在我在谷歌地图上绘制了一个多边形,并将该多边形(几何)传递给后端,我想找到该多边形内的所有位置。
SELECT POINT_LOCATION
FROM LOCATIONS_TABLW
WHERE ST_Contains(GeomFromEWKT(?), POINT_LOCATION);
当我将多边形从谷歌地图传递到后端时,这给了我随机的结果。它没有给我多边形内的所有点。它给了我甚至在多边形之外的点。
在 postgis 中准确查找多边形内所有点的正确方法是什么(也包括边界情况)
更新
请在下面找到查询
SRID=4326; POLYGON((-103.3054963750000820.852735681153252,-103.0810348124999820.612974162085475,-101.6261045 20.537532106266806,-99.8356786874999820.395877027062447,-99.8030653750000222.0572706994358,-99.6499481250000428.918636198451633,-121.1212769375 8.69559423007209,-103.3054963750000820.852735681153252))SRID=4326; POINT(-103.496956 20.722446)SRID=4326; POINT(-103.4955 20.723544)
选择ST_Intersects(GeomFromEWKT('SRID=4326; POINT(-103.496956 20.722446)'), GeomFromEWKT('SRID=4326; POLYGON((3054963750000820.852735681153252,-10 3.0810348124999820.612974162085475,-101.6261045 20.537532106266806,-99.8356786874999820.395877027062447,-99.8030653750000222.0572706994358,-99.6499481250000428.918636198451633,-121.1212769375 8.69559423007209,-103.3054963750000820.852735681153252))')); 这应该返回False,但它返回true。
您可以使用
SELECT POINT_LOCATION
FROM LOCATIONS_TABLE
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);
注意:多边形必须是闭合的(这意味着最后一个坐标==第一个坐标)。第二个参数POINT_LOCATION必须是点表中的几何列。
更新:我试图在我的 pg 数据库中重播您的步骤。我创建了2个表,LOCATIONS_TABLE(id,geom)和POLYGON(id,geom)。之后,我用 2 分填满了LOCATIONS_TABLE
SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)
之后,我将多边形插入多边形表中
SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375 (...)
如您所见,这2个点在多边形内部。所以我手动在多边形之外创建了一个点。之后,您可以使用以下sql查询,查看这些点是否在多边形内部:
SELECT ST_Contains(polygon.geom, point.geom)
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon
它为里面的2个点返回t,为第三个点返回false。
注意,有一个多边形ABCIHGJKLMLKA,它包括节点KLM,但多边形CDEG不包括F。 我读过关于这个问题的解决方案,但没有像我这样的leaf要求。在以前的解决方案中存在的一些公理是,每条边只使用两次,但是死端边总共需要遍历四次。也就是说,存在一个包含所有外部节点ABCDEFGJKLMLKA的多边形,但是它会被丢弃,因为它将朝外。 下面介绍了一种类似问题的解决方案,即sans the leaf
我有一个数据库,其中一个表(ca_licenses)是商业地址,另一个表是市议会区多边形的公共模式(ca_la_la_council)。 我运行此查询是为了将议会表中的地区号码放在企业地址表中: 我的问题是我总是得不到任何结果。两个几何列都是几何类型,SRID是4326。 示例ca_licenses数据:https://raw . githubusercontent . com/pour safe
我有一个带有lat和lon的商店位置csv文件。我还有一个geojson文件,其中包含美国人口普查区的多边形特征。我想使用Python查看每个位置存在哪些多边形。 我使用Shapely Python库的包含()来循环通过存储位置的csv文件,获取lat和lon坐标,然后检查这些坐标是否存在于Geojson文件中的一个多边形中。 如果我先遍历每个位置/坐标,然后遍历每个多边形,使用contains(
问题内容: 我对mysql,多边形的Geometric数据类型有一个典型的问题。 我有经度和纬度数组形式的面数据,例如: 我有一个经度和纬度坐标的点(顶点),例如: 现在,我想查找此顶点(点)是否在多边形内。我如何在php中做到这一点? 问题答案: 这是我从另一种语言转换为PHP的功能: 附加: 有关更多功能,我建议您使用此处提供的polygon.php类。使用顶点创建类,并以测试点作为输入调用该
我有一个形状优美的多边形,代表洛杉矶市的边界。我在geopandas GeoDataFrame中还有一组约100万lat长的点,所有这些点都位于多边形的最小边界框内。其中一些点位于多边形本身内,但其他点不在多边形内。我只想保留洛杉矶边界内的那些点,由于洛杉矶的不规则形状,在其最小边界框内只有大约1/3的点在多边形本身内。 使用Python,如果点和多边形具有相同的最小边界框,识别这些点中哪些点位于
我还在学习postgis,需要一些帮助。我有2张桌子,城市和景点。我想返回给定城市X英里内的所有景点。这些是我自己的桌子,所以我可以用任何最适合的方式设置它们。现在,我的景点有一个geom POINT列,srid 4326是lat/lng。我的城市表有一个geom BOUNING BOX(POLYGON)列,它包围了城市边界。我用ST_MakeEnvelope来填写该列,也是4326。 我看过ST