shp内业数据秒转度

#--coding:utf-8---
 #  brief:  内业shp数据,转换秒到度为单位
 # author: scott
 # date: 2012.1.30    
 # org:  --navi.com
 # 
 # version: v0.1.0 2012.2.1
 #  1.create doc and test ok, types (included point|line|polygon|multipolygon) be supported
 # 
 
 import os,os.path,sys,time,copy,shutil
 from osgeo import ogr
 
 
 def do_layerPoint(layer):
     ftr = layer.ResetReading()
     ftr = layer.GetNextFeature()    
     print 'point num:',layer.GetFeatureCount()
     print 'extent:',layer.GetExtent()
     cc = 1
     while ftr:
         #print cc
         cc+=1
         pt = ftr.GetGeometryRef().GetPoint(0)
         g = ftr.GetGeometryRef()
         #print g#,g.ExportKML()
         if pt[0] >1000 or pt[1] > 1000:
             g.SetPoint(0,pt[0]/3600.,pt[1]/3600.)
             #print g
             
             '''
             ng = ogr.Geometry(ogr.wkbPoint)
             print pt
             ng.SetPoint(0,pt[0]+40,pt[1])
             ftr.SetGeometry(ng)        
             '''
             layer.SetFeature(ftr)
         ftr = layer.GetNextFeature()    
 
 def do_layerLine(layer):
     ftr = layer.ResetReading()
     ftr = layer.GetNextFeature()
     
     while ftr:    
         g = ftr.GetGeometryRef()
         cnt = g.GetPointCount()
         cc = 0
         while cc < cnt:
             #print g.GetPoint(cc)
             cc+=1
         
         for n in range(cnt):
             pt = g.GetPoint(n)
             if pt[0]>1000 or pt[1] > 1000:
                 g.SetPoint(n,pt[0]/3600.,pt[1]/3600.0)
         layer.SetFeature(ftr)
         
         ftr = layer.GetNextFeature()
 
 def do_layerPolygon(layer):
     ftr = layer.ResetReading()
     ftr = layer.GetNextFeature()
     
     while ftr:    
         g = ftr.GetGeometryRef()    
         cnt = g.GetGeometryCount()
         for n in range(cnt):
             gg = g.GetGeometryRef(n)
             for m in range(gg.GetPointCount() ):
                 pt = gg.GetPoint(m)
                 #print pt
                 if pt[0]>1000 or pt[1] > 1000:
                     gg.SetPoint(m,pt[0]/3600.,pt[1]/3600.0)
         layer.SetFeature(ftr)
         ftr = layer.GetNextFeature()        
         
 def do_shpfile(file):
     #print file
     print 'ready file:',file
     driver = ogr.GetDriverByName('ESRI Shapefile')
     #shp = driver.Open('e:/shp_data/points.shp',1)  # 0 - read , 1 - write 
     shp = driver.Open(file,1)  # 0 - read , 1 - write 
     
     layer = shp.GetLayer()
     
     if layer.GetFeatureCount() == 0:
         return 
     
     gtyp = layer.GetLayerDefn().GetGeomType()
     
     if file.lower().find('province') == -1:
         pass #return 
         
     if gtyp == ogr.wkbPoint:
         do_layerPoint(layer)
     elif gtyp == ogr.wkbLineString:
         do_layerLine(layer)
     elif gtyp == ogr.wkbPolygon:
         do_layerPolygon(layer)
     else:
         print 'unknown type:',gtyp,'  ',file
     
     layer.SyncToDisk()    
     shp.Destroy()
     
     
 def convert(shpdir):
     files = os.listdir(shpdir)
     for file in files:
         if  file.lower().find('.shp') ==-1:
             continue
         
         #if file == 'points.shp':
         do_shpfile(shpdir+"/"+file)
 
 if __name__=='__main__':
     #convert( 'e:/shp_data' )
     if sys.argv[1:]:
         convert(sys.argv[1])
     else:
         convert( 'D:/temp3/mess/MESH/H51F009012')
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捣net菜菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值