pip install pyshp
import shapefile
sf=shapefile.Reader(" { nama laluan}", encoding='utf-8') # Hanya baca
shapes=sf.shapes() Nilai pulangan ialah senarai yang mengandungi fail Semua "geometrik data" objek
shape=sf.shape(0) Shape ialah objek "data geometri" pertama
shapeType mengembalikan jenis koleksi
Pengembalian atribut jenis data objek pertama
几何类型 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 Mengembalikan julat data
shape.bbox Mengembalikan julat data objek koleksi pertama ( x, y koordinat sudut kiri bawah dan koordinat x, y sudut kanan atas)
mata Semua titik koordinat
shape.points Mengembalikan semua koordinat objek koleksi pertama Titik
bahagian mengembalikan koordinat titik pertama bagi ’blok’
bentuk.bahagian mengembalikan titik pertama setiap "blok" objek pertama Koordinat titik
Dapatkan senarai atribut
rekod
Dapatkan senarai atribut, ia adalah fungsi
sf.records();
Nilai yang dikembalikan ialah senarai
rekod
Dapatkan sekeping data
sf.record(0 )
Nilai yang dikembalikan ialah kelas
Dapatkan rekod dan bentuk pada masa yang sama
# 同时读取geometry and records sf.shapeRecords() 获取所有 red=sf.shapeRecords()[0] #获取第一条数据 print(red.record) #获取record print(red.shape) #获取shape
Dapatkan atribut fail shp medan
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()
Atas ialah kandungan terperinci Bagaimana untuk menggunakan pyshp untuk membaca dan menulis fail shp dalam python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!