影像拼接工具使用说明

一、影像像素位深检查

1.采用开源库GDAL的gdalinfo.exe读取GeoTiff文件的信息,如类型、投影,范围等。

2.采用DOS脚本遍历所有GeoTiff文件,输出各个GeoTiff文件的信息到日志。

3.统计GeoTiff文件个数,Type=Byte的文件的个数。数目一致表明全部GeoTiff像素类型一致。

运行示例:

for /f %i in ('dir /b /s
d:\tifdata\*.tif ') do @(

e:\gdal1.4.2\bin\gdalinfo.exe %i >> e:\tifstats.log

)

二、影像拼接处理

采用SuperMapPy脚本处理影像拼接。先安装Python2.7.3和Deskpro环境。脚本如下:

# coding: GB2312

#===================================================

#影像成批导入SuperMap UDB格式工具.

#基本流程:

#1、扫描目录,或者根据经纬度按照块的高宽生成文件列表。

#2、扫描存在的文件,获取最大的坐标范围。

#3、扫描存在的文件,获取像素格式。

#4、遍历文件列表,对于存在的文件追加到打开的数据库UDB中。

#5、创建金字塔索引,以加快显示速度。(可选的过程)

#===================================================

import sys

import string

import re

import os

import time

def getType(ext):

if ext.lower() == 'tif':

return 'fileTIF'

elif ext.lower() == 'img':

return 'fileIMG'

#匹配正则表达式,符合条件的append到datafiles,用于追加

def walkPath(type, path):

datafiles = []

reMatch = '[\d\D]*.tif$'

if type=='img':

reMath = '[\d\D]*.img$'

for root, dirs, files in os.walk(path):

for file in files:

if (re.match(reMatch,file)):

datafiles.append(os.path.join(root, file))

print len(datafiles)

return datafiles

def calcDatasetInfo(type, datafiles):

L=[]

left=[]

top=[]

right=[]

bottom=[]

ratiox=[]

ratioy=[]

#获取每个影像文件的左右地理范围,保存到数组

for file in datafiles:

L= smu.GetImageGeoRef(type,file)

print L

l=float(L[0][0])

t=float(L[0][1])

r=float(L[0][2])

b=float(L[0][3])

w=int(L[1][0])

h=int(L[1][1])

x=(r-l)/w

y=(t-b)/h

left.append(l)

right.append(r)

top.append(t)

bottom.append(b)

ratiox.append(x)

ratioy.append(y)

#获取左右上下边界

dLeft=min(left)

dRight=max(right)

dTop=max(top)

dBottom=min(bottom)

#获取分辨率,影像最小分辨率作为数据集分辨率

dRatioX = min(ratiox)

dRatioY = min(ratioy)

#计算影像数据集宽度和高度

nWidth = int((dRight-dLeft)/dRatioX)

nHeight = int((dTop-dBottom)/dRatioY)

#重新计算,保证分辨率正确

dRight=dLeft+dRatioX*nWidth

dBottom=dTop-dRatioY*nHeight

L = [nWidth, nHeight, dLeft, dTop, dRight, dBottom]

return L

def toDB(server, user, pwd, engType, fileType, path):

files=[]

files=walkPath(fileType, path)

print len(files)

if len(files)>0:

L=[]

L = calcDatasetInfo(fileType, files)

pixType = smu.GetImagePixelFormatName(fileType, files[0])

odsAlias='test'

if len(L)==6:

nWidth=L[0]

nHeight=L[1]

dLeft=L[2]

dTop=L[3]

dRight=L[4]

dBottom=L[5]

dtName='test'

isOpen=smu.OpenDataSource(server,user,pwd, engType, odsAlias)

smu.DeleteDataset(odsAlias, dtName)

bCreate = smu.CreateDatasetRaster(odsAlias,dtName,

'Image', 'encDCT', pixType,nWidth,nHeight,

dLeft, dTop,dRight,dBottom,256)

writeLog("log.log","calcDatasetInfo 成功")

for file in files:

writeLog("log.log",file+"开始处理")

smu.AppendRasterFile(odsAlias,dtName,fileType, file)

writeLog("log.log",file+"处理完毕\n\n")

bBuild=smu.BuildPyramid(odsAlias,dtName)#创建影像金字塔

if bBuild == 1:

print "创建金字塔成功"

else:

print "创建影像金字塔失败!"

smu.CloseDataSource(odsAlias)

#=====================================

def writeLog(logPath, tmpstr):

time_str = time.strftime("%Y-%m-%d %H:%M:%S ",time.localtime())

logstr = str(tmpstr) + time_str +'\n'

print(logstr)

f = open(logPath, "a")

f.write(logstr)

f.close()

help =u"----------------------------------------------------------\n\

说明:可导入udb或oracle引擎\n\

导入到UDB用法: AppendRasterFile.py ugoPath tif c:/data\n\

导入到Oracle用法: AppendRasterFile.py ugoPath server user pwd tif c:/data\n\

----------------------------------------------------------\n"

if __name__=='__main__':

if len(sys.argv)>2:

ugo=sys.argv[1]

if os.path.exists(ugo):

sys.path.append(ugo)

import smu

else:

print u'组件路径不存在.'

sys.exit()

else:

print help

sys.exit()

if len(sys.argv) == 4:

engType='sceUDB'

fileType=sys.argv[2]

fileType=getType(fileType)

path=sys.argv[3]

udb = path+'/test.udb'

udd = path+'/test.udd'

if os.path.exists(udb):

os.remove(udb)

if os.path.exists(udd):

os.remove(udd)

print 'toDB
ing'

toDB(udb, '', '', engType, fileType, path)

smu.Exit()#清空环境,释放内存

elif len(sys.argv) == 7:

engType='sceOraclePlus'

server=sys.argv[2]

user=sys.argv[3]

pwd=sys.argv[4]

fileType=sys.argv[5]

fileType=getType(fileType)

path=sys.argv[6]

toDB(server, user, pwd, engType, fileType, path)

smu.Exit()#清空环境,释放内存

运行脚本示例:

c:\python27\python.exe d:\p.py "E:\Develop\deskpro6R\Bin" tif d:\tifdata

Øc:\python27\python.exe版本一定是2.7.3

Ød:\d.py就是拼接GeoTiff或Img格式的SuperMapPy脚本;

Ø"E:\Develop\deskpro6R\Bin"是deskpro安装目录bin,注意确保目录下存在smu.pyd文件;

Øtif指,读取所有GeoTiff;

Ød:\tiffdata是GeoTiff的目录。注意tif文件的后缀名要是小写, 例如d:\tiffdata\1.tif。

参考:

参考Python for SuperMap  1.0帮助。

附件列表

SuperMapPy 批量拼接 GeoTiff影像的更多相关文章

  1. ArcGis Python脚本——根据接图表批量裁切分幅影像

    年前写了一个用渔网工具制作图幅接图表的文章,链接在这里: 使用ArcMap做一个1:5000标准分幅图并编号 本文提供一个使用ArcMap利用接图表图斑裁切一幅影像为多幅的方法. 第一步,将接图表拆分 ...

  2. 大数据批量插入数据库使用(SqlBulkCopy )效率更高

    SqlBulkCopy类是System.Data.SqlClient下的类,我们开发中不常用,甚至不知道有这么一个类的存在,但确实比sql插入,事务批量插入,sql批量拼接插入快很多,比调用存储过程插 ...

  3. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  4. arcgis对谷歌遥感影像拼接

    对于遥感影像的研究多种多样,有小尺度的也有大尺度的还有多尺度的.可以研究一个城市里的一个区,也可以研究一个省甚至全国范围.当研究的区域比较大的时候,在一幅影像上无法包括研究区的所有范围,那么就需要下载 ...

  5. geoserver 通过代码实现发布地图服务

    GeoServer:代码实现批量发布地图服务 利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer提供的UI界面进行操作显然很不显示.那能不能利用GeoS ...

  6. GeoServer自动发布地图服务

    1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器,提供了管理页面进行服务发布,样式,切片,图层预览等一系列操作,但是手动进行页面配置有时并不满足业务需求,所以GeoServer ...

  7. 使用ArcMap做一个1:5000标准分幅图并编号

    实现这个project,十进制度.渔网工具.Excel if/Text函数.挂接Excel表.空间连接.投影这些知识是必须的.看懂本篇博文也就意味着大概掌握了以上知识. 坐标数据设置与编号标准依据&l ...

  8. MyBatis+Spring SQL效率测试报告

    1. 数据库结构 2. insert 测试 insert 的测试包括 1) 批量拼接values()插入 2) 有事务for循环插入 3) 无事务for循环插入 测试 SQL: <!-- 普通 ...

  9. ArcMap中提取影像数据边界

    1.前言 客户手里有一些经过裁剪的不规则多边形影像数据(如图例所示),希望能批量获取该类影像的边界信息,即影像对应的面信息,边界线信息.这里我们提供一种利用镶嵌数据集Footprint图层的方法来获取 ...

随机推荐

  1. WinForm 进程和线程

    进程: //进程用到的类Process,需要进行解析 using System.Diagnostics Process.Start("calc");//Process是非静态方法, ...

  2. es6语法

    let定义变量,特性: 1,不允许重复定义 2,不存在预解析 3,变量存在于会块级作用域 即{}内部 const : 定义常量,常量的值不能修改,若常量是对象 对象下的属性可修改. 解构赋值语法: 数 ...

  3. Java基础第二章

  4. linux下常见问题

    1.配置path 环境变量 # vim /etc/profile 在文档最后,添加: export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PA ...

  5. Jquery跨域调用后台方法

    //前端JS function CallHandlerByJquery() { var url = "http://" + window.location.hostname + & ...

  6. SpringMVC 系列教程1-文件上传-配置

    SpringMVC默认没有配置上传解析器 使用SpringMVC来处理上传必须添加对MultipartResolver上传解析器的声明配置. 配置之后,客户端每次进行请求的时候,SpringMVC都会 ...

  7. git clone出现SSL错误

    在学习git的时候,发现不能使用git clone从github.com下载,报了个ssl错误. Cloning into cancan... error: SSL certificate probl ...

  8. dao代码模板

    提供数据源以及回收资源的工具类DbUtils: public class DbUtils { private static ComboPooledDataSource dataSource = new ...

  9. Hmaster启动后自己挂掉

    之前发现master中Hmaster进程自己挂掉,而worker中的HRegionServer进程关闭不掉. 最开始怀疑是hbase的pid文件存在tmp中,被系统自己删掉了,就在hbase文件中新建 ...

  10. python 元组 字符串 字典 列表嵌套练习题1

    最近学习做的习题,直接复制过来 缩进就乱掉了,所以直接以图片方式上传,题目和答案一起