14
\ begingroup美元

我用气象研究和预测模型WRF和WRF预处理系统WPS,不能从wrfhelp得到满意的答案。谁能指引我在经度和纬度转换为网格点尤其是嵌套网格?具体地说http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Basics/GEOGRID/geogrid_namelist.htmhttp://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap3.htm _Description_of_the_1

如何将经度和纬度i_parent_startj_parent_start吗?这是如何相关dxdyref_latref_lon吗?一个简单的例子,一个解释会很有帮助。

\ endgroup美元
3
  • \ begingroup美元 嗨user311554,欢迎来到es.SA。我不熟悉你提到的特定软件,和你给的链接,而不透明的乍一看。如果你能更详细地说明你需要什么,我们也许能够帮助。如,这是一个从经度/纬度坐标变换到别的吗? \ endgroup美元
    - - - - - -半日西蒙
    2014年11月5日,28。啊
  • \ begingroup美元 @SimonW谢谢你的欢迎。但是的这个问题特定的软件,但一个使它成为一个普遍的问题。如何改变一个纬度/经度网格坐标吗? \ endgroup美元
    - - - - - -gansub
    2014年11月5日,在36
  • \ begingroup美元 网格是什么?无论如何,我的回答是“不要尝试自己动手”——无论你有方便的编程语言,有必定的库。在R中,sp和rgdal包会。或者,如果你有几个点变换和UTM坐标系统,试一试latlong.net/lat-long-utm.html \ endgroup美元
    - - - - - -半日西蒙
    2014年11月5日15:51

4答案4

16
\ begingroup美元

我一直在WRF用户近5年了,最近的一次公开发布和贡献代码。我不知道WPS (WRF预处理系统)有这样一个工具,需要在网格和点坐标并返回适当的索引。然而,它是非常简单的自己。一些建议使用一个外部的库,我认为这可能是一种过度对于这样一个简单的任务。这是你需要做的是:

1)运行geogrid.exe生成网格。因为你还不知道鸟巢的确切位置,设置max_dom = 1namelist.wps。这将生成一个文件geo_em.d01.nc

2)看看geo_em.d01.nc文件为你的孩子找到合适的索引域。i_parent_startj_parent_start引用父网格上的x和y指数的西南角落的孩子网格将定位。XLONG_MXLAT_M的经度和纬度网格质量(压力)点。使用编程语言的选择,找到离你的期望位置的网格单元为孩子窝。这通常是通过寻找所需的位置之间的距离的最小值和网格上的所有点。例如,在Fortran,可以做一些类似:

j_parent_start整数,整数:i_parent_start维度(2)::坐标坐标= minloc ((lon0-xlong_m) * * 2 + (lat0-xlat_m) * * 2) i_parent_start =坐标(1)j_parent_start =坐标(2)

在哪里xlong_mxlat_m是你读从电网二维数组,然后呢lat0lon0是孩子的所需的坐标巢西南角。类似地,如果您使用Python,你能做的:

进口numpy np j_parent_start, i_parent_start = np。unravel_index(\ np.argmin((lon0-xlong_m)**2+(lat0-xlat_m)**2),xlon_m.shape) # Add one because WRF indices start from 1 i_parent_start += 1 j_parent_start += 1

3)现在编辑namelist.wps再次,设置i_parent_startj_parent_start对您在步骤3中,计算的值集max_dom = 2,重新运行geogrid.exe。子域文件geo_em.d02.nc应该创建。

4)看看geo_em.d02.nc文件。重复这个过程,直到满意域位置。

关于parent_grid_ratio参数。这是一个整数倍子网格细化相对于父网格。例如,如果设置为3,父网格分辨率为12公里,孩子网格分辨率将4公里。奇怪的值parent_grid_ratio(3、5等)推荐,因为即使值,插值误差出现由于荒川C-grid惊人的本质。parent_grid_ratio = 3是最常用的值,推荐自己。

\ endgroup美元
0
    10
    \ begingroup美元

    这个问题可能更适合GIS栈交流……江南电子竞技平台但我会尝试:

    dx和dy每网格单元的距离投影网格单元,这是你的网格定义的一部分。ref_lat和ref_lon投影定义的一部分。i_parent_start和j_parent_start水平父网格的网格单元数,你的嵌套网格。我相信WRF网格是面向我,j(0, 0是网格的左下角(例如,一个典型的x - y笛卡儿坐标系统)和第一像素位置定义为1,1协调。

    为了创建一个shapefile网格的投影,我将亲自用空间分配程序工具从北卡罗来纳大学(https://www.cmascenter.org/sa-tools/)。我相信同样的工具将地图指向你的网格。然而,如果你想事情映射到检查结果,您可以使用投影定义构建一个定制的转换在GIS项目,项目你的纬度/多头,然后地图都在一起。

    在这里输入图像描述

    \ endgroup美元
    2
    • 4
      \ begingroup美元 请注意,j_parent_start在水平的指数y维。垂直网格索引k在WRF,虽然不是使用嵌套的上下文中。同时,WRF网格索引从1开始,如Fortran中的数组或MATLAB。 \ endgroup美元
      - - - - - -milancurcic
      2014年11月6日在5:34
    • \ begingroup美元 @IRO-bot抢手货!我拿出垂直的描述。 \ endgroup美元
      - - - - - -f.thorpe
      2014年11月6日8分到达
    9
    \ begingroup美元

    我上传我的计算的代码i_parent_startj_parent_start。在Java中,当人们意识到Java没有等功能minloc或Python的unravel_index。所以我把我的程序分为三个步骤。

    1. 读的xlat_m和xlong_m使用java netcdf数组。

    2. 减去期望lat和期望从每个值的二维朗xlat_m和xlong_m数组和平方的区别。

    3. 然后发现指数j二维数组的最小的元素(而不是作为一个扁平的一维数组)。

    有一个工具,带有WRF叫WRF域创建父进程和子网格的向导,但问题是,你不能看到的地形和土地利用高分辨率模拟至关重要。为了查看地形我有另一个工具,NetCDF文件转换成KML文件和项目,在谷歌地球上。孩子的封闭的图像网格。如上解释为粗网格这与其说是一个问题,因为它是嵌套网格,在网格本身的大小可能不超过几百米。

    孩子网格叠加在谷歌地球上的位置

    双desiredLatitude = 27个;双desiredLongitude = 77;双[][]xlatMArray = getXLatMArray(功能);双[][]xlongMArray = getXLongMArray(功能);int = xlatMArray.length;双[][]数组= new双[一][a];for (int i = 0;我<;+ +){(int j = 0; <; j + +){双latitudeDiff = desiredLatitude - xlatMArray[我][j];双longitudeDiff = desiredLongitude - xlongMArray[我][j];数组[我][j] = Math.pow (latitudeDiff 2) + Math.pow (longitudeDiff 2); } } double min = array[0][0]; double max = array[0][0]; int[] minIndex = {0,0}; int[] maxIndex = {0,0}; for (int i =0; i < array.length ; i++) { for (int j =0 ; j < array.length ; j++) { if (array[i][j] < min) { min = array[i][j]; minIndex[0] = i; minIndex[1] = j; } if (array[i][j] > max) { max = array[i][j]; maxIndex[0] = i; maxIndex[1] = j; } } }
    \ endgroup美元
      7
      \ begingroup美元

      NCL试试。包WRF-related函数,包括双向的坐标转换例程。

      转换坐标对网格指标,遵循这里的文档:wrf_user_ll_to_ij。向后(即准备协调)例程可以在这里找到:wrf_user_ij_to_ll。它们非常方便。

      对于你的场景,您可以加载父域文件(geo_emwrfoutNetCDF文件),然后指定子域坐标开始,你会得到结果。

      这里有一些例子从官方文档:

      从坐标转换到网格索引:

      负载“NCARG_ROOT美元/ lib / ncarg / nclscripts / csm / gsn_code。ncl“负载”NCARG_ROOT美元/ lib / ncarg / nclscripts / wrf / WRFUserARW。ncl”= addfile (“wrfout_d01_2000-01-24_12:00:00.nc”、“r”) loc = wrf_user_ij_to_ll (10。,30岁。,True) print("lon location is: " + loc(0)) print("lat location is: " + loc(1))

      从网格指数坐标转换:

      负载“NCARG_ROOT美元/ lib / ncarg / nclscripts / csm / gsn_code。ncl“负载”NCARG_ROOT美元/ lib / ncarg / nclscripts / wrf / WRFUserARW。ncl“= addfile (“wrfout_d01_2000-01-24_12:00:00.nc”、“r”) res = True res@returnInt = False;返回实际值loc = wrf_user_ll_to_ij (-100.0, 40.0, res)打印(“X / Y位置是:”+ loc)
      \ endgroup美元
      1
      • \ begingroup美元 漂亮的一个。我们有四种不同语言的例子——Fortran, Python, Java和NCL。 \ endgroup美元
        - - - - - -gansub
        2015年2月16日在3:31

      你的答案

      通过点击“发布你的答案”,你同意我们服务条款,隐私政策饼干的政策

      不是你要找的答案?浏览其他问题标记问你自己的问题