Чтобы создать график ниже, я использовал данные, ссылки на которые есть в этом блоге .Теперь, если мы хотим объединить несколько источников данных в один график, нам нужно будет преобразовать один или другой в общую систему координат.Если спутниковые данные представлены в декартовых координатах x, y, z, возможно, самым простым решением было бы также преобразовать карту мира в декартовую систему.
Это можно сделать, как показано ниже.Параметр R
обозначает радиус сферы, на поверхности которой Gnuplot рисует карту мира.Он должен быть немного больше, чем r
, чтобы hidden3d
работал.Столбцы в файле world_110m.txt
имеют значения долготы (первый столбец) и широты (второй столбец), поэтому преобразование дается как (R*cos($1)*cos($2)):(R*sin($1)*cos($2)):(R*sin($2))
.В файле input.pnts.dat
я только что сгенерировал координаты точек на эллипсе с поворотом a=1.6
и b=1.2
вокруг оси x на 45 градусов (против часовой стрелки).Для реальных спутниковых данных необходимо изменить масштаб координат путем деления на радиус Земли, т. Е. Использовать ($1/Re):($2/Re):($3/Re)
вместо 1:2:3
, где Re
обозначает радиус в любых единицах измерения, которыми являются ваши данные (вероятно, в метрах, если судитьпервым сюжетом в вашем вопросе).
set terminal pngcairo
set output 'fig.png'
set xr [-2:2]
set yr [-2:2]
set zr [-2:2]
#color definitions
set border lw 1.5
set style line 1 lc rgb '#000000' lt 1 lw 2
set style line 2 lc rgb '#c0c0c0' lt 2 lw 1
unset key; unset border; set tics scale 0
set format ''
set angles degrees
set xyplane at -1
set view 56,81
set lmargin screen 0
set bmargin screen 0
set rmargin screen 1
set tmargin screen 1
set parametric
set isosamples 25
set urange[0:360]
set vrange[-90:90]
r = 0.99
R = 1.00
set hidden3d
#since we are using Cartesian coordinates, we don't want this
#set mapping spherical
splot \
r*cos(v)*cos(u),r*cos(v)*sin(u),r*sin(v) with lines linestyle 2, \
'world_110m.txt' u (R*cos($1)*cos($2)):(R*sin($1)*cos($2)):(R*sin($2)) w l lw 2 lc rgb 'black', \
'input.pnts.dat' u 1:2:3 w l lw 2 lc rgb 'red'
Это дает: