python 使用pyshp读写shp文件

安装

pip install pyshp

引入

import shapefile

读取

sf=shapefile.Reader("{路径名}",encoding='utf-8') # 仅仅读取

shapes与shape

shapes=sf.shapes()  返回值是一个列表,包含该文件中所有的”几何数据”对象

shape=sf.shape(0) Shape是第1个”几何数据”对象
shapeType返回集合类型

返回第1个对象的数据类型属性

    几何类型
    NULL = 0
    POINT = 1
    POLYLINE = 3
    POLYGON = 5
    MULTIPOINT = 8
    POINTZ = 11
    POLYLINEZ = 13
    POLYGONZ = 15
    MULTIPOINTZ = 18
    POINTM = 21
    POLYLINEM = 23
    POLYGONM = 25
    MULTIPOINTM = 28
    MULTIPATCH = 31
    
   print(shape.shapeType)
bbox 返回数据范围
shape.bbox    返回第一个集合对象的数据范围(左下角的x,y坐标和右上角的x,y坐标)
points 所有坐标点
shape.points   返回第一个集合对象的所有坐标点
parts 返回’块’的第一个点坐标
shape.parts 返回第一个对象的每个”块”的第一个点坐标

records与record

获取属性列表

records

获取属性列表,是个函数

sf.records();
返回的值是个list
record

获取一条数据

sf.record(0)
返回的值是class

shapeRecords

同时获取record和shape

# 同时读取geometry and records
sf.shapeRecords()
获取所有
red=sf.shapeRecords()[0]  #获取第一条数据
print(red.record)  #获取record
print(red.shape)   #获取shape

fields

获取shp文件属性字段

print(sf.fields)

[('DeletionFlag', 'C', 1, 0), ['OBJECTID', 'N', 9, 0], ['BSM', 'C', 12, 0], ['PXZQDM', 'C', 2, 0], ['PXZQMC', 'C', 50, 0]]

写入

import shapefile
outshp = 'a.shp'
 
 landlist=[ '84.60212,45.03658,84.60794,45.03938,84.61473,45.04151,84.62442,45.04375,84.62727,45.03632,84.63939,45.0367,84.64906,45.03277,84.63886,45.02233',
    '84.58063,45.05523,84.57974,45.04717,84.59864,45.04792,84.60078,45.05523,84.58758,45.05473,84.58223,45.05523'
]
def tramform(lat_lng):
    str =lat_lng
    str = str.split(',')
    arr = []
    for i in range(len(str) - 1):
        # 第一列,第二列作为经纬度(x,y)创建点
        if i % 2 == 0:
            arr.append([float(str[i]), float(str[i + 1])])
    return arr
fileWrite = shapefile.Writer("create/1.shp",encoding='utf-8')  # 新建数据存放位置

# shp文件属性字段 Fid,Shape会自动生成。
fileWrite.field('landid')
fileWrite.field('landName')

for i in range(len(landlist)):
    # 第一步:塞入形状
    ## 这个形状指的就是那些点的集合
    ## 由于源码中要求的输入是列表,因此就算只塞入一个,也要套一个列表
    arr=[]
    arr=tramform(landlist[i])
    #[[84.60212, 45.03658], [84.60794, 45.03938], [84.61473, 45.04151], [84.62442, 45.04375], [84.62727, 45.03632], [84.63939, 45.0367], [84.64906, 45.03277], [84.63886, 45.02233]]
    #poly 写入面,点线面使用不同函数
    fileWrite.poly([arr])

    # 第二步:塞入属性值
    fileWrite.record(str(i), '地块')
# 保存结束
fileWrite.close()
### 回答1: 如果你想在 Python 中生成 SHP 文件,可以使用以下库之一: 1. GDAL/OGR:这是一个开源的地理空间数据处理库,支持多种地理空间数据格式,包括 SHP 文件。你可以使用 `ogr` 模块来创建 SHP 文件。 2. pyshp:这是一个轻量级的 Python 库,可以轻松读写 SHP 文件。 3. Fiona:这是一个 Python 库,用于读写地理空间数据文件。它使用 GDAL 库来处理地理空间数据,因此也可以用来创建 SHP 文件。 你可以根据自己的需要来选择使用哪个库。 ### 回答2: 要使用Python生成shp文件,可以使用`Geopandas`库来处理空间数据。为了生成shp文件,首先需要创建一个空的geopandas数据框,并定义其列。 ```python import geopandas as gpd from shapely.geometry import Point # 创建一个空的geopandas数据框 gdf = gpd.GeoDataFrame(columns=['X坐标', 'Y坐标', '几何对象']) # 假设你已经有一组坐标数据,存储在x_coords和y_coords列中 x_coords = [30, 40, 50] y_coords = [20, 25, 35] # 使用这些坐标数据创建Point对象,并将它们添加到geopandas数据框中 for x, y in zip(x_coords, y_coords): point = Point(x, y) gdf = gdf.append({'X坐标': x, 'Y坐标': y, '几何对象': point}, ignore_index=True) # 将数据框保存为shp文件 gdf.to_file('output.shp') ``` 上述代码中,首先导入必要的库,包括`geopandas`和`shapely`。然后,创建一个空的geopandas数据框`gdf`,定义了`X坐标`、`Y坐标`和`几何对象`三列。 接下来,假设你已经有一组x坐标和y坐标数据,存储在`x_coords`和`y_coords`列中。使用这些坐标数据,在循环中创建Point对象,并将其添加到geopandas数据框中。 最后,使用`to_file`函数将数据框保存为shp文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值