Dictionary 从lat、long和value创建png文件
我有一个awk程序,它有一个Lat,long,value数组。假设lat/long是格线仓的中心。每个箱子都有一个值,我想创建一个png文件,根据该值对每个箱子进行颜色编码。对于每行lat/long/value(比如600X600像素或360000个像素),我希望生成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,50Dictionary 从lat、long和value创建png文件,dictionary,awk,Dictionary,Awk,我有一个awk程序,它有一个Lat,long,value数组。假设lat/long是格线仓的中心。每个箱子都有一个值,我想创建一个png文件,根据该值对每个箱子进行颜色编码。对于每行lat/long/value(比如600X600像素或360000个像素),我希望生成png文件。每个箱子现在代表大约30米乘30米的箱子大小。例如,见图。假设我希望在整个值范围内有5种颜色,比如0-10是蓝色,11-20是红色,等等 我掌握的资料如下: 38.0098946, 78.5092495 ,30 38.0
我仍然不理解您的问题,因为您的数据似乎与图表不匹配,但我可以向您展示如何使用您从
awk
中选择的颜色制作600x500 PNG
我认为最简单的方法是使用所描述的NetPBM
ASCII便携式Pixmap格式。我使用的是P3,因此它是ASCII码,易于处理,但不节省空间
以下是一个例子:
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
然后,我告诉ImageMagick将传入的PPM
文件转换为PNG
文件
如果你需要计算地球表面各点之间的距离(我无法从你的问题中判断),你需要哈弗森公式,我把它写成一个awk
函数作为另一个答案
ImageMagick安装在大多数Linux发行版上,可用于OSX和Windows-。作为我的另一个答案的替代,您可以编写一个
PGM
(便携式灰色地图)文件,该文件在我在另一个答案中链接到的同一个维基百科页面上描述。因此,在标题中,您将写入P2
以代替P3
,并且对于每个像素,您将写入您已经拥有的单个值(范围为0-50),而不是特定颜色的三个分量
他的方法的优点是,你可以在之后用查找表给图像上色,然后用颜色丁克,而不需要改变你的程序或比例
那么,假设您的程序(奇迹般地)产生了这个灰度渐变,其中的值在0-255之间变化(output.pgm
):
现在您要根据以下内容为其上色:
- 0-9=>红色
- 10-19=>黄色
- 20-29=>绿色
- 30-39=>深灰色
- 40-49=>浅灰色
- 50+=>洋红色
convert -size 10x1 xc:red xc:yellow xc:lime xc:gray40 xc:gray80 +append -background magenta -extent 256x1\! LUT.png
现在,您可以使用以下工具将该查找表应用于结果:
convert output.pgm LUT.PNG -clut result.png
png文件将反映10种颜色,其中值分为10个范围,每个范围1种颜色。这很难理解,但我确信,如果您花时间正确解释,这可以很容易完成。请显示您的前几个纬度和经度,以及相应的图的外观。例如,目前,你的经纬度和经纬度可能看起来像54度33分N和32度18分W,或者在100x100网格上的坐标可能是18和32。颜色与任何东西有什么关系?你的问题中没有提到颜色。另外,请不要在评论中解释事情-这确实很难阅读-相反,请单击原始问题下的
编辑,并澄清您的问题。仍然不明白。你的值是10,20,30,50,但所有的点都是红色的?我应该如何知道输出图像的尺寸?来吧,请再努力一点,否则你的问题会变得难以理解。好的,我更新了问题。我想这已经很清楚了。谢谢你的帮助。我所需要的就是把我的箱子(lat/long)映射到像素,但我想我可以做到。我可能会选择第二个选项,因为对于我将生成的许多其他png文件,我的比例不会改变。谢谢您可以将代码放置在开始
块中的结束
块中。那么你就不需要提供任何输入了。
convert output.pgm LUT.PNG -clut result.png