从lat,long,value创建一个png文件

Mic*_*sco 0 awk dictionary

我在awk中有一个程序,它有一个Lat,long值的数组.假设lat/long是网格的bin的中心.对于每个bin都有一个值,我想创建一个png文件,根据值对每个bin进行颜色编码.对于lat/long/value的每一行(比如600X600像素或360,000个bin),我想生成png文件.每个箱子现在代表大约30米乘30米的箱子尺寸.见图片.假设我想在整个值范围内有5种颜色,可以说0-10是蓝色,11-20,红色等.

我的数据如下:38.0098946,78.5092495,30 38.0101420,78.5091242,20 38.0103893,78.5089989,10 38.0106366,78.5088737,50

Mar*_*ell 6

我仍然不理解您的问题,因为您的数据似乎与您的图表不匹配,但我可以向您展示如何使用您选择的颜色制作600x500 PNG awk.

我认为最简单的方法是使用此处NetPBM描述的ASCII Portable Pixmap格式.我使用的是ASCII,易于处理但不节省空间.P3

这是一个例子:

awk '
BEGIN{
   # Output NetPBM P3 ASCII Portable Pixmap header
   printf "P3\n"
   # Output width and height
   width=600; height=500
   printf "%d %d\n",width,height
   # Output maximum range (i.e. 8-bit)
   printf "255\n"

   # Set up colors
   color[1]="255 0 0"     # red
   color[2]="0 255 0"     # green
   color[3]="0 0 255"     # blue
   color[4]="0 255 255"   # cyan
   color[5]="255 0 255"   # magenta
   color[6]="255 255 0"   # yellow
}

END{
   for(y=0;y<height;y++){
      for(x=0;x<width;x++){
         # Select new random color every 30 pixels so it comes out "blocky"
         if((x%30)==0){
            c=color[int(rand()*6)+1];
         }
         printf "%s\n",c
      }
   }
}' /dev/null | convert - result.png
Run Code Online (Sandbox Code Playgroud)

BEGIN块中,我输出PPM标题并设置我的颜色.在END块中,我运行一个循环,为图像的每个像素生成颜色.我/dev/null用作文件,因此awk不会挂起,它会进入END块.

因此,(中间)PPM文件在您的情况下将如下所示 - 显示标题和第一行的前3个绿色像素:

P3
600 500
255
0 255 0
0 255 0
0 255 0
...
...
Run Code Online (Sandbox Code Playgroud)

之后,我告诉ImageMagick将传入的PPM文件转换为PNG文件.

在此输入图像描述

如果你需要计算地球表面上的点之间的距离(我无法从你的问题中得知),你将需要Haversine公式,我在这里写了awk另一个答案的函数.

ImageMagick安装在大多数Linux发行版上,可用于OSX和Windows - 请参见此处.