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

Last change on this file since 11347 was 11347, checked in by Garth Braithwaite, 4 years ago

admin - middle of initiative/objects work. Deleted the HPO java, jsp, and configs and replaced with initiative*. Added value_attribute_i.sql. Removed the IPV query values stuff. Renamed jar from 2.4 to 3.0. Committed HLS choro js and config.

File size: 18.0 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                }
156
157                /* This is the map's intent/purpose/.  Valid values are:
158                        - selection = tells this code to build the geo area type selection UI.
159                        - choropleth= tells this code to build the choropleth control UI.
160                        - display   = not current used - for v3 demographics?
161                        NOTE: choropleth is the default but this value can be overridden
162                        by named configuration usage or even having specific js code for
163                        certain page requests.
164                */
165                ,type: "choropleth" 
166
167                ,layersControl:
168                {
169                        collapsed: false
170
171                        /* Main container for layers - specifically groups of layers.  Each
172                                group is defined starting with the group's key (example: "labels":).
173                                Each group structure contains a title property and a group type
174                                property.  The title is the text that appears at the top of that
175                                selections group in the control panel's UI.  The group type
176                                controls where within the layer UI control to include the group
177                                of layers (how to build the selections).
178
179                                Valid group "type" values are:
180                                - base      = put definitions in the base map grouping/area.
181                                - overlay   = put definitions in the overlays area.
182                                - selection = put definitions into the special geo area selection
183                                        area.  This is used when the map "type" property is "selection".
184                                - choropleth = choro grouping - not currently in use - hard coded.
185                                         The choropleth control is displayed when the map "type"
186                                         property is "choropleth".
187
188                                - defaultOptions = base options that all of the group's layers use.
189                                - layers = actual layer definition structure.
190                               
191                        */
192                        ,layerGroups:
193                        {
194                                /* The Geo type labels are implemented using a circle marker.  This was
195                                        done 1/2015 due to time limitations and works fine via the config
196                                        code below.  Another solution is to attach with the layer and use the
197                                        layer's poly min/max x/y to position.  See the L.GeoJSON.Choropleth.js
198                                        file line 219 for how this was started.  That code could be used for
199                                        other labeling of layers but would need to be attached and configed.
200                                */
201                                "labels":
202                                {
203                                        title: "Labels"
204                                        ,type: "overlay"
205                                        ,defaultOptions:
206                                        {
207                                                pointToLayer: function(feature, latlng)
208                                                {
209                                                        return L.marker(latlng,
210                                                                {
211                                                                        icon: L.divIcon( {html: feature.properties["TITLE"], className: "GeoLabel", iconAnchor: [15, 0]} )
212                                                                }
213                                                        );
214                                                }
215                                        }
216                                        ,layers:
217                                        {
218                                                "GeoCnty":
219                                                {
220                                                        title: "County"
221                                                        ,url: "view/json/map/GeoCntyLabel.json"
222                                                        ,show: true
223                                                        ,options:
224                                                        {
225                                                        }
226                                                }
227                                        }
228                                }
229                        }
230                }
231
232                ,choroplethControl:
233                {
234                        legend:
235                        {
236                                titleRangeDisplayType: "LessThanEqualEndValue"   // options are HighLowSame, LessThanEqualEndValue, PlusAfterStartValue, GreaterThanEqualRangeSeparator, default: -
237                        }
238                }
239        }
240        </JSON_OPTIONS>
241
242        <!-- Named map configurations -->
243        <MAP>
244                <NAME>DEFAULT</NAME>
245                <TITLE>Default</TITLE>
246                <DESCRIPTION>Includes core base map and layer options</DESCRIPTION>
247                <SORT_ORDER>0</SORT_ORDER>
248                <ACTIVE_FLAG>x</ACTIVE_FLAG>
249                <JSON_OPTIONS>
250                {
251                        layersControl:
252                        {
253                                layerGroups:
254                                {
255                                        "general":
256                                        {
257                                                title: ""               // if no title then no group title...
258                                                ,type: "base"  // isBaseMap: true
259                                                ,layers:
260                                                {
261                                                        "default":
262                                                        {       
263                                                                title: "Open Cycle Map"
264                                                                ,type: "tile"           
265                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
266                                                                ,show: true
267                                                                ,options: null
268                                                        }
269                                                        ,"none":
270                                                        {       
271                                                                title: "None"
272                                                                ,type: "tile"           
273                                                        }
274                                                        ,"forest":
275                                                        {       
276                                                                title: "Thunder Forest"
277                                                                ,type: "tile"
278                                                                ,url: "http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png"
279                                                        }
280                                                }
281                                        }
282
283                                        ,"roads":
284                                        {
285                                                title: "Roads"
286                                                ,type: "overlay"
287                                                ,defaultOptions:
288                                                {
289                                                        style:
290                                                        {
291                                                                dashArray: "4,5"
292                                                                ,color: "#000"
293                                                                ,weight: 3
294                                                                ,opacity: 0.75
295                                                        }
296                                                }
297                                                ,layers:
298                                                {
299                                                        "interstates":
300                                                        {
301                                                                title: "Interstates"
302                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
303                                                                ,options:
304                                                                {
305                                                                        style:
306                                                                        {
307                                                                                color: "red"
308                                                                        }
309                                                                }
310                                                        }
311                                                }
312                                        }
313
314                                        ,"water":
315                                        {
316                                                title: "Water"
317                                                ,type: "overlay" 
318                                                ,layers:
319                                                {
320                                                        "main":
321                                                        {
322                                                                title: "Water"
323                                                                ,url: "view/json/map/GeoWater.json"
324                                                                ,show: true
325                                                                ,options:
326                                                                {
327                                                                        style:
328                                                                        {
329                                                                                dashArray: ""
330                                                                                ,color: "blue"
331                                                                                ,weight: 2
332                                                                                ,opacity: 0.5
333                                                                        }
334                                                                }
335                                                        }
336                                                }
337                                        }
338
339                                        ,"points":
340                                        {
341                                                title: "Points"
342                                                ,type: "overlay" 
343                                                ,layers:
344                                                {
345                                                        "cities":
346                                                        {
347                                                                title: "Cities"
348                                                                ,type: "interactive" 
349                                                                ,url: "view/json/map/GeoCity2500.json"
350                                                                ,show: false
351                                                                ,options:
352                                                                {
353                                                                        pointToLayer: function(feature, latlng)
354                                                                        {
355                                                                                return new L.marker(latlng,
356                                                                                        {
357                                                                                                icon: new L.divIcon( {html: "&#160;", className: "GeoIconMarker GeoCityIconMarker"} )
358                                                                                        }
359                                                                                );
360                                                                        }
361                                                                }
362                                                        }
363                                                }
364                                        }
365
366                                        ,"labels":
367                                        {
368                                                title: "Labels"
369                                                ,layers:
370                                                {
371                                                        "GeoCnty":
372                                                        {
373                                                                title: "County"
374                                                                ,url: "view/json/map/GeoCntyLabel.json"
375                                                                ,options:
376                                                                {
377                                                                }
378                                                        }
379                                                        ,"GeoLHD":
380                                                        {
381                                                                title: "Region"
382                                                                ,url: "view/json/map/GeoLHDLabel.json"
383                                                                ,options:
384                                                                {
385                                                                }
386                                                        }
387                                                }
388                                        }
389                                }
390                        }
391                }
392                </JSON_OPTIONS>
393        </MAP>
394
395        <MAP>
396                <NAME>None</NAME>
397                <TITLE>No Map</TITLE>
398                <DESCRIPTION>Turns off the map - will not show even if a dataset is mappable</DESCRIPTION>
399                <SORT_ORDER>1</SORT_ORDER>
400                <ACTIVE_FLAG>x</ACTIVE_FLAG>
401                <JSON_OPTIONS/>
402        </MAP>
403
404        <MAP>
405                <NAME>NoLayers</NAME>
406                <TITLE>Minimal - No Layers</TITLE>
407                <DESCRIPTION>Does not have any base map or layer options</DESCRIPTION>
408                <SORT_ORDER>2</SORT_ORDER>
409                <ACTIVE_FLAG>x</ACTIVE_FLAG>
410                <JSON_OPTIONS/>
411        </MAP>
412
413        <MAP>
414                <NAME>AllLayers</NAME>
415                <TITLE>All Layers</TITLE>
416                <DESCRIPTION>Includes all known layer options</DESCRIPTION>
417                <SORT_ORDER>3</SORT_ORDER>
418                <ACTIVE_FLAG>x</ACTIVE_FLAG>
419                <JSON_OPTIONS>
420                {
421                        layersControl:
422                        {
423                                layerGroups:
424                                {
425                                        "general":
426                                        {
427                                                title: "General"
428                                                ,type: "base"
429                                                ,layers:
430                                                {
431                                                        "default":
432                                                        {       
433                                                                title: "Open Cycle Map"
434                                                                ,type: "tile"           
435                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
436                                                                ,show: true
437                                                                ,options: null
438                                                        }
439                                                        ,"none":
440                                                        {       
441                                                                title: "None"
442                                                                ,type: "tile"           
443                                                        }
444                                                }
445                                        }
446                                        ,"specific":
447                                        {
448                                                title: "Terrain Based"
449                                                ,type: "base"
450                                                ,layers:
451                                                {
452                                                        "forest":
453                                                        {       
454                                                                title: "Thunder Forest"
455                                                                ,type: "tile"
456                                                                ,url: "http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png"
457                                                        }
458                                                }
459                                        }
460
461                                        ,"roads":
462                                        {
463                                                title: "Roads"
464                                                ,type: "overlay"
465                                                ,defaultOptions:
466                                                {
467                                                        style:
468                                                        {
469                                                                dashArray: "5,5"
470                                                                ,color: "#000"
471                                                                ,weight: 3
472                                                                ,opacity: 0.5
473                                                                ,fillColor: "yellow"
474                                                                ,fillOpacity: 0.5
475                                                        }
476                                                }
477                                                ,layers:
478                                                {
479                                                        "interstates":
480                                                        {
481                                                                title: "Interstates"
482                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
483                                                                ,options:
484                                                                {
485                                                                        style:
486                                                                        {
487                                                                                color: "green"
488                                                                        }
489                                                                }
490                                                        }
491                                                        ,"us":
492                                                        {
493                                                                title: "US Highways"
494                                                                ,url: "view/json/map/GeoRoadsUSHighway.json"
495                                                        }
496                                                        ,"highways":
497                                                        {
498                                                                title: "State Highways"
499                                                                ,url: "view/json/map/GeoRoadsNMHighway.json"
500                                                        }
501                                                        ,"local":
502                                                        {
503                                                                title: "Local Roads"
504                                                                ,url: "view/json/map/GeoRoadsLocal.json"
505                                                        }
506                                                }
507                                        }
508                                }
509                        }
510                }
511                </JSON_OPTIONS>
512        </MAP>
513
514
515        <MAP>
516                <NAME>Selection</NAME>
517                <TITLE>Selections</TITLE>
518                <DESCRIPTION>Includes core base map and selection layer options</DESCRIPTION>
519                <NOT_SELECTABLE_FLAG/>
520                <SORT_ORDER>99</SORT_ORDER>
521                <ACTIVE_FLAG>x</ACTIVE_FLAG>
522                <JSON_OPTIONS>
523                {
524                        map:
525                        {
526                                zoom: 7
527                                ,minZoom: 5
528                                ,maxZoom: 14
529                        }
530                        ,type: "selection" 
531
532                        ,layersControl:
533                        {
534
535                                /* L.Control.LayersPanel uses these definitions */
536                                layerGroups:
537                                {
538                                        "general":
539                                        {
540                                                title: "General"
541                                                ,type: "base"
542                                                ,layers:
543                                                {
544                                                        "default":
545                                                        {       
546                                                                title: "Open Cycle Map"
547                                                                ,type: "tile"           
548                                                                ,url: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
549                                                                ,options: null
550                                                        }
551                                                        ,"none":
552                                                        {       
553                                                                title: "None"
554                                                                ,type: "tile"           
555                                                                ,show: true
556                                                        }
557                                                }
558                                        }
559
560                                        ,"roads":
561                                        {
562                                                title: "Roads"
563                                                ,type: "overlay"
564                                                ,defaultOptions:
565                                                {
566                                                        style:
567                                                        {
568                                                                dashArray: "5,5"
569                                                                ,color: "#000"
570                                                                ,weight: 3
571                                                                ,opacity: 0.5
572                                                                ,fillColor: "yellow"
573                                                                ,fillOpacity: 0.5
574                                                        }
575                                                }
576                                                ,layers:
577                                                {
578                                                        "interstates":
579                                                        {
580                                                                title: "Interstates"
581                                                                ,url: "view/json/map/GeoRoadsInterstate.json"
582                                                                ,options:
583                                                                {
584                                                                        style:
585                                                                        {
586                                                                                color: "green"
587                                                                        }
588                                                                }
589                                                        }
590                                                }
591                                        }
592
593                                        ,"water":
594                                        {
595                                                title: "Water"
596                                                ,type: "overlay"
597                                                ,layers:
598                                                {
599                                                        "main":
600                                                        {
601                                                                title: "Water"
602                                                                ,type: "interactive"
603                                                                ,url: "view/json/map/GeoWater.json"
604                                                                ,show: true
605                                                                ,options:
606                                                                {
607                                                                        style:
608                                                                        {
609                                                                                dashArray: ""
610                                                                                ,color: "blue"
611                                                                                ,weight: 2
612                                                                                ,opacity: 0.5
613                                                                        }
614                                                                }
615                                                        }
616                                                }
617                                        }
618
619                                        ,"selections":
620                                        {
621                                                title: "Area Selections"
622                                                ,type: "selection"
623                                                ,defaultOptions:
624                                                {
625                                                        style:
626                                                        {
627                                                                dashArray: ""
628                                                                ,color: "#006600"
629                                                                ,weight: 2
630                                                                ,opacity: 0.8
631                                                        }
632                                                }
633                                                ,layers:
634                                                {
635                                                        "GeoCnty":
636                                                        {
637                                                                title: "County"
638                                                                ,type: "selection"
639                                                                ,url: "view/json/map/GeoCnty.json"
640                                                                ,show: true
641                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoCnty"}
642                                                        }
643                                                        ,"GeoLHD":
644                                                        {
645                                                                title: "Region"
646                                                                ,type: "selection"
647                                                                ,url: "view/json/map/GeoLHD.json"
648                                                                ,show: false
649                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoLHD"}
650                                                        }
651                                                        ,"GeoSarea":
652                                                        {
653                                                                title: "Small Area"
654                                                                ,type: "selection"
655                                                                ,url: "view/json/map/GeoSarea.json"
656                                                                ,show: false
657                                                                ,dependentHTMLInputElement: {name: "GeoProxy", value: "GeoSarea"}
658                                                        }
659                                                }
660                                        }
661                                }
662                        }
663                }
664                </JSON_OPTIONS>
665
666                <JAVASCRIPT>
667                </JAVASCRIPT>
668
669        </MAP>
670
671</MAPS>
672
Note: See TracBrowser for help on using the repository browser.