source: main/trunk/ibisph-view/src/main/webapp/WEB-INF/config/leaflet_maps.xml @ 13418

Last change on this file since 13418 was 13418, checked in by Garth Braithwaite, 3 years ago

admin, view - finished initiatives xml, dataset and view dimension xml structs. Before moving datasets into IP xml. View added default attribution for maps.

File size: 18.1 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2
3<MAPS>
4        <!--
5                This configuration file is used for (2) purposes:
6                1) Provides the list of available map definitions that can be selected 
7                from an interface like the query builder's display step.  This structure
8                uses the MAP/TITLE and NAME elements.
9                2) Provides adopter/site specific json type map configuration "options"
10                which control what controls the map displays and where, what layers,
11                colors/styles, and how the maps interact with the user (functions). 
12                The map json configuration options are contained within the
13                LEAFLET_OPTIONS_JSON element.  The actual options are mostly contained
14                within this file.  The options consist of a base defintion which is
15                applied to all maps definitions via MAPS/LEAFLET_OPTIONS_JSON and a
16                specific named map options configuration via the
17                MAP[NAME=xyz]/LEAFLET_OPTIONS_JSON which is merged with the base options.
18
19                The intent is to provide an adopter with a configuration mechanism that
20                is familiar and consistent with other ibis code and provides all the
21                options to allow an adopter to highly customize their maps.  Note that
22                even though the code below are javascript json options it is implmented
23                in an existing, familiar IBIS XML pattern.  See the notes at the top of
24                the jquery.leaflet.js file for more information on how the map code
25                works and the basic options structure. The rest of the comments below
26                discuss the specific IBIS code map "options".
27
28                These options allow adopters to define global map properties and various
29                more specific map configurations for differing use cases.  For example
30                consider enviro vs alchol reports.  Each will want core road and water
31                layers but each will want specific layers like liquor stores vs toxic
32                waste dump sites.
33
34                LEAFLET_OPTIONS_JSON in both the general MAPS container and within the
35                specific MAP containers allows for the setting of most leaflet map and
36                plugin properties.  Properties are applied in the following heirarchy:
37                1) Default properties are defined within the associated leaflet .js files.
38                2) The general MAPS/LEAFLET_OPTIONS_JSON are then merged applied next.
39                3) Specific MAP[NAME=xyz]/LEAFLET_OPTIONS_JSON are merged/applied next.
40                4) Finally any request specific properties are applied.  These request
41                type property values are coded in the associated page request's XSLT and
42                are very specific and very few. 
43
44                Note the ordering of the above and the term "merge".  The properties
45                defined in #2 will overwrite the same exact property value defined in #1.
46                Having general mid level (non leaf node) blank definitions later in 2 or
47                4 will NOT clear existing #1 values.  The only way to clear a property
48                is to define a leaf node value (leaf node is an end node NOT anything
49                to do with leaflet). 
50
51                One other important note is that all the options are grouped in a general
52                container "options" which is passed into the jquery.leaflet.js (which
53                is java MVC controller type code.  The jquery.leaflet then determines
54                which subset of options are to be passed to the actual leaflet plugin
55                object constructors. Below is the general structure of the "options":
56                ,map: - Standard leaflet map
57                        @see: http://leafletjs.com/reference.html#map-options
58                ,zoomControl: - Based on leaflet zoom control. 
59                        @see: http://leafletjs.com/reference.html#control-zoom and L.Control.ZoomMin.js.
60                ,scaleControl: - Standard leaflet
61                        @see: http://leafletjs.com/reference.html#control-scale
62                ,layersControl: - Based on leaflet layerControl. 
63                        @see: http://leafletjs.com/reference.html#control-layers and L.Control.LayersPanel.js.
64                        ,layerGroups: - mentioned here because this is the bulk of this file.
65                                @see first definition below on this structure.
66                ,choroplethControl:- Based on leaflet control. 
67                        @see: http://leafletjs.com/reference.html#control and L.Control.LayersPanel.js.
68                ,infoPanelControl: - Standard leaflet control. 
69                        @see: http://leafletjs.com/reference.html#control and IBIS js code
70                        for events that populate content.
71
72                The map configs below provides an example of the items that most adopters
73                will need - namely the map position and the layerGroups.  To understand
74                what all is possible is outside the scope of notes (see above list of
75                @see urls).  Also, when viewing the API docs to understand all the
76                possibilities the actual leaflet plugin api/options documentation will
77                need to be traversed and studied (e.g. if the plugin extends another
78                plugin you will need to lookup that extended plugin's options).  In
79                general @see: http://leafletjs.com/reference.html.  For the IBIS plugins
80                you will likely need to view the actual options located at the top of
81                the js file.  Only IBIS specific properties are commented on below with
82                most being the layerGroup options.
83
84                NAMED MAP CONFIGURATIONS:
85                The more specific "named map" options code is specified by the request's
86                associated XSLT code.  For IP's the IP XML contains a MAP_NAME element
87                that is the default value used if no MapName HTTP request parameter is
88                found.  For query modules the MAP_NAME is specified by the user on the
89                builder page.   Each query module's CONFIGURATION element has an optional 
90                DEFAULT_MAP_NAME element that specifies the map name to use (like the IP
91                request the "MapName" HTTP request parameter can override this value). 
92
93                POINT AND LABEL OPTIONS:
94                        Standard Label config.  Shows feature.TITLE as the label.  Can add
95                        other HTML as wanted.  CSS styling via className.
96                        - iconAnchor adjusts the position if wanted,
97                        - iconSize specifies the size and centers over the point 40 seems decent.
98                        pointToLayer: function(feature, latlng)
99                        {
100                                return new L.marker(latlng,
101                                        {
102                                                icon: new L.divIcon( {html: feature.properties["TITLE"], className: "GeoLabel", iconAnchor: [-15, 0], iconSize: 40} )
103                                        }
104                                );
105                        }
106
107                        Point Icon only - hard to get the iconUrl correct for app context path.
108                        pointToLayer: function(feature, latlng)
109                        {
110                                return new L.marker(latlng,
111                                        {
112                                                icon: new L.icon( {iconUrl: "/ibisph-view/image/icon/16/minus_circle-blue.png"} )
113                                        }
114                                );
115                        }
116
117                        Point Icon - Circle marker - no text.
118                        pointToLayer: function(feature, latlng)
119                        {
120                                return new L.CircleMarker(latlng,
121                                        {
122                                                radius: 5
123                                                ,fillOpacity: 0.15
124                                                ,fillColor: "red"
125                                                ,color: "black"
126                                                ,weight: 2
127                                                ,opacity: 0.5
128                                        }
129                                );
130                        }
131
132                        Another mechanism to do labels.  Not optimal lots of CSS to turn off std defs.
133                        ,onEachFeature: function(feature, layer)
134                        {
135                                layer.bindLabel
136                                (
137                                        feature.properties.TITLE
138                                        ,{
139                                                noHide: true
140                                                ,pane: "markerPane"
141                                                ,className: "GeoLabel"
142                                                ,offset: [-15, 0]
143                                        }
144                                );
145                        }
146        -->
147
148        <!-- core, base definitions that are the base to ALL map configurations -->
149        <JSON_OPTIONS>
150        {
151                map:
152                {
153                        center: [34.25, -107]
154                        ,maxBounds: [[30.25, -101], [38.25, -111]]              // southwest corner, northeast corner
155                        ,attributionControl: true
156                }
157
158                /* This is the map's intent/purpose/.  Valid values are:
159                        - selection = tells this code to build the geo area type selection UI.
160                        - choropleth= tells this code to build the choropleth control UI.
161                        - display   = not current used - for v3 demographics?
162                        NOTE: choropleth is the default but this value can be overridden
163                        by named configuration usage or even having specific js code for
164                        certain page requests.
165                */
166                ,type: "choropleth" 
167
168                ,layersControl:
169                {
170                        collapsed: false
171
172                        /* Main container for layers - specifically groups of layers.  Each
173                                group is defined starting with the group's key (example: "labels":).
174                                Each group structure contains a title property and a group type
175                                property.  The title is the text that appears at the top of that
176                                selections group in the control panel's UI.  The group type
177                                controls where within the layer UI control to include the group
178                                of layers (how to build the selections).
179
180                                Valid group "type" values are:
181                                - base      = put definitions in the base map grouping/area.
182                                - overlay   = put definitions in the overlays area.
183                                - selection = put definitions into the special geo area selection
184                                        area.  This is used when the map "type" property is "selection".
185                                - choropleth = choro grouping - not currently in use - hard coded.
186                                         The choropleth control is displayed when the map "type"
187                                         property is "choropleth".
188
189                                - defaultOptions = base options that all of the group's layers use.
190                                - layers = actual layer definition structure.
191                               
192                        */
193                        ,layerGroups:
194                        {
195                                /* The Geo type labels are implemented using a circle marker.  This was
196                                        done 1/2015 due to time limitations and works fine via the config
197                                        code below.  Another solution is to attach with the layer and use the
198                                        layer's poly min/max x/y to position.  See the L.GeoJSON.Choropleth.js
199                                        file line 219 for how this was started.  That code could be used for
200                                        other labeling of layers but would need to be attached and configed.
201                                */
202                                "labels":
203                                {
204                                        title: "Labels"
205                                        ,type: "overlay"
206                                        ,defaultOptions:
207                                        {
208                                                pointToLayer: function(feature, latlng)
209                                                {
210                                                        return L.marker(latlng,
211                                                                {
212                                                                        icon: L.divIcon( {html: feature.properties["TITLE"], className: "GeoLabel", iconAnchor: [15, 0]} )
213                                                                }
214                                                        );
215                                                }
216                                        }
217                                        ,layers:
218                                        {
219                                                "GeoCnty":
220                                                {
221                                                        title: "County"
222                                                        ,url: "view/json/map/GeoCntyLabel.json"
223                                                        ,show: true
224                                                        ,options:
225                                                        {
226                                                        }
227                                                }
228                                        }
229                                }
230                        }
231                }
232
233                ,choroplethControl:
234                {
235                        legend:
236                        {
237                                titleRangeDisplayType: "LessThanEqualEndValue"   // options are HighLowSame, LessThanEqualEndValue, PlusAfterStartValue, GreaterThanEqualRangeSeparator, default: -
238                        }
239                }
240        }
241        </JSON_OPTIONS>
242
243        <!-- Named map configurations -->
244        <MAP>
245                <NAME>DEFAULT</NAME>
246                <TITLE>Default</TITLE>
247                <DESCRIPTION>Includes core base map and layer options</DESCRIPTION>
248                <SORT_ORDER>0</SORT_ORDER>
249                <ACTIVE_FLAG>x</ACTIVE_FLAG>
250                <JSON_OPTIONS>
251                {
252                        layersControl:
253                        {
254                                layerGroups:
255                                {
256                                        "general":
257                                        {
258                                                title: ""               // if no title then no group title...
259                                                ,type: "base"   // isBaseMap: true
260                                                ,layers:
261                                                {
262                                                        "default":
263                                                        {       
264                                                                title: "Open Cycle Map"
265                                                                ,type: "tile"           
266                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
267                                                                ,show: true
268                                                                ,options:
269                                                                {
270                                                                        attribution: '&amp;copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
271                                                                }
272                                                        }
273                                                        ,"none":
274                                                        {       
275                                                                title: "None"
276                                                                ,type: "tile"           
277                                                        }
278                                                        ,"forest":
279                                                        {       
280                                                                title: "Thunder Forest"
281                                                                ,type: "tile"
282                                                                ,url: "http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png"
283                                                        }
284                                                }
285                                        }
286
287                                        ,"roads":
288                                        {
289                                                title: "Roads"
290                                                ,type: "overlay"
291                                                ,defaultOptions:
292                                                {
293                                                        style:
294                                                        {
295                                                                dashArray: "4,5"
296                                                                ,color: "#000"
297                                                                ,weight: 3
298                                                                ,opacity: 0.75
299                                                        }
300                                                }
301                                                ,layers:
302                                                {
303                                                        "interstates":
304                                                        {
305                                                                title: "Interstates"
306                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
307                                                                ,options:
308                                                                {
309                                                                        style:
310                                                                        {
311                                                                                color: "red"
312                                                                        }
313                                                                }
314                                                        }
315                                                }
316                                        }
317
318                                        ,"water":
319                                        {
320                                                title: "Water"
321                                                ,type: "overlay" 
322                                                ,layers:
323                                                {
324                                                        "main":
325                                                        {
326                                                                title: "Water"
327                                                                ,url: "view/json/map/GeoWater.json"
328                                                                ,show: true
329                                                                ,options:
330                                                                {
331                                                                        style:
332                                                                        {
333                                                                                dashArray: ""
334                                                                                ,color: "blue"
335                                                                                ,weight: 2
336                                                                                ,opacity: 0.5
337                                                                        }
338                                                                }
339                                                        }
340                                                }
341                                        }
342
343                                        ,"points":
344                                        {
345                                                title: "Points"
346                                                ,type: "overlay" 
347                                                ,layers:
348                                                {
349                                                        "cities":
350                                                        {
351                                                                title: "Cities"
352                                                                ,type: "interactive" 
353                                                                ,url: "view/json/map/GeoCity2500.json"
354                                                                ,show: false
355                                                                ,options:
356                                                                {
357                                                                        pointToLayer: function(feature, latlng)
358                                                                        {
359                                                                                return new L.marker(latlng,
360                                                                                        {
361                                                                                                icon: new L.divIcon( {html: "&#160;", className: "GeoIconMarker GeoCityIconMarker"} )
362                                                                                        }
363                                                                                );
364                                                                        }
365                                                                }
366                                                        }
367                                                }
368                                        }
369
370                                        ,"labels":
371                                        {
372                                                title: "Labels"
373                                                ,layers:
374                                                {
375                                                        "GeoCnty":
376                                                        {
377                                                                title: "County"
378                                                                ,url: "view/json/map/GeoCntyLabel.json"
379                                                                ,options:
380                                                                {
381                                                                }
382                                                        }
383                                                        ,"GeoLHD":
384                                                        {
385                                                                title: "Region"
386                                                                ,url: "view/json/map/GeoLHDLabel.json"
387                                                                ,options:
388                                                                {
389                                                                }
390                                                        }
391                                                }
392                                        }
393                                }
394                        }
395                }
396                </JSON_OPTIONS>
397        </MAP>
398
399        <MAP>
400                <NAME>None</NAME>
401                <TITLE>No Map</TITLE>
402                <DESCRIPTION>Turns off the map - will not show even if a dataset is mappable</DESCRIPTION>
403                <SORT_ORDER>1</SORT_ORDER>
404                <ACTIVE_FLAG>x</ACTIVE_FLAG>
405                <JSON_OPTIONS/>
406        </MAP>
407
408        <MAP>
409                <NAME>NoLayers</NAME>
410                <TITLE>Minimal - No Layers</TITLE>
411                <DESCRIPTION>Does not have any base map or layer options</DESCRIPTION>
412                <SORT_ORDER>2</SORT_ORDER>
413                <ACTIVE_FLAG>x</ACTIVE_FLAG>
414                <JSON_OPTIONS/>
415        </MAP>
416
417        <MAP>
418                <NAME>AllLayers</NAME>
419                <TITLE>All Layers</TITLE>
420                <DESCRIPTION>Includes all known layer options</DESCRIPTION>
421                <SORT_ORDER>3</SORT_ORDER>
422                <ACTIVE_FLAG>x</ACTIVE_FLAG>
423                <JSON_OPTIONS>
424                {
425                        layersControl:
426                        {
427                                layerGroups:
428                                {
429                                        "general":
430                                        {
431                                                title: "General"
432                                                ,type: "base"
433                                                ,layers:
434                                                {
435                                                        "default":
436                                                        {       
437                                                                title: "Open Cycle Map"
438                                                                ,type: "tile"           
439                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
440                                                                ,show: true
441                                                                ,options: null
442                                                        }
443                                                        ,"none":
444                                                        {       
445                                                                title: "None"
446                                                                ,type: "tile"           
447                                                        }
448                                                }
449                                        }
450                                        ,"specific":
451                                        {
452                                                title: "Terrain Based"
453                                                ,type: "base"
454                                                ,layers:
455                                                {
456                                                        "forest":
457                                                        {       
458                                                                title: "Thunder Forest"
459                                                                ,type: "tile"
460                                                                ,url: "http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png"
461                                                        }
462                                                }
463                                        }
464
465                                        ,"roads":
466                                        {
467                                                title: "Roads"
468                                                ,type: "overlay"
469                                                ,defaultOptions:
470                                                {
471                                                        style:
472                                                        {
473                                                                dashArray: "5,5"
474                                                                ,color: "#000"
475                                                                ,weight: 3
476                                                                ,opacity: 0.5
477                                                                ,fillColor: "yellow"
478                                                                ,fillOpacity: 0.5
479                                                        }
480                                                }
481                                                ,layers:
482                                                {
483                                                        "interstates":
484                                                        {
485                                                                title: "Interstates"
486                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
487                                                                ,options:
488                                                                {
489                                                                        style:
490                                                                        {
491                                                                                color: "green"
492                                                                        }
493                                                                }
494                                                        }
495                                                        ,"us":
496                                                        {
497                                                                title: "US Highways"
498                                                                ,url: "view/json/map/GeoRoadsUSHighway.json"
499                                                        }
500                                                        ,"highways":
501                                                        {
502                                                                title: "State Highways"
503                                                                ,url: "view/json/map/GeoRoadsNMHighway.json"
504                                                        }
505                                                        ,"local":
506                                                        {
507                                                                title: "Local Roads"
508                                                                ,url: "view/json/map/GeoRoadsLocal.json"
509                                                        }
510                                                }
511                                        }
512                                }
513                        }
514                }
515                </JSON_OPTIONS>
516        </MAP>
517
518
519        <MAP>
520                <NAME>Selection</NAME>
521                <TITLE>Selections</TITLE>
522                <DESCRIPTION>Includes core base map and selection layer options</DESCRIPTION>
523                <NOT_SELECTABLE_FLAG/>
524                <SORT_ORDER>99</SORT_ORDER>
525                <ACTIVE_FLAG>x</ACTIVE_FLAG>
526                <JSON_OPTIONS>
527                {
528                        map:
529                        {
530                                zoom: 7
531                                ,minZoom: 5
532                                ,maxZoom: 14
533                        }
534                        ,type: "selection" 
535
536                        ,layersControl:
537                        {
538
539                                /* L.Control.LayersPanel uses these definitions */
540                                layerGroups:
541                                {
542                                        "general":
543                                        {
544                                                title: "General"
545                                                ,type: "base"
546                                                ,layers:
547                                                {
548                                                        "default":
549                                                        {       
550                                                                title: "Open Cycle Map"
551                                                                ,type: "tile"           
552                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
553                                                                ,options: null
554                                                        }
555                                                        ,"none":
556                                                        {       
557                                                                title: "None"
558                                                                ,type: "tile"           
559                                                                ,show: true
560                                                        }
561                                                }
562                                        }
563
564                                        ,"roads":
565                                        {
566                                                title: "Roads"
567                                                ,type: "overlay"
568                                                ,defaultOptions:
569                                                {
570                                                        style:
571                                                        {
572                                                                dashArray: "5,5"
573                                                                ,color: "#000"
574                                                                ,weight: 3
575                                                                ,opacity: 0.5
576                                                                ,fillColor: "yellow"
577                                                                ,fillOpacity: 0.5
578                                                        }
579                                                }
580                                                ,layers:
581                                                {
582                                                        "interstates":
583                                                        {
584                                                                title: "Interstates"
585                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
586                                                                ,options:
587                                                                {
588                                                                        style:
589                                                                        {
590                                                                                color: "green"
591                                                                        }
592                                                                }
593                                                        }
594                                                }
595                                        }
596
597                                        ,"water":
598                                        {
599                                                title: "Water"
600                                                ,type: "overlay"
601                                                ,layers:
602                                                {
603                                                        "main":
604                                                        {
605                                                                title: "Water"
606                                                                ,type: "interactive"
607                                                                ,url: "view/json/map/GeoWater.json"
608                                                                ,show: true
609                                                                ,options:
610                                                                {
611                                                                        style:
612                                                                        {
613                                                                                dashArray: ""
614                                                                                ,color: "blue"
615                                                                                ,weight: 2
616                                                                                ,opacity: 0.5
617                                                                        }
618                                                                }
619                                                        }
620                                                }
621                                        }
622
623                                        ,"selections":
624                                        {
625                                                title: "Area Selections"
626                                                ,type: "selection"
627                                                ,defaultOptions:
628                                                {
629                                                        style:
630                                                        {
631                                                                dashArray: ""
632                                                                ,color: "#006600"
633                                                                ,weight: 2
634                                                                ,opacity: 0.8
635                                                        }
636                                                }
637                                                ,layers:
638                                                {
639                                                        "GeoCnty":
640                                                        {
641                                                                title: "County"
642                                                                ,type: "selection"
643                                                                ,url: "view/json/map/GeoCnty.json"
644                                                                ,show: true
645                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoCnty"}
646                                                        }
647                                                        ,"GeoLHD":
648                                                        {
649                                                                title: "Region"
650                                                                ,type: "selection"
651                                                                ,url: "view/json/map/GeoLHD.json"
652                                                                ,show: false
653                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoLHD"}
654                                                        }
655                                                        ,"GeoSarea":
656                                                        {
657                                                                title: "Small Area"
658                                                                ,type: "selection"
659                                                                ,url: "view/json/map/GeoSarea.json"
660                                                                ,show: false
661                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoSarea"}
662                                                        }
663                                                }
664                                        }
665                                }
666                        }
667                }
668                </JSON_OPTIONS>
669
670                <JAVASCRIPT>
671                </JAVASCRIPT>
672
673        </MAP>
674
675</MAPS>
676
Note: See TracBrowser for help on using the repository browser.