zoukankan      html  css  js  c++  java
  • ”城市公交线路站点数据爬取 + 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,这个号不会再更新爬虫了。

  • 相关阅读:
    Hibernate+mysql 中文问题解决方案.
    FpSpread表格控件,FpSpread事件介绍(一)
    如何实现打开有宏的EXCEL时不提示
    使用VB.Net写一个简单的数据访问层(不能称ORM):CRUD操作
    Asp.NET 时间Since转换
    64位操作系统上。NET操作MSMQ的问题
    IIS7配置管理Windows2008 64位系统IIS7的问题
    数据库开发批量附加数据库
    IIS7中对静态文件的处理
    techsailor三步曲
  • 原文地址:https://www.cnblogs.com/hsh17/p/12572201.html
Copyright © 2011-2022 走看看