登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2014-11-25 21:54 编辑
加载地图图层要用到MeteoInfo库中的MapDataManage类,该类位于org.meteoinfo.data.mapdata包中。类中的方法可以分为两类:静态方法和非静态方法。要使用某个类中的非静态方法,首先要创建该类的对象,然后再利用该对象去引用非静态方法。而静态方法的使用较为简单,无需创建类的对象,直接用类名去引用静态方法。下面举个简单的例子:
MapLayout类的getActiveMapFrame方法是非静态方法,因此必须先创建MapLayout的对象然后再使用该方法:
mapLayout = MapLayout()
mapFrame = mapLayout.getActiveFrame()
MapDataManage类中的loadLayer方法是静态方法,调用的时候无需创建MapDataManage对象:
layer = MapDataManage.loadLayer(layerFileName)
MapDataManage类中的静态方法loadLayer是用来加载地图图层的,只有一个参数即文件路径,可以加载shape文件和MeteoInfo支持的一个图像格式。MeteoInfo中的图层分为三类:矢量图层(VectorLayer)、栅格图层(RasterLayer)和图像图层ImageLayer。其中矢量图层根据图元类型又可以大致分为点(Point)、线(Polyline)、面(Polygon)三类。
从地图数据文件中加载了图层之后需要加到MapLayout(是地图图形绘制的面板)中,创建MapLayout对象的时候后自动添加一个MapFrame对象用于管理和绘制图层(实际上是MapFrame中的MapView来具体负责),一个MapLayout对象中至少要有一个MapFrame,也可以有多个MapFrame,比如加入南海脚图的话需要两个MapFrame,但活动的MapFrame有且只有一个,可以通过MapLayout类中的getActiveMapFrame方法来获取。MapFarme的addLayer方法可以将之前加载的图层加入。
下面是一个实际的脚本示例程序,演示加载一个图像图层、一个面图层、一个线图层和一个点图层,并将它们加入到MapFame中绘制出来的例子:
- #-----------------------------------------------------
- # Author: Yaqiang Wang
- # Date: 2014-11-25
- # Purpose: Load layer
- # Note: Sample
- #-----------------------------------------------------
- #---- Import classes
- print 'Import classes...'
- from org.meteoinfo.layout import MapLayout
- from org.meteoinfo.data.mapdata import MapDataManage
- from org.meteoinfo.global import Extent
- import os.path
- from java.awt import Color
- from javax.swing import JFrame
- #---- Set directories
- print 'Set directories...'
- baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
- mapDir = os.path.join(baseDir, 'map')
- #---- Create MapLayout object
- mapLayout = MapLayout()
- mapFrame = mapLayout.getActiveMapFrame()
- #---- Load layers
- print 'Load image layer...'
- fn = os.path.join(mapDir, 'GLOBALeb3colshade.jpg')
- imageLayer = MapDataManage.loadLayer(fn)
- mapFrame.addLayer(imageLayer)
- print 'Load country layer...'
- fn = os.path.join(mapDir, 'country1.shp')
- countryLayer = MapDataManage.loadLayer(fn)
- lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
- lb.setDrawFill(False)
- lb.setOutlineColor(Color.black)
- mapFrame.addLayer(countryLayer)
- print 'Load river layer...'
- fn = os.path.join(mapDir, 'rivers.shp')
- riverLayer = MapDataManage.loadLayer(fn)
- lb = riverLayer.getLegendScheme().getLegendBreaks().get(0)
- lb.setColor(Color.blue)
- lb.setSize(1.5)
- mapFrame.addLayer(riverLayer)
- print 'Load city layer...'
- cityLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'res1_4m.shp'))
- lb = cityLayer.getLegendScheme().getLegendBreaks().get(0)
- lb.setSize(6)
- lb.setColor(Color.red)
- mapFrame.addLayer(cityLayer)
- #---- Add title
- title = mapLayout.addText('MeteoInfo script demo', 350, 30, 'Arial', 16)
- #---- Zoom layout map
- print 'Zoom layout map...'
- mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(70, 140, 15, 55))
- #---- Set mapframe
- mapFrame.setGridXDelt(10)
- mapFrame.setGridYDelt(10)
- mapLayout.paintGraphics()
- frame = JFrame('MeteoInfo Script Sample', size = (800, 600))
- frame.add(mapLayout)
- frame.visible = True
- print 'Finished!'
脚本运行结果如下:
|