爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3707|回复: 3

[混合编程] IDL之批量写KML脚本

[复制链接]

新浪微博达人勋

发表于 2019-1-16 14:45:02 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x

                               
登录/注册后可看大图

附件有IDL代码和KML文件,

思路是用IDL批量写KML脚本
head.txt和tail.txt是kml固定的头尾,up和down是Polygon的前后内容,中间不断填入的是坐标信息,批量写入即可。
本来想把椎体布满全球的,但是发现写的时间比较长,于是中断了程序,自己把尾巴补上。
目前写的效率不高,以后再优化。

文件与IDL代码.rar

62.71 KB, 下载次数: 3, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-20 17:12:59 | 显示全部楼层
以上案例之所以没有铺满全球,是因为IDL写KML脚本的速度比较慢,这倒不是IDL语言的问题,
我在IDL语言中反复打开、续写、关闭文件,这可能是导致速度慢的原因,

以前我也做过反复开关、读写文件的操作,非常慢,
由于以前没有衡量过开关文件的耗时状况,
经过两次体验,我发觉开关文件是个费时的操作,以后避免反复开关文件。
以下我试着一次读写文件,应该可以节省不少时间。
待续......
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-21 10:55:15 | 显示全部楼层
飞鸽截图20190121104826.png
今天把算法优化了一下,瞬间把“钻石”布满全球:
% Time elapsed: 0.27900004 seconds.
果然,反复开关文件是罪魁祸首!
附件中有IDL脚本和生成的kml文件。
pro rw
  tic
  head='<?xml version="1.0" encoding="UTF-8"?>'+$
    '<kml xmlns="http://earth.google.com/kml/2.1"><Document>'
  tail='</Document></kml>'
;地标的前半段:
  up='<Placemark><name>p1</name><Style><LineStyle>'+$
    '<width>5</width><color>ff0000ff</color>'+$
    '</LineStyle><PolyStyle><outline>1</outline>'+$
    '<color>7f00ff00</color></PolyStyle></Style>'+$
    '<Polygon><extrude>0</extrude>'+$
    '<altitudeMode>relativeToGround</altitudeMode>'+$
    '<outerBoundaryIs><LinearRing><coordinates>'
;地标的后半段:
  down='</coordinates></LinearRing>'+$
    '</outerBoundaryIs></Polygon></Placemark>'
  ;写入kml固定开头
  openw,lun,'C:\Users\Administrator\Desktop\out.kml',/get_lun,/append
  writeu,lun,HEAD
  for i=-180,180,4 do begin
    for j=-90,90,4 do begin
      A=STRING(10B)+strtrim(string(i),2)+','+strtrim(string(j),2)+',300000'
      B=STRING(10B)+strtrim(string(i+2),2)+','+strtrim(string(j),2)+',300000'
      C=STRING(10B)+strtrim(string(i+2),2)+','+strtrim(string(j+2),2)+',300000'
      D=STRING(10B)+strtrim(string(i),2)+','+strtrim(string(j+2),2)+',300000'
      E=STRING(10B)+strtrim(string(i+1),2)+','+strtrim(string(j+1),2)+',0'
      F=STRING(10B)+strtrim(string(i+1),2)+','+strtrim(string(j+1),2)+',600000'
      writeu,lun,up,A,B,E,A,STRING(10B),down,$
        up,A,B,F,A,STRING(10B),down,$
        up,A,B,E,A,STRING(10B),down,$
        up,B,C,E,B,STRING(10B),down,$
        up,B,C,F,B,STRING(10B),down,$
        up,C,D,E,C,STRING(10B),down,$
        up,C,D,F,C,STRING(10B),down,$
        up,D,A,E,D,STRING(10B),down,$
        up,D,A,F,D,STRING(10B),down
    endfor
  endfor
  ;写入收尾:
  writeu,lun,tail
  free_lun,lun
  toc
end

rw.pro

1.67 KB, 下载次数: 1, 下载积分: 金钱 -5

out.kml

14.64 MB, 下载次数: 28, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-21 11:12:55 | 显示全部楼层
边框有点过粗,设置细一点:

                               
登录/注册后可看大图

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表