• ”城市公交线路站点数据爬取 + csv站点数据转ShapeFile矢量数据“(三)点csv转shp


    这里用pyshp完成转换。

    坐标纠偏(gcj02转wgs84)和定义投影(proj.4)酌情操作。

    #-*-coding:utf-8-*-
    import shapefile as shp
    import csv
    import codecs
    import os
    
    def trans_point(folder, fn, delimiter=','):
        '''transfer a csv file to shapefile'''
        # create a point shapefile
        output_shp = shp.Writer(folder + "%s.shp"%fn.split('.')[0], shp.POINT)
        # for every record there must be a corresponding geometry.
        output_shp.autoBalance = 1
        # create the field names and data type for each you can omit fields here
        # 顺序一定要与下面的保持一致
        #关键步
        output_shp.field('PointUid', 'C', 80) # string, max-length
        #output_shp.field('KeyName', 'C', 20)
        output_shp.field('BusName', 'C', 70)
        output_shp.field('StationName', 'C', 50)
        output_shp.field('LON', 'C', 15)
        output_shp.field('LAT', 'C', 15)
        counter = 1 # count the features
        # access the CSV file
        with codecs.open(folder + fn, 'rb', 'utf-8') as csvfile:
            reader = csv.reader(csvfile, delimiter=delimiter)
            next(reader, None) # skip the header
            #loop through each of the rows and assign the attributes to variables
            for row in reader:
                try:
                    ###只有上海数据有KeyName
                    #关键步
                    PointUid = row[0]
                    #KeyName= row[1]
                    BusName = row[1]
                    StationName = row[2]
                    LON = row[3]
                    LAT = row[4]
                    output_shp.point(float(LON), float(LAT)) # create the point geometry
                    output_shp.record(PointUid,BusName,StationName,LON,LAT) # 关键步add attribute data
                    if counter % 10000 == 0:
                        print("Feature " + str(counter) + " added to Shapefile.")
                    counter = counter + 1
                except Exception as e:
                    print(e)
                    print(row)
    
    #listJS = ["changzhou","huaian","lianyungang","nanjing","nantong","suqian","suzhou","taizhou","wuxi","xuzhou","yancheng","yangzhou","zhenjiang"]
    for i in listJS:
        trans_point("E:\公交站点csv转shp\","{}点总量.csv".format(i))

    最后结果:

     厌世写手不想再写py爬虫了,立个flag,这个号不会再更新爬虫了。

  • 相关阅读:
    $python打包工具pyinstaller的用法
    $命令行参数解析模块argparse的用法
    $用ConfigParser模块读写conf配置文件
    $用python-docx模块读写word文档
    $git学习总结系列(4)——gitignore文件
    $ git学习总结系列(3)——分支管理
    $ 专治各种python字符编码问题疑难杂症
    $python数据分析基础——初识matplotlib库
    $ python-json模块的基本用法
    $python虚拟化运行环境——virtualenv
  • 原文地址:https://www.cnblogs.com/hsh17/p/12572201.html
Copyright © 2020-2023  润新知