使用Python计算多边形形状文件中的点数

2023-12-06

我有一个美国的多边形形状文件,由各个州组成作为它们的属性值。此外,我有数组存储我也感兴趣的点事件的纬度和经度值。本质上,我想“空间连接”点和多边形(或执行检查以查看每个多边形[即状态]点在),然后将每个状态中的点数相加,以找出哪个状态具有最多的“事件”数量。

我相信伪代码会是这样的:

Read in US.shp
Read in lat/lon points of events
Loop through each state in the shapefile and find number of points in each state
print 'Here is a list of the number of points in each state: '

任何库或语法将不胜感激。

据我所知,OGR 库是我所需要的,但我在语法上遇到了问题:

dsPolygons = ogr.Open('US.shp')  

polygonsLayer = dsPolygons.GetLayer()  


#Iterating all the polygons  
polygonFeature = polygonsLayer.GetNextFeature()  
k=0  
while polygonFeature:
    k = k + 1  
    print  "processing " + polygonFeature.GetField("STATE") + "-" + str(k) + " of " + str(polygonsLayer.GetFeatureCount())  

    geometry = polygonFeature.GetGeometryRef()          

    #Read in some points?
    geomcol = ogr.Geometry(ogr.wkbGeometryCollection)
    point = ogr.Geometry(ogr.wkbPoint)
    point.AddPoint(-122.33,47.09)
    point.AddPoint(-110.11,33.33)
    #geomcol.AddGeometry(point)
    print point.ExportToWkt()
    print point
    numCounts=0.0   
    while pointFeature:  
        if pointFeature.GetGeometryRef().Within(geometry):  
            numCounts = numCounts + 1  
        pointFeature = pointsLayer.GetNextFeature()
    polygonFeature = polygonsLayer.GetNextFeature()
    #Loop through to see how many events in each state

我喜欢这个问题。我怀疑我能给你最好的答案,而且绝对不能帮助 OGR,但 FWIW 我会告诉你我现在在做什么。

I use 地理熊猫,地理空间延伸pandas。我推荐它——它的水平很高,功能很多,可以为您提供一切Shapely and fiona免费。它正在积极开发中推特/@kajord和别的。

这是我的工作代码的一个版本。它假设您拥有 shapefile 中的所有内容,但很容易生成geopandas.GeoDataFrame从列表中。

import geopandas as gpd

# Read the data.
polygons = gpd.GeoDataFrame.from_file('polygons.shp')
points = gpd.GeoDataFrame.from_file('points.shp')

# Make a copy because I'm going to drop points as I
# assign them to polys, to speed up subsequent search.
pts = points.copy() 

# We're going to keep a list of how many points we find.
pts_in_polys = []

# Loop over polygons with index i.
for i, poly in polygons.iterrows():

    # Keep a list of points in this poly
    pts_in_this_poly = []

    # Now loop over all points with index j.
    for j, pt in pts.iterrows():
        if poly.geometry.contains(pt.geometry):
            # Then it's a hit! Add it to the list,
            # and drop it so we have less hunting.
            pts_in_this_poly.append(pt.geometry)
            pts = pts.drop([j])

    # We could do all sorts, like grab a property of the
    # points, but let's just append the number of them.
    pts_in_polys.append(len(pts_in_this_poly))

# Add the number of points for each poly to the dataframe.
polygons['number of points'] = gpd.GeoSeries(pts_in_polys)

开发人员告诉我,空间连接是“开发版本中的新功能”,所以如果您想四处看看in there,我很想听听事情进展如何!我的代码的主要问题是它很慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python计算多边形形状文件中的点数 的相关文章

随机推荐

  • JavaScript Prompt() 方法

    我正在处理一项任务 但我遇到了问题prompt 方法 我发现我可以做一个提示 但我需要多个提示 并且需要金额 例如 我创建了一个包含许多艺术家的 HTML 表以及包含 DVD CD 和音频的列 所有行中都有价格 我需要写一个提示来执行此操作
  • 如何按python pandas中的值范围列表进行分组[重复]

    这个问题在这里已经有答案了 我有以下数据框 name value a 100 b 200 c 150 d 300 e 400 f 200 g 100 我有范围列表 例如 0 100 100 200 超过 200 基于此 我必须计算上面数据框
  • 是否可以获取 XSD 中定义的 XML 节点的类型?

    我正在用 python 解析 XML 我有一个 XSD 架构来验证 XML 我能否获取 XSD 中定义的 XML 特定节点的类型 例如 我的XML 一小部分 是
  • 与全序相比,偏序是否足以构建堆?

    C std priority queue 只需要部分顺序 但如果它的实现是二叉堆 它是如何工作的 例如 假设我们有一个部分有序集 a b c x c lt b b lt a c lt a x与以下无关a b c 那么最大堆是 layer 1
  • RevMob sdk 5.9.0 在导入 时出现头文件错误

    我已经将 RevMobs 集成到我的项目中 现在我只需更新它并下载新的 sdk 5 9 0 并按照与之前相同的步骤进行操作并参考此链接 RevMob ios sdk 但现在我无法集成它并且在导入头文件时 import
  • Rails 存储第三方凭证。有人知道最佳实践吗?

    我读过一堆其他相关问题 似乎没有什么能真正回答我的问题 我的应用程序将与几个不同的第三方网站集成 ebay paypal google amazon 这是一个产品管理系统 它将产品推送到各地 当然 由于它与所有这些网站交互 因此需要用户名
  • 我们可以将语音识别框架与 Today Extension 结合起来吗

    我正在尝试构建一个带有语音按钮的小部件 当我按下它时 它应该将说出的语音转换为文本 但是 当我尝试录制语音时 AVAudioEngine 无法启动 是因为 Today Extension 中不允许 AVAudioEngine 吗 在互联网上
  • 设置具有对象 DataSource 的 DataGridView 中自动生成的列的格式

    我想自动创建我的所有列DataGridView基于我的自定义课程 每件事都按其应有的方式工作 但我需要的是格式化和对齐单元格值 那么是否有一个属性可以添加到我的字段 HeightMeter 中 以便它可以根据需要对齐和格式化 要在手动列创建
  • 编译日期和时间

    Java 中是否有相当于 C 和 C 编译时常量 DATE 和 TIME 的变量 我需要打印正在编译的程序的编译时间和版本信息 Thanks kodev19 据我所知 没有这样的事情 但是在运行的 JVM 上 您可以使用类似下面的代码直接从
  • TypeScript 中的递归泛型

    我想声明一个简单类型来替换any在一段代码中 我知道这将是一些类似对象的论证 所以我可以使用Record
  • Selenium Web 驱动程序 - 切换到父窗口

    我使用 selenium Web 驱动程序 我打开了一个父窗口 单击链接后 新窗口将打开 我从列表中选择一些值 此窗口会自动关闭 现在我需要在我的父窗口中进行操作 我怎样才能做到这一点 我尝试了以下代码 String HandleBefor
  • 正则表达式 - 匹配第 n 个字符,然后停止(非贪婪)

    尝试捕获此日志事件中的时间戳 对于 Splunk 172 21 201 135 http o 1I0BTOx1063x3667295x0 hkv 2020 06 10 17 43 18 951 POST rest build status
  • 弹出窗口触摸拦截器不工作

    我正在尝试测试 PopupWindow 类 我创建了这个方法来显示弹出窗口 public void showPopup LayoutInflater layoutInflater LayoutInflater getBaseContext
  • 多个线程持有同一个锁?

    dashboardRefreshContainer 8 Thread t 1384 java lang Thread State RUNNABLE at sun util calendar ZoneInfo getLastRule Zone
  • Delphi 中的 LZMA 或 7zip

    Delphi 中是否有任何库可以处理 LZMA 或 7zip 文件 包括创建自解压 EXE 有一些源代码在7zip org在 c java c 中 但我希望它们在 delphi 中 但我想要一些独立的东西 没有 DLL 有两种解决方案 1
  • R,按月分割数据

    我有带日期的数据 我想按所有事物所在的月份间隔对它们进行分组 所以说我有 date value 2015 04 01 1 2015 04 28 2 2015 05 04 3 2015 05 09 4 然后我想结束分组 1 2015 04 0
  • 当规则设置为“仅预览”时,Cloud Armor 日志不是很清楚

    我正在使用 Cloud Armor 部署 WAF 我意识到可以在 仅预览 模式下创建规则 并且 Cloud Logging 中有 Cloud Armor 条目 问题是 当我创建 仅预览 规则并且该规则与某些请求匹配时 我无法在日志中区分与某
  • 确保客户端对集合的访问安全

    我有一个运行良好的流星应用程序原型 但目前非常不安全 我需要显示与当前登录用户匹配的用户列表 首先 我决定发布所有用户 将字段限制为过滤客户端用户列表所需的字段 Meteor publish users function return Me
  • 在 C#/ASP.NET 中获取 POST 数据

    我正在尝试获取 POST 数据 但运气不佳 我的代码如下 当我单击表单按钮时 什么也没有发生 我预计至少我的 IDE 会崩溃A Ret 但什么也没发生 文件测试 cs using System Web public class A publ
  • 使用Python计算多边形形状文件中的点数

    我有一个美国的多边形形状文件 由各个州组成作为它们的属性值 此外 我有数组存储我也感兴趣的点事件的纬度和经度值 本质上 我想 空间连接 点和多边形 或执行检查以查看每个多边形 即状态 点在 然后将每个状态中的点数相加 以找出哪个状态具有最多