使用GDAL/OGR包+python将CSV转成shapefile并投影

在处理数据的时候,很多时候原始数据都是csv格式,分析的时候使用shapefile比较方便。特别是在mac系统上没有arcgis,处理大量数据的时候用qgis一个一个点很麻烦,于是写了个python脚本处理。 首先安装gdal的python安装包:

sudo easy_install GDAL 

安装好之后就可以使用GDAL/OGR来进行数据处理了,脚本如下:

import osgeo.ogr as ogr
import osgeo.osr as osr
from osgeo import gdal
import csv
def poiMake(csvpath,shp,layerName):
    gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO") 
    gdal.SetConfigOption("SHAPE_ENCODING","") 
    source = osr.SpatialReference()
    source.ImportFromEPSG(4326)
    target = osr.SpatialReference()
    target.ImportFromEPSG(3857)
    reader = csv.DictReader(open(csvpath,"rb"),delimiter=',',quoting=csv.QUOTE_MINIMAL)
    driver = ogr.GetDriverByName("ESRI Shapefile")
    data_source = driver.CreateDataSource(shp)
    layer = data_source.CreateLayer(layerName, target, ogr.wkbPoint)

    field_name = ogr.FieldDefn("en", ogr.OFTString)
    field_name.SetWidth(100)
    layer.CreateField(field_name)
    field_cn = ogr.FieldDefn("cn", ogr.OFTString)
    field_cn.SetWidth(100)
    layer.CreateField(field_cn)

    for row in reader:
        feature = ogr.Feature(layer.GetLayerDefn())
        feature.SetField("en", row['en'].lstrip('"').rstrip('"'))
        feature.SetField("cn", row['cn'].lstrip('"').rstrip('"'))

        wkt = "POINT(%f %f)" %  (float(row['lon']) , float(row['lat']))
        transform = osr.CoordinateTransformation(source, target)
        point = ogr.CreateGeometryFromWkt(wkt)
        point.Transform(transform)
        feature.SetGeometry(point)
        layer.CreateFeature(feature)
        feature.Destroy()

    data_source.Destroy()

代码很简单,就不多解释了,其中最关键的是下面两句:

gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO") 
gdal.SetConfigOption("SHAPE_ENCODING","")    

用来解决中文字符的问题



查看原文:http://www.giser.net/?p=1322
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值