Questions tagged «point-in-polygon»

常见的GIS操作。用于确定点是否在多边形的边界内。

2
寻找用于2亿个点的多边形分析中最快的解决方案[关闭]
我有一个包含2亿个观测值的CSV,格式如下: id,x1,y1,x2,y2,day,color 1,"-105.4652334","39.2586939","-105.4321296","39.2236632","Monday","Black" 2,"-105.3224523","39.1323299","-105.4439944","39.3352235","Tuesday","Green" 3,"-104.4233452","39.0234355","-105.4643990","39.1223435","Wednesday","Blue" 对于每组坐标(x1 / y1和x2 / y2),我想分配它所属的美国人口普查区或人口普查区(我在此处下载了人口普查区TIGER形状文件:ftp : //ftp2.census.gov/ geo / tiger / TIGER2011 / TRACT / tl_2011_08_tract.zip)。因此,我需要为每个观察做两次多边形点操作。比赛必须非常准确。 最快的方法是什么,包括花时间学习软件?我可以访问具有48GB内存的计算机,以防万一这可能是一个相关的限制。 有多个线程建议使用PostGIS或Spatialite(Spatialite看起来更易于使用-但它与PostGIS一样有效吗?)。如果这些是最佳选择,是否必须填充空间索引(RTree)?如果是这样,怎么做(例如使用人口普查道Shapefile)?对于包含示例代码(或示例代码的指针)的任何建议,我将不胜感激。 我的第一次尝试(在找到此站点之前)包括使用ArcGIS对美国人口普查数据块的数据(100,000点)的子样本进行空间连接(仅x1 / y1)。在我终止该过程之前,花了5个多小时。我希望可以在不到40小时的计算时间内对整个数据集实施的解决方案。 很抱歉提出之前提出的问题-我已经阅读了答案,但不知道如何实施建议。我从未使用过SQL,Python,C,并且以前只使用过一次ArcGIS-我是一个完整的初学者。

4
使用R覆盖空间多边形,并使用R检查在其中放置了哪些网格元素特定坐标
如何使用R来 将shapefile分割为 200米的正方形/子多边形, 在下面的原始地图上绘制此网格(包括每个正方形的ID号),并 评估特定地理坐标所在的正方形。 我是GIS的初学者,这也许是一个基本问题,但是我还没有在R中找到有关如何执行此操作的教程。 到目前为止,我所做的是加载NYC的shapefile并绘制一些示例性地理坐标。 我正在寻找一个示例(R代码)如何使用下面的数据。 # Load packages library(maptools) # Download shapefile for NYC # OLD URL (no longer working) # shpurl <- "http://www.nyc.gov/html/dcp/download/bytes/nybb_13a.zip" shpurl <- "https://www1.nyc.gov/assets/planning/download/zip/data-maps/open-data/nybb_13a.zip" tmp <- tempfile(fileext=".zip") download.file(shpurl, destfile=tmp) files <- unzip(tmp, exdir=getwd()) # Load & plot shapefile shp <- readShapePoly(files[grep(".shp$", files)]) plot(shp) # …


3
将空间点数据连接到R中的多边形
此问题是从Stack Overflow 迁移而来的,因为可以在Geographic Information Systems Stack Exchange上回答。 迁移 4年前。 我正在尝试在点数据和面数据之间执行空间连接。 我的csv文件A中有指示事件空间坐标的数据,还有另一个文件shapefile B,该文件以多边形形式包含区域的边界。 head(A) month longitude latitude lsoa_code crime_type 1 2014-09 -1.550626 53.59740 E01007359 Anti-social behaviour 2 2014-09 -1.550626 53.59740 E01007359 Public order 3 2014-09 -1.865236 53.93678 E01010646 Anti-social behaviour head(B@data) code name altname 0 E05004934 Longfield, New Barn and Southfleet …


2
用Postgis计算多边形中的点
我有一个简单的问题:我想计算一组多边形中的点数。 我已经有一个SQL,但它只返回实际包含点的多边形的gid。 我的表格:包含19.000行的多边形层和包含450行的点层。 下面的SQL select grid.gid, count(*) AS totale FROM grid, kioskdhd3 WHERE st_contains(grid.geom,kioskdhd3.geom) GROUP BY grid.gid; 仅返回一些实际包含点的320个多边形。但是我想返回所有多边形,甚至以为点数为0。 当然,这与我的WHERE条款有关。我必须在哪里放置我的st_contains? 谢谢卡斯滕

3
使用Python检查点是否在多多边形内
我已尝试使用诸如shapefile,fiona和ogr之类的库的几个代码示例,以尝试检查点(x,y)是否落在用ArcMap创建的多面体的边界内(从而以shapefile格式)。但是,尽管这些示例对于常规的单个多边形shapefile也能很好地工作,但是它们都不能很好地与multipolygons配合使用。我尝试过的一些代码片段如下: # First example using shapefile and shapely: from shapely.geometry import Polygon, Point, MultiPolygon import shapefile polygon = shapefile.Reader('shapefile.shp') polygon = polygon.shapes() shpfilePoints = [] for shape in polygon: shpfilePoints = shape.points polygon = shpfilePoints poly = Polygon(poly) point = Point(x, y) # point in polygon test if polygon.contains(point): print …

2
使用QGIS将点簇转换为多边形?
我有一个输入点图层,该图层被分组为多个群集,因此我想将每个点的群集转换为多边形。 这个问题(如何根据QGIS中的特定字段将点集转换为多边形)似乎与我想要的答案很接近,尚未得到解答。 因此,基本上,我需要QGIS中的一种算法,该算法可以将如下所示的每个点簇(基于属性字段)转换为多边形? 我已经尝试过'Point2One'插件,它给了我错误的结果,如下所示... 在这里找到我的数据副本。

2
汇总r中的值时,空间多边形%over%多边形如何工作?
我正在进行一个环境流行病学项目,该项目中我有接触点(约2000头工业猪操作-IHO)。这些IHO喷洒在附近的田地上,但粪便中的水滴和气味可能传播数英里。因此,这些点曝光获得了3mi的缓冲区,我想知道每个NC人口普查区块的IHO曝光数量(各种-粪便量,猪的数量之和;最简单的,只是重叠曝光缓冲区的数量) (〜200,000)。排除人口普查区(蓝色)是(1)在人口最多的前5个城市中的任何事物,以及(2)不与县内有IHO接壤的县(注:这是使用gRelate函数和DE-9IM代码完成的-非常光滑!)。见下图可见 最后一步是将缓冲的曝光量表示汇总到每个人口普查区块。这就是我感到难过的地方。 到目前为止,我在sp程序包中使用%over%函数已经过得很愉快,但是从过分的插图中了解到poly-poly和poly-line over是在rgeos中实现的。该小插图仅涵盖线型多边形和自引用多边形,而不涉及聚合,因此,对于具有函数聚合(例如求和或均值)的多边形的选择,我有些困惑。 对于测试用例,请考虑以下使用世界国家边界文件的冗长代码段。这应该能够被复制出来并按原样运行,因为我为这些点使用了随机种子,并且由于我正在代码中下载和解压缩世界文件。 首先,我们创建100个点,然后将over函数与fn参数一起使用以在数据框中添加元素。这里有很多要点,但请看一下澳大利亚:3分,标号3。到目前为止,一切都很好。 现在,我们变换几何形状,以便我们可以创建缓冲区,向后变换并映射这些缓冲区。(包括在以前的地图中,因为我仅限于两个链接。)我们想知道每个国家/地区重叠了多少缓冲区-以澳大利亚为例,这是4。虽然要通过over函数来实现。在最后的代码行中看到我的一团糟。 编辑:请注意,关于r-sis-geo的评论者提到了聚合函数-也引用了堆栈交换问题63577-因此,解决/流程可能通过该函数进行,但是我不明白为什么我需要去当结束似乎具有其他空间对象的功能时聚合。 require(maptools) require(sp) require(rgdal) require(rgeos) download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip", destfile="world.zip") unzip("world.zip") world.map = readOGR(dsn=".", "TM_WORLD_BORDERS_SIMPL-0.3", stringsAsFactors = F) orig.world.map = world.map #hold the object, since I'm going to mess with it. #Let's create 500 random lat/long points with a single value in the data frame: …

1
R中的空间运算符?
如何在R中进行空间选择或过滤?我可以在PostGIS中使用(例如)执行此操作: SELECT * FROM mypoint, mypoly WHERE ST_Within(mypoint.geom, mypoly.geom); 同样,在大多数其他GIS软件中也是如此。所以我希望R中的内容看起来像: mypoint[within(mypoint, mypoly),] 但我在任何地方都找不到线索。我正在寻找一种使用PostGIS / GEOS / JTS / Shapely中常用的空间谓词术语(在内部,包含,相交,重叠,接触等; DWithin会很有价值)的东西。R是否存在此功能或库?如果不是,是否有相似之处? 注意:在R中,我将sp类用于我的对象(SpatialPointsDataFrame,等等)。

1
更新字段以使用STIntersects给出多边形中的点数?
我有一个点图层(dbo.ptLayer) 约1M点 空间几何类型(dbo.ptLayer.geom) 尚无空间索引,但一旦数据收集完成便会创建一个空间索引。 我有一个多边形图层(dbo.polygonLayer) 大约500个多边形。 空间几何类型(dbo.polygonLayer.geom) 两者都有称为ID的字段。 如何在多边形层中填充一个空的整数字段,并计算每个多边形内的点总数? 尽管我可以使用其他软件产品,但我仍然有兴趣学习纯在SQL和SQL Server中可以完成的工作。 我相信我应该利用STIntersects,但想知道进行更新以填充该字段的最佳方法是什么。

3
多个多边形的点入多边形算法
我有一张Google地图,上面有一堆多边形。 这是我感兴趣的一个问题:给定一个纬度点,确定该点所在的所有多边形的最佳方法是什么? 一种明显的方法是为每个多边形迭代运行“多边形中的点”算法,但是我想知道是否存在一种有效的算法来回答此类查询,尤其是在您有数千个多边形的情况下。

2
使用位于多边形内的点更新数据库行
我有一个PostGIS / Postgresql数据库,其中有两个表。一个具有点几何,另一个将国家边界表示为多边形。我想将每个点相交的国家/地区名称添加到我的点表中的每一行。也许是一大更新查询。我认为可以使用直接SQL来做到这一点,但我不知道从哪里开始。任何对此的建议将不胜感激...

1
通过GIST索引获得多边形查询中点的性能
我有两个表:locations(id,region_id,the_geom)和regions(id,the_geom)。对于每个定位点,我想确定其位于的区域: UPDATE locations SET region_id = (SELECT id FROM regions WHERE ST_Within(locations.the_geom,regions.the_geom) ); 在位置点上建立GIST索引是否有意义?我将在区域多边形上建立索引,但是不确定这些点。会加快查询速度吗?

1
优化面查询中的很大点
我有一个地址点的国家数据集(3700万个)和一个洪水泛滥的多边形数据集(200万个),类型为MultiPolygonZ,某些多边形非常复杂,最大ST_NPoints约为200,000。我正在尝试使用PostGIS(2.18)识别洪泛多边形中的地址点,并将其写入具有地址ID和洪灾风险详细信息的新表中。我从地址角度(ST_Within)进行了尝试,但是从洪水区域角度(ST_Contains)开始进行了交换,其理由是存在大面积区域而根本没有洪水风险。两个数据集都已重新投影到4326,并且两个表都具有空间索引。我下面的查询已经运行了3天,并且没有任何迹象表明很快会完成! select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3 into gb.addresses_with_flood_risk from gb.flood_risk_areas f, gb.addresses a where ST_Contains(f.the_geom, a.the_geom); 有没有更好的方法来运行此?另外,对于这种类型的长时间运行的查询,除了查看资源利用率和pg_stat_activity之外,监视进度的最佳方法是什么? 我的原始查询完成了3天,虽然还可以,但是我在其他工作上步履蹒跚,所以我从来没有花时间尝试解决方案。但是,到目前为止,我刚刚重新访问了该文档并完成了建议。我使用了以下内容: 使用此处建议的ST_FishNet解决方案在英国建立了50公里的网格 将生成的网格的SRID设置为British National Grid并在其上建立空间索引 使用ST_Intersection和ST_Intersects裁剪了我的洪水数据(MultiPolygon)(这里唯一需要注意的是,我必须在geom上使用ST_Force_2D,因为shape2pgsql添加了Z索引 使用相同的网格裁剪我的点数据 在行上创建索引,在每个表上创建col和空间索引 我现在准备运行我的脚本,将遍历行和列的结果填充到一个新表中,直到覆盖全国为止。但是只是检查了我的洪水数据,一些最大的多边形似乎在翻译中丢失了!这是我的查询: SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom INTO rofrse.tmp_flood_risk_grid FROM rofrse.raw_flood_risk f, rofrse.gb_grid g WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom)); 我的原始数据如下所示: 但是剪辑后看起来像这样: 这是一个“缺失”多边形的示例:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.