20.
\ begingroup美元

我有三个txt文件经度,纬度和温度(或假设三个列表经度,纬度,温度)在英国从分散的气象站。我想首先插入这些数据以得到一个漂亮的彩色地图的温度。然后,我想这个温度插值层只有在土地面具(因此在不列颠群岛和不是在海的那边)。这有可能与Python和如何?

\ endgroup美元
1
  • 4
    \ begingroup美元 这听起来像一个GIS栈交流的问题江南电子竞技平台 \ endgroup美元
    - - - - - -f.thorpe
    2017年8月11日18:21

3答案3

27
\ begingroup美元

这是非常简单的numpy,scipy.interpolate.griddata,matplotlib。这是一个例子:

进口matplotlib。pyplot一样plt进口numpy np从scipy.interpolate进口griddata #数据坐标和值x = np.random.random (100) y = np.random.random (100) z = np.random.random(100) #目标网格插入ξ=易= np.arange(0、1.01、0.01),易= np.meshgrid (xi, yi) #组面具面罩= (xi > 0.5) & (xi < 0.6) &(易> 0.5)& (yi < 0.6) #插入子= griddata (x, y, z, (xi, yi)方法=“线性”)#面具的子领域(面具)= np。南#地块图= plt.figure () ax = fig.add_subplot (111) plt.contourf (xi,咦,子,np.arange (0、1.01、0.01)) plt.plot (x, y,“k”。) plt.xlabel(“习”,字形大小= 16)plt.ylabel(“易”,字形大小= 16)plt.savefig (interpolated.png, dpi = 100) plt.close(图)

结果:

在这里输入图像描述

如何使用:

  • xy点——这些对应的位置吗纬度你站的值;
  • z点的值,这对应于你的体温从站观测;
  • 目标网格轴——这将是你的目标经度和纬度坐标,必须匹配你landmask领域;
  • 是结果;
  • 这个例子包含一个简单的方法来掩饰。你应该取代这面具landmask网格。

还请注意方法参数griddata。除了线性,这也可以立方最近的。我建议你玩每个看看产生最好的结果的数据集。

\ endgroup美元
11
  • \ begingroup美元 谢谢你,。有一个简单的方法来使用matplotlib情节只有在这片土地?显然我不能使用(掩码= (xi > 0.5) & (xi < 0.6) &(易> 0.5)& (yi < 0.6))来定义landmask的英国, \ endgroup美元
    - - - - - -达沃Keppas
    2017年8月12日13:15
  • \ begingroup美元 你需要屏蔽的数据,如二维场0在水和1。如果你没有,你可以做一个基于地形数据,例如ETOPO 01为此,我经常使用。 \ endgroup美元
    - - - - - -milancurcic
    2017年8月12日在15:21
  • \ begingroup美元 我很新的在python中你能给我一个更详细的描述要做什么? \ endgroup美元
    - - - - - -达沃Keppas
    2017年8月13日12:18
  • 6
    \ begingroup美元 @StavrosKeppas在某些时候你必须尝试做它你自己。如果你在这里,或在GIS课件,或在stackoverflow,你应该试着去做它最好你可以。“我需要请写程序”的问题往往置之不理。学会使用python的最好方法是尝试一段时间。如果它不工作,然后你把你的代码不工作和寻求援助。这显示努力这是一个重要的安全措施,并有可能鼓励更多有用的答案。此外,你可以问你喜欢尽可能多的(好)的问题,不要让扩展问题的评论。 \ endgroup美元
    - - - - - -uhoh
    2017年8月13日开始
  • \ begingroup美元 我想这适应resmple CFD结果粗网格。这是优秀的单值z(如温度)。如果z是一个速度,这将有三个值向量组件。我不考虑插值,只是想把最近的价值。想法吗? \ endgroup美元
    - - - - - -非常
    2019年5月23日在14
13
\ begingroup美元

你有很多的选择。

这个简单任务的最简单的解决方案是使用一个GIS软件,例如自由QGIS。添加分隔文本图层栅格插值。下载一个免费的海岸线向量和剪辑你的光栅的海岸线。一些搜索GIS SE可以帮助你如果你困。GIS选项,它也很容易情节如城市或位置提取温度插值。

或者(根据你的更新问题),您可以使用Python。这将在某种程度上给你更多的控制你的工作流。基础图是一个有用的方案,如见。本教程的一个开始。Python也是自由和有一个伟大的社区SE和其他地方。numpy和scipy是好包对插值和所有数组的过程。对于更复杂的空间过程(剪辑的光栅矢量多边形。)GDAL是一个伟大的图书馆。

您还可以使用R,这可能是一个明智的解决方案如果您打算做一些统计分析后的更高要求。有一些教程可以让你在正确的轨道上。

格林尼治时间也应该能够做出你需要的有吗python接口,至少在发展。

可能,你想花一些精力挑选合适的插值方法,确保你的网格是实际值的最佳估计。

享受你的地图制作!


更新:

我认为GIS将第一种方法,但当你要求一些Python命令,这是一个草率的例子如何使用Python,基础图和scipy您的应用程序。它可以大大提高通过创建一个从shapefile和面具,如前所述,一个敏感的插值方法的使用。

进口numpy scipy.interpolate进口从mpl_toolkits griddata np。技术进口技术导入matplotlib。pyplot plt #定义mapframe lllon = -11 lllat = 49 urlon = 2 urlat = 61 #做一些玩具数据,随机分+角落n = 10 #没有电台lat = np.random。制服(低= lllat + 2、高= urlat-2大小= n) lat = np。append (lat, [lllat、urlat urlat, lllat])朗= np.random。制服(低= lllon + 2、高= urlon-2大小= n)朗= np。附加(经度,[lllon、urlon lllon, urlon]) temp = np.random.randn (n + 4) + 8 #英国夏天?#设置技术选择投影!m =基础图(投影=“芝加哥”,决议=“我”,llcrnrlon = lllon llcrnrlat = lllat urcrnrlon = urlon urcrnrlat = urlat) #变换坐标地图投影m m_lon m_lat = m(*(经度、纬度))#生成网格数据numcols numrows = 240, 240ξ= np.linspace (m_lon.min (), m_lon.max (), numcols)易= np.linspace (m_lat.min (), m_lat.max (), numrows) xi,彝族= np。meshgrid (xi, yi) #插入,有更好的方法,尤其是如果你有很多据点子= griddata ((m_lon m_lat)、温度(xi, yi)方法=“立方”)无花果、ax = plt。次要情节(figsize =(12日12))#画地图的细节。drawmapboundary (fill_color =天蓝色,zorder = 1) #地块内插温度。contourf (xi,咦,子,500年提出=“岩浆”,zorder = 2) m。drawlsmask (ocean_color =天蓝色,land_color =(0, 0, 0, 0),湖泊= True, zorder = 3) cbar = plt.colorbar () plt.title(温度)plt.show ()

(这是修改代码,用于别的东西。详细的问题,其他论坛更suitible。)

在这里输入图像描述

\ endgroup美元
7
  • \ begingroup美元 谢谢你,。但是,你可以有点全面给予一些python命令吗? \ endgroup美元
    - - - - - -达沃Keppas
    2017年8月11日,在十五17
  • \ begingroup美元 基础图插值教程不做达沃正在寻找。 \ endgroup美元
    - - - - - -milancurcic
    2017年8月11日18:42
  • \ begingroup美元 @milancurcic没有,但希望能让他在正确的轨道上。numpy为插值和所有数组和scipy是好包过程,如你的例子所示。棘手的问题往往是让技术做一个意愿。 \ endgroup美元
    - - - - - -user2821
    2017年8月11日23:08
  • \ begingroup美元 @StavrosKeppas我添加了一些代码,但我先去GIS。 \ endgroup美元
    - - - - - -user2821
    2017年8月13日15:43
  • \ begingroup美元 谢谢你!太好了。我想画出海岸线。我添加了这两行:m.drawcoastlines () m.drawcountries()但我得到一个海岸线并不是一个连续的线。 \ endgroup美元
    - - - - - -达沃Keppas
    2017年8月13日16时
0
\ begingroup美元

首先你必须读取数据例如在matlab。然后你就可以得到整个领域内插函数griddata matlab。,还存在landmask功能,允许您进一步的情节你喜欢的地图。

是的这是可能的和有必要的功能至少在matlab和我猜,在其他语言。

\ endgroup美元

    你的答案

    通过点击“发布你的答案”,你同意我们服务条款并承认您已阅读并理解我们的隐私政策的行为准则

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