- 积分
- 783
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-12-3
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 qianz98 于 2019-6-10 16:26 编辑
几年前用VB搞过surfer自动绘制等值线图。最近尝试用PYTHON来实现类似功能,可以实现插值、白化、合并图层。工作环境是python3.6 + surfer16 。但是在调整等值线属性时候遇到问题,编写如下代码:
import win32com.client
import os
def changedate():
app = win32com.client.gencache.EnsureDispatch('Surfer.Application')
Plot = app.Documents.Add(1)
app.Visible = True
xpath=os.path.dirname(os.path.realpath(__file__))
datafile=os.path.join(xpath,'temp.dat')
gridfile=os.path.join(xpath,'temp.grd')
gridoutf=os.path.join(xpath,'temp-out.dat')
blankgrid=os.path.join(xpath,'temp_blank.grd')
outlinefile=os.path.join(xpath,'ZJ_outline.bln')
LS=os.path.join(xpath,'windlevel.lvl')
colormap=os.path.join(xpath,'windcolor.clr')
basefile=os.path.join(xpath,'ZjBack2.bln') #基底图
postfile=os.path.join(xpath,'StaPotst.dat') #张贴图
export_img=os.path.join(xpath,'temp.jpg') #输出图像
#进行插值
app.GridData(DataFile=datafile,
xCol=1,
yCol=2,
zCol=3,
ShowReport=False,
Algorithm=2,
xMin=117.5,
xMax=123.5,
yMin=27,
yMax=31.5,
NumCols="1201",
NumRows="901",
OutGrid=gridoutf,
OutFmt=4)
#白化网格文件
app.GridBlank(InGrid=gridfile,
BlankFile=outlinefile,
OutGrid=blankgrid)
###增加等值线图
MapFrame1 = Plot.Shapes.AddContourMap(GridFileName=blankgrid)
#改变等值线图边界范围
MapFrame1.SetLimits(xMin=118, xMax=123, yMin=27, yMax=31.4)
MapFrame1.xLength=6
MapFrame1.yLength=5
ContourLayer = MapFrame1.Overlays(1)
ContourLayer.Name = "等值线图" #修改等值线图名称
#ContourLayer.Levels.Set(LS)
###增加基底图
MapFrame2 = Plot.Shapes.AddBaseMap(ImportFileName=basefile)
BaseLayer1 = MapFrame2.Overlays(1)
BaseLayer1.Name = "基底图" #修改等值线图名称
###增加散点图
MapFrame3 = Plot.Shapes.AddPostMap(postfile,LabCol=3)
PostMap = MapFrame3.Overlays(1)
PostMap.Name = "张贴图"
###合并图层生成一个新图层
MapFrame1.Selected=True
MapFrame2.Selected=True
MapFrame3.Selected=True
NewMapFrame = Plot.Selection.OverlayMaps()
Plot.Shapes.SelectAll()
Plot.Export(export_img) #导出图片
#关闭调用程序
Plot.Close()
app.Quit()
代码可以执行,能够生成等值线图。
当我打算修改ContourLayer.Levels.Set(LS)
ContourLayer的的Levels属性的时候发现抱错。但是ContourLayer.Name 这个属性是可以修改的。
结论是:
1、PYTHON不是SURFER并不是surfer推荐的开发语言,发现有些语法和对象属性在自带的脚本编辑器中是可用的,但是换成python就不行。网上可参考的PYTHON代码较少。
2、感觉目前用PYTHON还是没法完美的调用surfer绘制等值线图,也用matplotlib库绘制过等值线图,但是插值的方法和效果和克里金法差距还是蛮大。
如果有其他人有更好的办法可以在此交流。
|
评分
-
查看全部评分
|