Project

General

Profile

MapRestServiceApi » History » Version 59

Andreas Kohlbecker, 04/16/2015 04:19 PM

1 1 Andreas Kohlbecker
2 2 Andreas Kohlbecker
3 1 Andreas Kohlbecker
4 8 Andreas Kohlbecker
5
# Map REST Service
6 1 Andreas Kohlbecker
7
8
9 12 Andreas Kohlbecker
----
10
11
_This is not a specification of a publicly available service but a proposal and guidance for the implementation of next version of the EDIT Map Service_
12
13 1 Andreas Kohlbecker
14 35 Andreas Kohlbecker
_The next version of the EDIT Map Service is being discussed on [[MapRestServiceApi_20_Discussion|MapRestServiceApi 2.0 Discussion]]_
15 34 Andreas Kohlbecker
16
17 1 Andreas Kohlbecker
----
18 21 Niels Hoffmann
19
20
{{>toc}}
21
22 12 Andreas Kohlbecker
23
24
25 20 Andreas Kohlbecker
## Servers
26
27
28
The map services are currently available from the following servers:
29
30
31 54 Andreas Kohlbecker
* Primary server: http://edit.africamuseum.be/edit_wp5.
32 1 Andreas Kohlbecker
33 54 Andreas Kohlbecker
* Secondary server: http://edit.br.fgov.be/edit_wp5
34 1 Andreas Kohlbecker
35 53 Andreas Kohlbecker
36 58 Andreas Kohlbecker
The EDIT map service offers 3 different service endpoints. :
37 1 Andreas Kohlbecker
38 29 Franck Theeten
39 58 Andreas Kohlbecker
 **Recommended endpoint:** 
40 55 Andreas Kohlbecker
41 29 Franck Theeten
42 1 Andreas Kohlbecker
* **rest_gen.php** (version 1 developped from May 2011): Merging [areas.php" and "points.php]() color theme both for areas (polygons) and distribution points. Output in JSON format is also available. 
43
44
45 58 Andreas Kohlbecker
 **End points only for testing and special purposes:** 
46
47
* **areas.php**  (version 1 dev. from 2007): displaying maps with areas (polygons) having a color theme dynamically defined by HTTP GET or POST parameters. Output in json format is also available.
48
49
* **points.php** (version 1 dev. from 2007): displaying maps with points for occurrence data. Position, legend and symbology of the points can be dynamically defined by HTTP parameters. Output in JSON format is also available.
50
51
 
52 53 Andreas Kohlbecker
Versions:
53 1 Andreas Kohlbecker
54
55 53 Andreas Kohlbecker
* version 1  - used by most of users (May 2011):
56 1 Andreas Kohlbecker
57 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1/points.php
58 1 Andreas Kohlbecker
59 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1/areas.php
60 29 Franck Theeten
61 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1/rest_gen.php
62 29 Franck Theeten
63 53 Andreas Kohlbecker
* version 1.1 - (20th of May 2011)
64 1 Andreas Kohlbecker
65 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1.1/points.php
66 1 Andreas Kohlbecker
67 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1.1/areas.php
68 1 Andreas Kohlbecker
69 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1.1/rest_gen.php
70 29 Franck Theeten
71 53 Andreas Kohlbecker
* version 1.2 - **recommended** 
72 29 Franck Theeten
73 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1.2/points.php
74 29 Franck Theeten
75 53 Andreas Kohlbecker
  * http://edit.africamuseum.be/edit_wp5/v1.2/areas.php
76 29 Franck Theeten
77 53 Andreas Kohlbecker
  * **http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php** 
78 29 Franck Theeten
79 20 Andreas Kohlbecker
80
81 12 Andreas Kohlbecker
82 1 Andreas Kohlbecker
## Introduction
83
84
85 3 Andreas Kohlbecker
The EDIT Map Service returns map images in response to a URL. Distribution and occurrence maps can be generated.
86 1 Andreas Kohlbecker
87 15 Andreas Kohlbecker
Each map is specified by attributes (URL query parameters) or in future by configuration files whose location is given by attributes to the service, which in turn will load the files to process them.
88 1 Andreas Kohlbecker
89 5 Andreas Kohlbecker
These configuration files are not Geoserver/WMS config files. These files are an alternative way to submit settings for a map to the wms wrapper. For example you can specify areas as described below or you tell the service  from where it can download a file which contains all the area definitions. Practical exampls of URI requests to a EDIT Map Service are found on [[MapRestServiceExamples|Map REST Service Examples]].
90 12 Andreas Kohlbecker
91
92
Some parts and features of this REST API is still in a creative process these considerations and thoughts are collected and discussed in [[MapRestServiceIdeas]].
93 1 Andreas Kohlbecker
94
95
96
## Conventions and general considerations
97
98
99 3 Andreas Kohlbecker
The EDIT Map Service is a service wrapping around a WMS geoserver. wms query parameters can be used in addition to the API attributes defined here. The wrapper internally construct the WMS GetMap request from the REST API attributes.
100 1 Andreas Kohlbecker
101
102
The request URIs must conform to [RFC 3986](http://tools.ietf.org/html/rfc3986.)
103
104
105 3 Andreas Kohlbecker
The EDIT Map Service ignores wms attributes if a substitute is defined in this specification, e.g.:
106 1 Andreas Kohlbecker
107
108 19 Andreas Müller
* **request=!GetMap**  -              not needed
109 1 Andreas Kohlbecker
110
* **Format          ** -             optional (need to define default : png?)
111
112
* **bbox              ** -           required!
113
114
* **width, height**         -        replaced by **ms** 
115
116
* **layers               ** -       replaced by **l**  optional
117
118
* **SRS                  ** -      (Spatial Reference System (SRS) identifier ) optional ( Defines projections in WMS GetMap request. Using EPSG:4326 (WGS84 lat/long) is the default but can be changed on-the-fly to different UTM and much more zone specific.)
119
120
121
In attribute names the following letters are used as abbreviations for:
122
123
124
* d: data
125
126
* s: style / size
127
128
* a: area
129
130
* r: resolution
131
132
* g: grid
133
134
* o: occurrence
135
136
* c: cell  
137
138
* l: layer
139
140
* m: map image
141
142
143
Since there is a size limitation for URLs the API syntax is soze optimizes where possible. This is mainly achieved by avoiding redundancies and could be further improved by reducing the need for separators. 
144
145
146
147
### Reserved Characters
148
149
150
The colon ':' is used as delimiter between a leading identifier and the data, style ...
151
152
153
The semi-colon ";" is always used as delimiter between entries of the same data type.
154
155
156
The comma "," character delimits the sub-entries of which a singel entry can be composed (e.g: <longitude>,<latitude>).
157
158
159
Data entities of different types which together specifiy a character out of a matrix (or tree) of possible characters are delimited by the dash "/" (e.g: <shape>/<size>/<color>).
160
161
162
There is no delimiter to concatenate multiple lists of entries into a single attribute. In this case the same attribute is used multiple time in the request URI, every time assigned to another set of entries ( e.g.: @od=1:38.326,-0.822;38.328,-0.542&od=3:40.78,-4.009;43.461,-5.412@).
163
164
165
166
### Syntax Definition
167
168
169 22 Andreas Kohlbecker
The grammar definition which is adapted from the [Backus-Naur Form (BNF)](http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form) is using the following characters:
170 1 Andreas Kohlbecker
171
172
Brackets "[]" are used to enclose optional attributes.
173
174
175
Angles "<>" are used to enclose data component names.
176
177
178 22 Andreas Kohlbecker
The expressions "[[]"|and "[;..]]" indicate that the preceding element can be repeated multiples times using the particular delimiter.
179 1 Andreas Kohlbecker
180
181 22 Andreas Kohlbecker
The pipe character "|" is being used to separate optional entries. 
182 1 Andreas Kohlbecker
183 22 Andreas Kohlbecker
184
185 9 Andreas Kohlbecker
## Map Services
186 1 Andreas Kohlbecker
187
188 9 Andreas Kohlbecker
There are two different services which are used for creating maps. One service for creating maps and another one being responsible for creating the legends. The map created by the map service can directly include legends in which case the map service is using the legend service internally. The services are registered to the following URI sub paths:
189 1 Andreas Kohlbecker
190
191 10 Andreas Kohlbecker
* map service: @ ./map/ @
192 1 Andreas Kohlbecker
193 10 Andreas Kohlbecker
* legend service: @ ./legend/ @
194 1 Andreas Kohlbecker
195
196
197
198 59 Andreas Kohlbecker
### Response Content Types
199
200
201
The map service can respond with two different content types which are: 
202
203
204
* **Map images** - this is the default response content type
205
206
* **JSONP** - this is useful in order to use the maps in a dynamic map viewer like openlayers.
207
208
209
To enable the JSONP response type you need to add the img query parameter to the request URL:
210
211
212
~~~
213
img=false
214
~~~
215
 
216
217 10 Andreas Kohlbecker
218
## Layers
219
220
221 9 Andreas Kohlbecker
For wms areas are specified in shape files (polygons in *.shp + area index in *.shx).
222 1 Andreas Kohlbecker
223 10 Andreas Kohlbecker
224 1 Andreas Kohlbecker
The map service offers a set of default raster data and shape files e.g. for all 4 TDWG regions, ISO regions etc.
225 9 Andreas Kohlbecker
226 10 Andreas Kohlbecker
227 1 Andreas Kohlbecker
These predefined layers can be selected by the layer name, e.g. tdwg1 for TDWG regions level 1.  
228
229
230 9 Andreas Kohlbecker
 **Attribute:** 
231 10 Andreas Kohlbecker
232 1 Andreas Kohlbecker
233 10 Andreas Kohlbecker
234
~~~
235 22 Andreas Kohlbecker
(layer) l=<layer name>[:[<layer style id>][<shp file url>|<raster data url>]];...
236 1 Andreas Kohlbecker
~~~
237
238 13 Andreas Kohlbecker
The (layer) "l" attribute is an facultative one it is not needed if only predefined layers are used for a map.
239
240
241 1 Andreas Kohlbecker
Multiple layer definitions are separated by dash characters.
242
243
244
Where
245
246
* `<layer name>` is the name of either a default shape file offered by the server or a new name.
247
248
* `<layer style id>` is the identifier of a layerstyle 
249
250
251
The order of <layer name> parameters in the attribute specifies the order of the layer stack for the map image from bottom to top. Raster data must be the first on the list, otherwise you cannot see vector layers.
252
253
254
In the latter case the optional attribute `<shp file url>` must be given to specify a *.shp file to processed by the server. The name of the also required *.shx (index-) file is inferred from @<shp file url>@. 
255
256
257 11 Andreas Kohlbecker
 **Available Layers (<layer name>)** 
258
259
260 24 Andreas Müller
* tdwg1 ([overview](http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:tdwg_level_1&styles=&bbox=-180.0,-90.0,180.0,83.624&width=684&height=330&srs=EPSG:4326&format=application/openlayers))
261 11 Andreas Kohlbecker
262 24 Andreas Müller
* tdwg2 ([overview](http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:tdwg_level_2&styles=&bbox=-180.0,-90.0,180.0,83.624&width=684&height=330&srs=EPSG:4326&format=application/openlayers))
263 11 Andreas Kohlbecker
264 24 Andreas Müller
* tdwg3 ([overview](http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:tdwg_level_3&styles=&bbox=-180.0,-90.0,180.0,83.624&width=684&height=330&srs=EPSG:4326&format=application/openlayers))
265 11 Andreas Kohlbecker
266 24 Andreas Müller
* tdwg4 ([overview](http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:tdwg_level_4&styles=&bbox=-180.0,-90.0,180.0,83.624&width=684&height=330&srs=EPSG:4326&format=application/openlayers))
267 11 Andreas Kohlbecker
268 23 Franck Theeten
* earth
269 11 Andreas Kohlbecker
270 36 Franck Theeten
* e_provinces
271
272 37 Franck Theeten
* several vmap0 layers (http://en.wikipedia.org/wiki/Vector_Map http://gis-lab.info/qa/vmap0-eng.html)
273 1 Andreas Kohlbecker
274 37 Franck Theeten
 
275 38 Franck Theeten
~~~
276
currently (8/8/2011) there are 76 vmap0 layers in the EDIT Geoserver WMS. 
277
     They are (roughly) divided in 4 zones:
278
         * Europe (layers beginning with 'vmap0_eu' in the EDIT WMS)
279
         * Asia and Oceania (layers beginning with 'vmap0_as' in the EDIT WMS 
280
         * Africa and South America (layers beginning with 'vmap0_afsa' in the EDIT WMS)
281
         * North America (layers beginning with 'vmap0_na' in the EDIT WMS)
282
~~~
283
* The complete European dataset has been imported, with political (borders of countries and national subdivisions (like Belgian and Dutch Provinces, French Regions, German Landers, Italian regions Swiss Canton etc...) layers,
284
285
 ecological layers (soil, rivers, vegetation}, layers on infrastructure and habitat (urban areas, roads, railways) etc...
286
287
* Only parts of the information have been imported for the 3 other zones , but they all features at least the political boundaries:
288
289
* Europe: http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:vmap0_eur_bnd_political_boundary_a&styles=&bbox=-31.266,30.0,180.0,81.857&width=1344&height=330&srs=EPSG:4326&format=application/openlayers
290
291
* Asia and Oceania: http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:vmap0_na_bnd_political_boundary_a&styles=&bbox=-180.0,-30.531,-7.921,83.627&width=512&height=339&srs=EPSG:4326&format=application/openlayers
292
293
* Africa and South America: http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:vmap0_afsa_bnd_political_boundary_a&styles=&bbox=-180.0,-30.531,-7.921,83.627&width=512&height=339&srs=EPSG:4326&format=application/openlayers
294
295
* North America: http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:vmap0_na_bnd_political_boundary_a&styles=&bbox=-180.0,-30.531,-7.921,83.627&width=512&height=339&srs=EPSG:4326&format=application/openlayers
296
297
298
The provinces are named and retrievable through "GetFeature" WMS queries.
299
300
301
* -It is possible to ask for more layers as the complete Vmap0 has been loaded into the PostGIS database feeding the EDIT WMS.
302
303
304
* -It is also possible to aggregate together several layers in oen alias with one specific style, but this operation is tedious as it requires the manual configuration of several SLD files:
305
306
307
308
*  e.g: http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=vmap0_world_basic&styles=&bbox=-180.0,-90.0,180.0,90.0&width=660&height=330&srs=EPSG:4326&format=application/openlayers
309
310
311
* -An aggregate layer of all the national subdivisions of the world is available. 
312
313
314
* Its name is "*vmap0_world_national_boundaries*"
315
316
http://edit.br.fgov.be:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=vmap0_world_national_boundaries&styles=&bbox=-180.0,-90.0,180.0,83.627&width=684&height=330&srs=EPSG:4326&format=application/openlayers
317
318
319
  
320
321
  
322
323
324
----
325
326 11 Andreas Kohlbecker
 
327 1 Andreas Kohlbecker
328 38 Franck Theeten
For a complete list of currently available layers see [geoserver layer preview](http://edit.br.fgov.be:8080/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.demo.MapPreviewPage)
329 25 Andreas Müller
330
331 27 Andreas Müller
 **Layer styles** 
332
333
334 1 Andreas Kohlbecker
Layer styles are defined by the layer_style attribute
335
336
337
~~~
338
(layer style) ls=<layer_style_id>:[<line_color>][/<line_width>][/<stroke_style_id>];..
339
~~~
340
341
Where 
342
343
* `layer_style_id` is the layers identifier
344
345
* `line_color` is the color of border lines used in the layer
346
347
* `line_width` is the width of the border lines
348
349
* `stroke_style_id` is an id for the stroke (still to be defined)
350 11 Andreas Kohlbecker
351 1 Andreas Kohlbecker
352
353
354
> [Pere]
355
356
> Shapefiles is the ESRI (propietary) format for storing vector data. The most performant way of storing areas are in postGIS database. 
357
358
> We could insert the .shp in postGIS and try to “inform” Geoserver of this new layer... something like this has been done before but it can be complicated. 
359
360
>
361
362
363
> Another issue is to insert information (CSV files or whatever, even shapefile)  in an already existing postGIS database (as the table already exists and is defined in Geoserver, we just need an userid filter to get the data we just have inserted now; this is the technique used in mapViewer to filter the CSV data you insert). 
364
365
>
366
367
>> [[Andreas|K]] So the solution could be like the following:
368
369
>> - We allow for example 20 extra layers as postGIS tables
370
371
>> - Shapefiles (or GML?) are inserted by shp2pgsql into one of the postGIS tables
372
373
>> - An md5 hash of the according URL parameter token ( <layer name>[[<shp|file url>]][[<raster|data url>]] ) is used as key to identify, i.e. to filter the shapes for this layer definition for the geoserver. Otherwise 1) you would have to add a URL queryparameter user=<username>
374
375
376
377
## Areas
378
379
380 23 Franck Theeten
*A.Attribute (for all layers)*: 
381 1 Andreas Kohlbecker
382
~~~
383 23 Franck Theeten
  (area data) ad=<layer name>:<field name>:<area set>[;..]
384
      <area set> ::= <area style ids>:<area id list>
385
      <area id list> ::= <area id>[,..]
386
~~~
387
388
Where 
389
390
391
* `<field name>` is the name of the field in the WMS layer that contains the <area style ids>
392
393
* `<area style ids>` is a string of one letter `[a-z,A-Z]` area style ids
394
395
* `<area id>` either is the shape index as defined in the *.shx file or a area name. Area names are internally translated by the service ito shape index.
396
397
398
e.g:
399
400 57 Andreas Kohlbecker
http://edit.africamuseum.be/edit_wp5/v1/areas.php?l=cyprusdivs&ad=cyprusdivs:bdcode:a:4|b:2|c:8&as=a:000000~0.1|b:~0.1|c:000000~0.1&title=a%3ACasual%3F|b%3Anaturalised|c%3AIndigenous&l=tdwg4&ad=cyprusdivs:bdcode:a:4|b:2|c:8&as=a:000000~0.1|b:~0.1|c:000000~0.1&title=a:Casual%3F|b:naturalised|c:Indigenous&img=false&ms=500&bbox=32,34,35,36&labels=1&img=true&ms=500&img=true&legend=1&mlp=3&mc_s=Georgia,15,blue&mc=&recalculate=false
401 23 Franck Theeten
402
403
404
*B.Attribute (optional for precoded TDWG layers)*: 
405
406
~~~
407 1 Andreas Kohlbecker
  (area data) ad=<layer name>:<area set>[;..]
408
      <area set> ::= <area style ids>:<area id list>
409
      <area id list> ::= <area id>[,..]
410
~~~
411
412
Where 
413
414
415 23 Franck Theeten
* `<area style ids>` is a string of one letter `[a-z,A-Z]` area style ids
416 1 Andreas Kohlbecker
417 23 Franck Theeten
* `<area id>` either is the shape index as defined in the *.shx file or a area name. Area names are internally translated by the service ito shape index.
418 1 Andreas Kohlbecker
419 23 Franck Theeten
* `<field name>` (2nd parameter of previous case) can be dropped in this case.  
420 1 Andreas Kohlbecker
421
422
423
## Area Style
424
425
426
*Attribute*: 
427
428
~~~
429
  (area style) as=<area style id>:<area style definition>[;..]              
430
  
431
   <area style definition> ::= <pattern id>/<color>[/<style_label>] -  defines a pattern and foreground color to fill a shape with
432
   <area style definition> ::= <color>[/<style_label>] -  defines a background (fill) color for a shape
433
~~~
434
Where 
435
436
* `<pattern id>` is a number from 0 to 99 identifying a predefined fill pattern
437
438
* `<color>` is a RGB hex code always 6 letters long
439
440
* `<style_label>` is the label of the style in the legend
441
442
443
*Further improvement*: 
444
445
446
  Removing the unnecessary colons used as separator, they are just for readability. 
447
448
449
  Area styles can easily parsed without.
450 39 Franck Theeten
451
452
### Point Style
453
454
455
*attribute*:
456
457
458
~~~
459
os=indexer:shape/RGB_fillcolor/size_of_shape/label
460
(1 indexer; 4 parameters separated by “/”):
461
~~~
462
463
e.g:
464
465
os=1:c/0000FF/17/others
466
467
468
indexer	        =	1 (can also be text)
469
470
471
shape		= 	“c” (circle). other possible values: "c"=>circle; "s" =>star; "sq"=> square
472
473
474
fill color	=	0000FF (Blue)
475
476
477
size		=	17
478
479
480
label		= 	"others"
481
482
483
                         
484
485 1 Andreas Kohlbecker
486
487
488
## Grids
489
490
491
492
*Attributes*: 
493
494
495
~~~
496
(grid resolution) gr=<layer name>[:<layer style id>]:<long>[,<lat>] - specifies a grid layer
497
498
(grid data)       gd=<layer name>:<cell set>[;..]
499
                  <cell set> ::= <cell style id>:<cell id>
500
~~~
501
        
502
503
       
504
Where 
505
506
      `<layer name>` is the name of a predefined grid layer or a new name identifying the grid specified by the additional attributes.
507
508
      `<long>` is horizontal resolution in degrees eg. 1, 10, 0.6, 0.1 ...
509
510
511
      `<lat>` This optional attribute is the vertical resolution in degrees eg. 1, 10, 0.6, 0.1. if felt out the `<long>` attribute will taken instead
512
513
514
      <cell id> is the identifier of a cell concatenated of the horizontal and vertical cell number (figure) or the cell identifier of a predefined grid layer like UTM 25000. 
515
516
517
~~~
518
                  0   1 
519
                +---+---+
520
              0 | 00| 01|
521
                +---+---+
522
              1 | 10| 11|
523
                +---+---+
524
~~~
525
526
> If grid follows an already defined projection and resolution (for example UTM 25000 resolution that can be seen in mapViewer) we already have in our database the corresponding code for each cell. This code can be labeled (shown on the map). 
527
528
>
529
530
>> So we can ad  the following to the proposal (see above..)
531
532
                
533
~~~
534
      <cell style id>  is the id of a cell style .... [TODO]
535
~~~
536
537
 **Open questions:** 
538
539
540
* how to define style labels for the longitude and latitude axis?
541
542
543
544
## Occurrences
545
546
547
*Attributes*: 
548
549
550
~~~
551
  (occurrence data)  od=<occurrence set id>:<occurrence entry list>
552
  <occurrence entry list> ::= <occurrence entry>[;..]
553
  <occurrence entry> ::= <long>,<lat>[,<precision>]
554
  
555
  (occurrence style) os=<occurence style definition>[;..]
556
  <occurence style definition> ::= <occurrence set id>:<style>/<color>
557
~~~
558
559
Where
560
561
562
* `<occurrence set id>` is an number [0-9] on 1..n digits
563
564
* `<long>` is longitude in degrees of the occurrence point
565
566
* `<lat>`  is latitude in degrees of the occurrence point
567
568
* `<precision>` precision 
569
570
* `<color>` is a RGB hex code always 6 letters long
571
572
* `<style>` either one letter [[a-z|A-Z]] except 'u' and 'z' which are used for
573
574
  * u: u<unicode hex code(4 letters)> unicode character as occurrence point icon  
575
576
  * z: z<number> custom style reserved for future use  
577
578
  * c: circle
579
580
  * s: square
581
582
  * ....
583
584
585 9 Andreas Kohlbecker
586
## Legends
587
588
589
Legends can be either be horizontal or vertical legends (see below) you can place the legend on top or bottom or at the left or right side  or at the edges of the map. 
590
591
592
~~~
593
 (map legend type) mlt=<legend type id>
594
  <legend type id> ::= h|v // see below for explanation
595
596
 (map legend position) mlp=
597
  <legend position id> ::= 1|2|3|4|5|6|7|8  // see below for explanation
598
~~~
599
600
601
 **horizontal legend** (@mlt=h@):
602
603
~~~
604
item 1
605
item 2
606
item 3
607
~~~
608
609
 **vertical legend** (@mlt=v@):
610
611
~~~
612
item 1 item2 item 3
613
item 4 item 5 item 6
614
~~~
615
616
*legend positioning*:
617
618
~~~
619
+-----+
620
|1 2 3|
621
|4   5|
622
|6 7 8|
623
+-----+
624
~~~
625 1 Andreas Kohlbecker
626
627
## Map Image
628
629
630
Attributes:
631
632
~~~
633
  (map size)        ms=[<units>:][<width>][,<height>]
634
635
  (map resolution)  mr=<pdi>
636
~~~
637
  
638
639
Where 
640
641
* `<units>` is optional an is one of px, mm, cm, .... defaults is px
642
643
* `<pdi>` is the resolution of the image in dpi, default is 72dpi
644
645
646
*Open questions*:
647
648
649
* color space / profile definition could be important for print quality maps required? how to ?
650
651
* how to style and configure legends?
652 16 Pere Roca Ristol
653
654
655
## Labels
656
657
658
How to define for each layer if we are interested (or not) to view it's label?
659
660
Andreas K. suggested these two main options:
661
662
663
1) extend the labels parameter:
664
665
666
labels =<layer name>:[0|1],...
667
668
669
2) extend the layers parameter with something like:
670
671
672
(layer) l=<layer name>[[[<layer|style id>]],[[<labels_on>]|[/<shp file url>]][[<raster|data url>]]];...
673 28 Franck Theeten
674
675
676
677
## Background WMS layer
678
679
680
The REST services also provide possibility to display background layer coming from external WMS:
681
682
683
There are 3 parameters to take into consideration
684
685
686
  
687
688
1)   "externalwms"       : The base URL of the WMS to query ("root" of the GetCapabilities" request.
689
690
  
691
692
2)   [externalwmsversion]() The version of the WMS standard used by the server (OPTIONAL: default value is "1.1.1")
693
694
  
695
696
3)   "externalwmslayer"  : A list of layers coming from the same WMS (comma-separated) 
697
698
699
The complete syntax is the following:
700
701
702
~~~
703
externalwms=[base URI of the WMS]&externalwmsversion=[externalwmsversion]&externalwmslayer=[name_layer_1][,name_layer_2][,...name_layer_n]
704
~~~
705
706
707
708
e.g.:
709
710
711
712
~~~
713 57 Andreas Kohlbecker
http://edit.africamuseum.be/edit_wp5/v1/rest_gen.php?od=1:52.17,14.26|52.18,14.26|52.16,14.27|52.16,14.28|52.16,14.29|52.29,14.26|52.28,14.39|52.28,14.41|52.2,14.43|52.19,14.52|52.12,14.46|52.13,14.46|52.11,14.47|52.12,14.47|52.13,14.47|52.18,14.49|52.19,14.49|52.06,14.5|52.07,14.5|52.09,14.5|52.06,14.51|52.07,14.51|52.21,14.51|52.06,14.52||2:52.08,14.53|52.09,14.53|52.06,14.55&os=1:s/8B0000/7/all||2:c/0000FF/7/others&l=earth:d&ad=vmap0_eur_pop_built_up_a:nam:d:%||vmap0_eur_pop_built_up_a:nam:a:EICHWALDE||vmap0_eur_pop_built_up_a:nam:b:COTTBUS||vmap0_eur_pop_built_up_a:nam:c:ZERNSDORF,BINDOWBRUCK,SENZIG&as=a:984ea3|b:ff7f00,1,0.1|c:ffff33,,0.1|d:FFCEFD,FFCEFD,0.1&title=a:EICHALDE|b:COTTBUS|c:ZERNSDORF,BINDOWBRUCK,SENZIG|d:others%20municipalities&img=true&recalculate=true&legend=1&mlp=1&ms=400,350&bbox=13.50,51.4,15,52.7&recalculate=false&callback=true&externalwms=http://isk.geobasis-bb.de/ows/dnm.php&externalwmsversion=1.1.1&externalwmslayer=bg%2Cvegetation%2Cgewaesser%2Csiedlung%2Cbln%2Cbrb%2Ctransport%2Cverkehrsobjekte%2Cstrassennamen%2Cortsnamen%2Cgewaessernamen
714 28 Franck Theeten
~~~
715 40 Franck Theeten
716
717 43 Franck Theeten
718 44 Franck Theeten
## Available layers
719
720
721
722 49 Franck Theeten
### 1) topp:em_tiny_jan2003 _Added 2013/07/25_
723 48 Franck Theeten
  
724
(layer originating from the Helsinki Natural history museum for Euro+Med areas : http://dev.e-taxonomy.eu/trac/ticket/2707). 
725 1 Andreas Kohlbecker
726
727 43 Franck Theeten
728 48 Franck Theeten
729
730 1 Andreas Kohlbecker
## Available Projections
731
732 48 Franck Theeten
733
734 50 Franck Theeten
### 1) EPSG:7777777 _Added 2013/07/25_
735 48 Franck Theeten
736 1 Andreas Kohlbecker
Projection for topp:em_tiny_jan2003
737 48 Franck Theeten
738
WKT (geoserver "epsg.properties):
739
740 51 Andreas Kohlbecker
~~~
741 52 Andreas Kohlbecker
7777777=PROJCS[
742
	"Lambert_Conformal_Conic",
743
	GEOGCS[
744
		"GCS_Unknown",
745
		DATUM[
746
			"D_European_1950",
747
			SPHEROID[
748
				"International_1924",
749
				6378388,297
750
			]
751
		],
752
		PRIMEM[
753
			"Greenwich",
754
			0
755
		],
756
		UNIT[
757
			"Degree",
758
			0.017453292519943295
759
		]
760
	],
761
	PROJECTION[
762
		"Lambert_Conformal_Conic"
763
	],
764
	PARAMETER[
765
		"standard_parallel_1",
766
		42
767
	],
768
	PARAMETER[
769
		"standard_parallel_2",
770
		56
771
	],
772
	PARAMETER[
773
		"latitude_of_origin",
774
		35
775
	],
776
	PARAMETER[
777
		"central_meridian",
778
		24
779
	],
780
	PARAMETER[
781
		"false_easting",
782
		3000000
783
	],
784
	PARAMETER[
785
		"false_northing",
786
		100000
787
	],
788
	UNIT[
789
		"Meter",
790
		1
791
	]
792
]
793 1 Andreas Kohlbecker
~~~
794
Proj4 (PostGIS):
795
796 51 Andreas Kohlbecker
~~~
797 52 Andreas Kohlbecker
+proj= lcc + 42 + 56 + 35 + 24 + 3000000 + 100000 (id in the spatial_ref_sys_table is 7777777)
798 51 Andreas Kohlbecker
~~~
799 56 Andreas Kohlbecker
800
801
802
## latest developments
803
804
805
Preliminary documentation on experimental features are found in the following tickets (only accessible for registered developers after login):
806
807
808
*  #4150 (compile edit map service documentation of new features in version v1.4_dev and v1.5_dev)