Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 从lat、long和value创建png文件_Dictionary_Awk - Fatal编程技术网

Dictionary 从lat、long和value创建png文件

Dictionary 从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程序,它有一个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,50


我仍然不理解您的问题,因为您的数据似乎与图表不匹配,但我可以向您展示如何使用您从
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