采矿权EXCEL文件坐标串矢量化和信息提取

2023-11-10

解决思路:

1.采矿权文件坐标格式规则,百度出来的规则。

 2.将规则输入chatgpt中,让其给出arcpy的代码,如下结果

 

不得不说,chatgpt确实很强大,事半功倍。检查测试下了代码:xy坐标互换了下,解析坐标时列值有点不正确,index+1,好了,能正确输出矢量了。

 3.提取excel文件中的信息,转为矢量。

 (1)文件内容如下

(2)这里没有使用pandas库,直接粘贴信息值到记事本中,用“;”替换了制表符tab空格。然后读取txt文档,提取信息。读取记事本时由于utf-8字符的问题,换为了codecs库,这是代码。

#coding:utf-8
import arcpy
import os
import codecs


# 设置工作空间和输出shp文件名
arcpy.env.workspace = r"d:\data"
output_shp = "output_polygon.shp"
# 指定txt文件路径
txt_file_path = u"D:\\data\\ckq.txt"

# 创建空的shp文件
if os.path.exists(r"d:\data\output_polygon.shp"):
    arcpy.Delete_management(output_shp)

arcpy.CreateFeatureclass_management(arcpy.env.workspace, output_shp, "Polygon")

# 添加字段
arcpy.AddField_management(output_shp, "xh", "SHORT")
arcpy.AddField_management(output_shp, "ckxkzh", "TEXT","", "", 50)
arcpy.AddField_management(output_shp, "ckqr", "TEXT","", "", 100)
arcpy.AddField_management(output_shp, "ksmc", "TEXT","", "", 100)
arcpy.AddField_management(output_shp, "kckz", "TEXT","", "", 20)
arcpy.AddField_management(output_shp, "djmj", "DOUBLE")
arcpy.AddField_management(output_shp, "bz", "TEXT","", "", 50)

arcpy.AddField_management(output_shp, "cssj", "DOUBLE")
arcpy.AddField_management(output_shp, "csxj", "DOUBLE")
arcpy.AddField_management(output_shp, "qkbh", "TEXT")
arcpy.AddField_management(output_shp, "qkxz", "TEXT")

# 检查文件是否存在
if not os.path.isfile(txt_file_path):
    print(u"文件不存在。")
else:
    # 逐行读取txt文件
    with codecs.open(txt_file_path, 'r','utf-8-sig') as file:
        # 从坐标列表中提取数据并生成多边形
        with arcpy.da.InsertCursor(output_shp,
                                   ["SHAPE@", "xh", "ckxkzh", "ckqr", "ksmc", "kckz", "djmj", "bz", "cssj", "csxj",
                                    "qkbh", "qkxz"]) as cursor:

            for line in file:
                # 处理每一行数据
                #print(line.strip())  # .strip()用于去除行尾的换行符

                strline=line.strip()
                str_list =strline.split(";")
                xh = int(str_list[0])
                ckxkzh=str_list[1]
                ckqr=str_list[2]
                ksmc=str_list[3]
                kckz=str_list[4]
                djmj=float(str_list[5])
                zb=str_list[6]
                bz=str_list[7]

                # 读取示例坐标串
                coordinates_str = zb
                # 按照逗号分隔,解析坐标数据
                coordinates_list = coordinates_str.split(",")
                num_blocks = int(coordinates_list[0])

                index = 1
                for i in range(num_blocks):
                    num_vertices = int(coordinates_list[index])
                    block_vertices = []
                    for j in range(num_vertices):
                        x = float(coordinates_list[index + 3])
                        y = float(coordinates_list[index + 2])
                        block_vertices.append(arcpy.Point(x, y))
                        index += 3
                    if coordinates_list[index + 1]=='':
                        upper_elevation=0
                    else:
                        upper_elevation = float(coordinates_list[index + 1])
                    if coordinates_list[index + 2]=='':
                        lower_elevation=0
                    else:
                        lower_elevation = float(coordinates_list[index + 2])
                    block_id = coordinates_list[index + 3]
                    block_property = coordinates_list[index + 4]
                    index += 5

                    # 构建多边形
                    polygon = arcpy.Polygon(arcpy.Array(block_vertices))
                    cursor.insertRow([polygon,xh, ckxkzh, ckqr, ksmc,kckz,djmj,bz, upper_elevation, lower_elevation, block_id, block_property])

    print("Shapefile生成完成!")



# 在这里可以对每一行数据进行进一步处理,例如解析数据或进行其他操作

4.问题

(1)坐标串内容中部分坐标采深上届、采深下届缺失。

(2)遇到坐标点数与实际坐标不一致的情况。

处理:由于我要转的记录数较少,运行代码中遇到采深上届和采深下届坐标缺失的情况,直接用调试模式,发现到哪条记录错误,就直接改记事本上的属性值了。转完成功后,打开矢量文件,可以看其他列,特别是采深上届、采深下届、备注、区块性质的值,有异常的就检查原始值,改正后,重新执行输出。如果数据量较大,可以自行加上判断条件处理。

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

采矿权EXCEL文件坐标串矢量化和信息提取 的相关文章

  • 如何在Java,Apache POI中获取Excel单元格字段的字体样式?

    我想用Java捕获Excel中单元格字段的字体 我正在使用 Apache POI 如果可以的话我想捕捉font color font family font weight font size etc 我怎样才能实现这个目标 根据评论进行编辑
  • Range.End() 困惑

    我有一个关于 VBA 中 Range End 属性的一般性问题 我已经阅读了有关该房产的信息here http msdn microsoft com en us library bb221181 aspx 但我还是很困惑 例子 With w
  • 非相邻单元格作为数组函数的输入(MIN 和 ISBLANK)

    提出了这个问题 由于具体问题的答案是一个拼写错误 因此被删除 https stackoverflow com questions 59289065 excel non adjecent cells as input to array fun
  • 强力查询历年产品利润对比

    我有一个数据集 其中包含公司 产品 利润和年份 公司每年都会销售少量产品并获得利润 公司没有必要在明年销售相同的产品 他们可能会省略以前的产品并添加新的少量产品 我只想对两年的产品进行逐个比较 如下所示 我的数据集是 Company Pro
  • 如何计算 COUNTIF 但仅计算唯一值?

    我有一个数据集 其中有一列包含参考文献 参考文献始终遵循相同的格式 1 XXX YYY XXX 始终为 3 个字母 YYY 始终是一个数字 每个XXX都会有YYY 001 如果同一个XXX有多个类型 就会有YYY 002 以此类推 我想知道
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 如何在Excel中识别给定月份的第一,第二等星期一或一周中的其他日期

    我在网上查了一下 但公式看起来很复杂 有什么巧妙的建议吗 例如 我需要一个公式来确定哪个日期是 2014 年 8 月的第一个星期一 类似于第二个星期一的使用 等等 谢谢 一般来说 你可以找到n 第一个x给定的一天M and Y用这个公式 D
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • 如何禁用 openpyxl 表中的自动过滤器?

    当我使用 openpyxl 创建表时 它默认在所有列上添加自动过滤器 使用中提供的示例可以重现该行为文档 https openpyxl readthedocs io en stable worksheet tables html 我想显示没
  • VBA XML V6.0 如何让它等待页面加载?

    我一直在努力寻找答案 但似乎找不到任何有用的东西 基本上 我是从一个网站上拉取的 当您在该页面上时 该网站会加载更多项目 我希望我的代码在加载完成后提取最终数据 但不知道如何让 XML httprequest 等待 Edited Sub p
  • 如何在 Azure 逻辑应用中解析 Excel 电子表格

    我需要使用 Azure 逻辑应用从 Excel 电子表格中解析和提取列信息 我已经为我的逻辑应用程序设置了从 Outlook 检索最新未读电子邮件的功能 此外 我的逻辑应用程序执行 FOR EACH 来读取所有附件 来自未读电子邮件 并确保
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 将html表格保存到excel中[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须编写一个程序 定期读取网页并将
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适

随机推荐