ホームページ  >  記事  >  バックエンド開発  >  pyshpを使用してPythonでshpファイルを読み書きする方法

pyshpを使用してPythonでshpファイルを読み書きする方法

王林
王林転載
2023-04-26 13:04:211871ブラウズ

    インストール

    pip install pyshp

    概要

    import shapefile

    Read

    sf=shapefile.Reader("{pathname} ",エンコーディング='utf-8')

    #shapes とshape

    shapes=sf.shapes() のみを読み取ります。戻り値は、ファイル Data 内のすべての「ジオメトリ」を含むリストです。 object

    shape=sf.shape(0) Shape は最初の「幾何学データ」です object

    shapeType はコレクション タイプを返します

    returns データ最初のオブジェクトの type 属性

        几何类型
        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();

    戻り値はリストです

    record

    データの一部を取得します

    sf.record( 0)
    戻り値は class

    shapeRecords

    レコードとシェイプを同時に取得

    # 同时读取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()

    以上がpyshpを使用してPythonでshpファイルを読み書きする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。