- 积分
- 55950
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2019-5-20 19:15 编辑
应用最广泛的的地图数据应该是shape格式,网络上有很多免费下载资源。MeteoInfoLab中读取shape文件的函数是shaperead,参数即文件名,返回数据包含图形和属性信息的图层对象。矢量图层按照图元类型通常分点、线、面三种,都可以通过geoshow函数加入到地图坐标系(Axesm)中。在geoshow函数中可以指定图层的显示的Symbol(颜色等),可以设置facecolor, edgecolor, size等,这种情况下图层的所有图元都会以同一个Symbol来显示。也可以利用图层的属性信息来生成更复杂的图例(makesymbolspec函数),函数第一个参数是图元类型(point, line, polygon),还需要设置一个属性字段(field='NAME'),然后利用属性数据来设置图例。这里例子中加载了rivers.shp图层,该图层是世界主要河流,这里只显示长江、黄河,用下面的代码处理:
- ss = makesymbolspec('line', {'value':'Yangtze', 'color':(0,255,255), 'size':1}, {'value':'Huang He', 'color':(0,255,255), 'size':1}, field='NAME')
- geoshow(river_layer, symbolspec=ss)
例子中还加载了中国省会城市点图层,可以在geoshow函数中设置labelfield等参数来给图层添加标注(城市名)。
脚本代码如下:
- #Set data folders
- basedir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
- mapdir = os.path.join(basedir, 'map')
- #Read shape files
- bou2_layer = shaperead(os.path.join(mapdir, 'bou2_4p.shp'))
- bou1_layer = shaperead(os.path.join(mapdir, 'bou1_4l.shp'))
- river_layer = shaperead(os.path.join(mapdir, 'rivers.shp'))
- city_layer = shaperead(os.path.join(mapdir, 'res1_4m.shp'))
- #Plot
- axesm()
- geoshow(bou2_layer, edgecolor='lightgray')
- geoshow(bou1_layer, facecolor=(0,0,255))
- ss = makesymbolspec('line', {'value':'Yangtze', 'color':(0,255,255), 'size':1}, \
- {'value':'Huang He', 'color':(0,255,255), 'size':1}, field='NAME')
- geoshow(river_layer, symbolspec=ss)
- geoshow(city_layer, facecolor='r', size=4, labelfield='NAME', fontname=u'楷体', fontsize=16, yoffset=15)
- xlim(72, 136)
- ylim(16, 55)
新的MeteoInfo版本可以只用MeteoInfo -> map目录中shp文件的文件名来加载图层:
- #Plot
- ax = axesm(tickfontsize=12)
- geoshow('cn_province', edgecolor='lightgray')
- geoshow('china', edgecolor=(0,0,255))
- ss = makesymbolspec('line', {'value':'Yangtze', 'color':(0,255,255), 'size':1}, \
- {'value':'Huang He', 'color':(0,255,255), 'size':1}, field='NAME')
- geoshow('rivers', symbolspec=ss)
- geoshow('cn_cities', facecolor='r', size=4, labelfield='NAME', fontname=u'楷体', \
- fontsize=16, yoffset=15)
- xlim(72, 136)
- ylim(16, 55)
运行结果:
|
|