zoukankan      html  css  js  c++  java
  • MeteoInfoLab脚本示例:inpolygon

    inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1。下面一个例子演示了利用一个shape文件和inpolygon函数生成这种0、1数据。需要下载最新的MeteoInfo版本(1.2.6R1):http://yun.baidu.com/share/link?shareid=669776748&uk=51062435

    1、生成一个格点数据(2维数组),可以用zeros函数:
    a = zeros((50,80), dtype='int')
    生成的数组a是50*80的2维数组,其值均为0。

    2、生成格点数据的坐标(x/y),arange1函数生成一个1维数组,三个参数分别为起始值,个数和步长。

    3、读取shape文件,返回一个图层m_china。

    4、利用数组a的inpolygon函数生成一个新数组b,b中多边形内的点的值为1,其它为-1。

    5、将b中-1改变为0。

    6、利用数组b的savegrid方法将数组b及其坐标信息保存到一个Surfer ASCII grid格式的文件中。

    7、绘图,这是为了测试一下。数组b中的1用红色的点表示,0用灰色的点显示。

    脚本程序:

    #Create a 50*80 2D array
    a = zeros((50,80), dtype='int')
    #Create x/y vector
    x = arange1(60, 80, 1)
    y = arange1(10, 50, 1)
    #Read shape file
    m_china = shaperead('D:/Temp/map/china.shp')
    #inpolygon function, in: 1, out: -1
    b = a.inpolygon(x, y, m_china)
    #Change -1 to 0
    b[b==-1] = 0
    #Save to a surfer ASCII grid data file
    fn = 'D:/Temp/test/sdata.dat'
    b.savegrid(x, y, fn)
    #Plot
    axesm()
    geoshow(m_china)
    ss = makesymbolspec('point', {'value':0, 'color':'lightgray', 'size':2, 'edge':False}, {'value':1, 'color':'red', 'size':2, 'edge':False})
    layer = scatterm(x, y, b, symbolspec=ss)

  • 相关阅读:
    docker registry
    2019最新EI源刊目录
    在Asp.net Core中使用中间件来管理websocket
    自定义WPF窗体形状
    Font Awesome矢量版,十六进制版,WPF字体使用
    什么是fortran语言之fortran语言入门
    Java各国首都列表
    世界各国货币,C#数字货币计算
    Ocelot中文文档入门
    F#语言入门之什么是F#语言
  • 原文地址:https://www.cnblogs.com/yaqiang/p/4601949.html
Copyright © 2011-2022 走看看