我在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
我仍然不理解您的问题,因为您的数据似乎与您的图表不匹配,但我可以向您展示如何使用您选择的颜色制作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 - 请参见此处.