File: x19c.m

package info (click to toggle)
plplot 5.15.0%2Bdfsg-19
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 31,312 kB
  • sloc: ansic: 79,707; xml: 28,583; cpp: 20,033; ada: 19,456; tcl: 12,081; f90: 11,431; ml: 7,276; java: 6,863; python: 6,792; sh: 3,274; perl: 828; lisp: 75; makefile: 50; sed: 34; fortran: 5
file content (268 lines) | stat: -rw-r--r-- 8,532 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
## Copyright (C) 1998, 1999, 2000 Joao Cardoso.
##
## This program is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by the
## Free Software Foundation; either version 2 of the License, or (at your
## option) any later version.
##
## This program is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## General Public License for more details.
##
## This file is part of plplot_octave.
## It is based on the corresponding demo function of PLplot.

1;

## Shows two views of the world map.

function ix19c
  ## Parse and process command line arguments

  ## (void) plparseopts( &argc, argv, PL_PARSE_FULL );

  ## Longitude (x) and latitude (y)

  miny = -70;
  maxy = 80;

  plinit();

  ## Cartesian plots
  ## Most of world

  minx = -170;
  maxx = minx + 360;

  ## Setup a custom latitude and longitude-based scaling function.
  plslabelfunc( @geolocation_labeler, [] );

  plcol0( 1 );
  plenv( minx, maxx, miny, maxy, 1, 70 );
  plmap( [], "usaglobe", minx, maxx, miny, maxy );

  ## The Americas

  minx = 190;
  maxx = 340;

  plcol0( 1 );
  plenv( minx, maxx, miny, maxy, 1, 70 );
  plmap( [], "usaglobe", minx, maxx, miny, maxy );

  ## Clear the labeling function
  plslabelfunc( [], [] );

  ## Polar, Northern hemisphere

  minx = 0;
  maxx = 360;

  plenv( -75., 75., -75., 75., 1, -1 );
  plmap( @mapform19, "globe", minx, maxx, miny, maxy );

  pllsty( 2 );
  plmeridians( @mapform19, 10.0, 10.0, 0.0, 360.0, -10.0, 80.0 );

  ## Polar, Northern hemisphere, this time with a PLplot-wide transform

  minx = 0;
  maxx = 360;

  plstransform( @map_transform, [] );

  pllsty( 1 );
  plenv( -75., 75., -75., 75., 1, -1 );
  ## No need to set the map transform here as the global transform will be
  ## used.
  plmap( [], "globe", minx, maxx, miny, maxy );

  pllsty( 2 );
  plmeridians( [], 10.0, 10.0, 0.0, 360.0, -10.0, 80.0 );

  ## Show Baltimore, MD on the map
  plcol0( 2 );
  plssym( 0.0, 2.0 );
  x = -76.6125;
  y = 39.2902778;
  plpoin( x, y, 18 );
  plssym( 0.0, 1.0 );
  plptex( -76.6125, 43.0, 0.0, 0.0, 0.0, "Baltimore, MD" );

  ## For C, this is how the global transform is cleared
  plstransform( [], [] );

  ## An example using shapefiles. The shapefiles used are from Ordnance Survey, UK.
  ## These were chosen because they provide shapefiles for small grid boxes which
  ## are easilly manageable for this demo.

  pllsty( 1 );

  minx = 240570;
  maxx = 621109;
  miny = 87822;
  maxy = 722770;
  plscol0( 0, 255, 255, 255 );
  plscol0( 1, 0, 0, 0 );
  plscol0( 2, 150, 150, 150 );
  plscol0( 3, 0, 50, 200 );
  plscol0( 4, 50, 50, 50 );
  plscol0( 5, 150, 0, 0 );
  plscol0( 6, 100, 100, 255 );

  minx = 265000;
  maxx = 270000;
  miny = 145000;
  maxy = 150000;
  plscol0( 0, 255, 255, 255 ); ##white
  plscol0( 1, 0, 0, 0 );       ##black
  plscol0( 2, 255, 200, 0 );   ##yelow for sand
  plscol0( 3, 60, 230, 60 );   ## green for woodland
  plscol0( 4, 210, 120, 60 );  ##brown for contours
  plscol0( 5, 150, 0, 0 );     ##red for major roads
  plscol0( 6, 180, 180, 255 ); ##pale blue for water
  plscol0( 7, 100, 100, 100 ); ##pale grey for shingle or boulders
  plscol0( 8, 100, 100, 100 ); ##dark grey for custom polygons - generally crags

  plcol0( 1 );
  plenv( minx, maxx, miny, maxy, 1, -1 );
  pllab( "", "", "Martinhoe CP, Exmoor National Park, UK (shapelib only)" );

  ##Beach
  plcol0( 2 );
  beachareas = [ 23, 24 ]';
  plmapfill( [], "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, beachareas );

  ##woodland
  plcol0( 3 );
  nwoodlandareas = 94;
  woodlandareas = (0:nwoodlandareas-1)' + 218;
  plmapfill( [], "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, woodlandareas );

  ##shingle or boulders
  plcol0( 7 );
  shingleareas = [ 0, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 217, 2424, 2425, 2426, 2427, 2428, 2491, 2577 ]';
  plmapfill( [], "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, shingleareas );

  ##crags
  plcol0( 8 );
  ncragareas = 2024;
  cragareas = (0:ncragareas-1)' + 325;
  plmapfill( [], "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, cragareas );

  ##draw contours, we need to separate contours from high/low coastline
  ##draw_contours(pls, "ss/SS64_line", 433, 20, 4, 3, minx, maxx, miny, maxy );
  plcol0( 4 );
  plmapline( [], "ss/ss64ne_Height_Contours", minx, maxx, miny, maxy, [] );

  ##draw the sea and surface water
  plwidth( 0.0 );
  plcol0( 6 );
  plmapfill( [], "ss/ss64ne_Water_Area", minx, maxx, miny, maxy, [] );
  plwidth( 2.0 );
  plmapline( [], "ss/ss64ne_Water_Line", minx, maxx, miny, maxy, [] );

  ##draw the roads, first with black and then thinner with colour to give an
  ##an outlined appearance
  plwidth( 5.0 );
  plcol0( 1 );
  plmapline( [], "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, [] );
  plwidth( 3.0 );
  plcol0( 0 );
  plmapline( [], "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, [] );
  plcol0( 5 );
  majorroads = [ 33, 48, 71, 83, 89, 90, 101, 102, 111 ]';
  plmapline( [], "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, majorroads );

  ##draw buildings
  plwidth( 1.0 );
  plcol0( 1 );
  plmapfill( [], "ss/ss64ne_Building_Area", minx, maxx, miny, maxy, [] );

  ##labels
  plsfci( 0x80000100 );
  plschr( 0, 0.8 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "MARTINHOE CP", minx, maxx, miny, maxy, 202 );
  plschr( 0, 0.7 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale\nDown", minx, maxx, miny, maxy, 13 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "South\nDown", minx, maxx, miny, maxy, 34 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Martinhoe\nCommon", minx, maxx, miny, maxy, 42 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woody Bay", minx, maxx, miny, maxy, 211 );
  plschr( 0, 0.6 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Mill Wood", minx, maxx, miny, maxy, 16 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale Wood", minx, maxx, miny, maxy, 17 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 1.0, "Bodley", minx, maxx, miny, maxy, 31 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.0, "Martinhoe", minx, maxx, miny, maxy, 37 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woolhanger\nCommon", minx, maxx, miny, maxy, 60 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "West Ilkerton\nCommon", minx, maxx, miny, maxy, 61 );
  plmaptex( [], "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Caffyns\nHeanton\nDown", minx, maxx, miny, maxy, 62 );

  plend1();
endfunction

function [xt, yt] = map_transform( x, y, data )
    radius = 90.0 - y;
    xt    = radius .* cos( x * pi / 180.0 );
    yt    = radius .* sin( x * pi / 180.0 );
endfunction

##--------------------------------------------------------------------------
## mapform19
##
## Defines specific coordinate transformation for example 19.
## Not to be confused with mapform in src/plmap.c.
## x[], y[] are the coordinates to be plotted.
##--------------------------------------------------------------------------

function [xp, yp] = mapform19( x, y )
  [xp, yp] = map_transform( x, y, [] );
endfunction

## "Normalize" longitude values so that they always fall between -180.0 and
## 180.0
function norm = normalize_longitude( lon )
  if ( lon >= -180.0 && lon <= 180.0 )
    norm = lon;
  else
    times = floor( ( abs( lon ) + 180.0 ) / 360.0 );
    if ( lon < 0.0 )
      norm = lon + 360.0 * times;
    else
      norm = lon - 360.0 * times;
    endif
  endif
endfunction

## A custom axis labeling function for longitudes and latitudes.
function label = geolocation_labeler( axis, value, data )

  global PL_X_AXIS PL_Y_AXIS
  if ( axis == PL_Y_AXIS )
    label_val = value;
    if ( label_val > 0.0 )
      direction_label = " N";
    elseif ( label_val < 0.0 )
      direction_label = " S";
    else
      direction_label = "Eq";
    endif
  elseif ( axis == PL_X_AXIS )
    label_val = normalize_longitude( value );
    if ( label_val > 0.0 )
      direction_label = " E";
    elseif ( label_val < 0.0 )
      direction_label = " W";
    else
      direction_label = "";
    endif
  endif
  if ( axis == PL_Y_AXIS && value == 0.0 )
    ## A special case for the equator
    label = sprintf( "%s", direction_label );
  else
    label = sprintf( "%.0f%s", abs( label_val ), direction_label );
  endif
endfunction

ix19c