使用python对shapefile重投影

脚本如下:

#!/usr/bin/env python
from osgeo import ogr, osr
from osgeo import gdal
import os
def  reproject(inputfile,outputfile,layername):
    gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO")    
    gdal.SetConfigOption("SHAPE_ENCODING","") 
    driver = ogr.GetDriverByName('ESRI Shapefile')

    # input SpatialReference
    inSpatialRef = osr.SpatialReference()
    inSpatialRef.ImportFromEPSG(4326)

# output SpatialReference
    outSpatialRef = osr.SpatialReference()
    outSpatialRef.ImportFromEPSG(3857)

# create the CoordinateTransformation
    coordTrans = osr.CoordinateTransformation(inSpatialRef, outSpatialRef)

# get the input layer
    inDataSet = driver.Open(inputfile)
    inLayer = inDataSet.GetLayer()

# create the output layer
    outputShapefile = outputfile
    outDataSet = driver.CreateDataSource(outputShapefile)
    print inLayer.GetGeomType()
    outLayer = outDataSet.CreateLayer(layername,geom_type=inLayer.GetGeomType() )

    # add fields
    inLayerDefn = inLayer.GetLayerDefn()
    for i in range(0, inLayerDefn.GetFieldCount()):
        fieldDefn = inLayerDefn.GetFieldDefn(i)
        outLayer.CreateField(fieldDefn)

# get the output layer's feature definition
    outLayerDefn = outLayer.GetLayerDefn()

# loop through the input features
    inFeature = inLayer.GetNextFeature()
    while inFeature:
    # get the input geometry
        geom = inFeature.GetGeometryRef()
    # reproject the geometry
        geom.Transform(coordTrans)
    # create a new feature
        outFeature = ogr.Feature(outLayerDefn)
    # set the geometry and attribute
        outFeature.SetGeometry(geom)
        for i in range(0, outLayerDefn.GetFieldCount()):
            outFeature.SetField(outLayerDefn.GetFieldDefn(i).GetNameRef(), inFeature.GetField(i))
    # add the feature to the shapefile
        outLayer.CreateFeature(outFeature)
    # destroy the features and get the next input feature
        outFeature.Destroy()
        inFeature.Destroy()
        inFeature = inLayer.GetNextFeature()

# close the shapefiles
    inDataSet.Destroy()
    outDataSet.Destroy()


查看原文:http://www.giser.net/?p=1335
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值