如何在 shx/shp 形状文件中写入形状名称

问题描述 投票:0回答:1

我有 2 级(区)shapefile、shx、shp、prj 和 dbf。我想根据 csv 文件中的值对区域进行着色。为此,我需要知道 shapefile 中的地区名称,以便它们与 csv 文件匹配。当我在 python 中打印 shapefile 时,我得到了前几个区域、点和最后几个区域。怎样才能得到所有的区呢?我的Python代码如下

import geopandas as gpd
map_df = gpd.read_file("Shapefiles/geoBoundaries-ZMB-ADM2-all/geoBoundaries-ZMB-ADM2.shx")

print(str(map_df))

file = open("DistNames.txt","w")
for i in map_df:
    file.write(str(i))
file.close()

file.write 命令仅写入标头。 “print(str(map_df))”打印以下内容

shapeName shapeISO                  shapeID shapeGroup shapeType                                           geometry
0     Chadiza     None  96606910B77235415839099        ZMB      ADM2  POLYGON ((32.74355 -13.97731, 32.74352 -13.977...
1       Chama     None  96606910B58575447882030        ZMB      ADM2  POLYGON ((32.98907 -10.33498, 32.98921 -10.334...
2     Chasefu     None  96606910B66491549150910        ZMB      ADM2  POLYGON ((32.49527 -12.11955, 32.49512 -12.119...
3     Chavuma     None  96606910B79487679146559        ZMB      ADM2  POLYGON ((21.99621 -13.43440, 21.99863 -13.278...
    4      Chembe     None  96606910B75660185812839        ZMB      ADM2  POLYGON ((28.84617 -11.51781, 28.84644 -11.517...
    ..        ...      ...                      ...        ...       ...                                                ...

111     Sioma     None   96606910B9791848622327        ZMB      ADM2  POLYGON ((23.03060 -16.08061, 23.03080 -16.080...
112   Solwezi     None  96606910B41698448274652        ZMB      ADM2  POLYGON ((26.35282 -12.64015, 26.35057 -12.636...
113     Vubwi     None  96606910B21898239615406        ZMB      ADM2  POLYGON ((32.64327 -14.20251, 32.64332 -14.202...
114   Zambezi     None  96606910B34519400934586        ZMB      ADM2  POLYGON ((21.99621 -13.43440, 21.99962 -13.435...
115     Zimba     None  96606910B26636319118677        ZMB      ADM2  POLYGON ((26.96850 -17.33118, 26.96862 -17.332...

[116 rows x 6 columns]

寻求帮助提取所有形状名称,以进行筛选或写入文件中。

python arcgis shapefile
1个回答
0
投票

您的 Python 代码面临的问题是您试图将 DataFrame 的列名称写入文件,而不是特定列的值(在本例中为地区名称)。要使用 GeoPandas 从 shapefile 中提取并保存地区名称,您需要专门访问包含地区名称的列并将这些值写入文件。

根据您的描述,包含地区名称的列似乎可能被标记为

shapeName
。以下是您可以修改代码以提取所有地区名称并将其保存到文件中的方法:

import geopandas as gpd

# Load shapefile using GeoPandas
map_df = gpd.read_file("Shapefiles/geoBoundaries-ZMB-ADM2-all/geoBoundaries-ZMB-ADM2.shx")

# Assuming the district names are in the 'shapeName' column
district_names = map_df['shapeName']

# Write district names to a file
with open("DistNames.txt", "w") as file:
    for name in district_names:
        file.write(name + '\n')  # Write each name on a new line

此代码将创建一个名为

DistNames.txt
的文件,其中每一行包含 shapefile 中的一个地区的名称。确保列名称
shapeName
与 shapefile 中包含地区名称的列完全匹配。如果列名称不同,您应该在 shapefile 中将
'shapeName'
替换为正确的列名称。

© www.soinside.com 2019 - 2024. All rights reserved.