# g1.mapviewer Mapviewer is an abstraction over [Leaflet](http://leafletjs.com/) that can create common GIS applications using configurations. Mapviewer requires `npm install leaflet d3 d3-scale-chromatic g1`. ```html ``` This creates a simple base map: ```html
``` This creates a set of markers for each row in [cities.json](test/cities.json). ```html
``` This creates a set of circle markers for each row in [cities.json](test/cities.json). You can apply styles based on any attribute or function. ```html
``` This loads a [GeoJSON file](test/india-states.geojson), links data from [state_score.json](test/state_score.json), and sets the fill color from a merged attribute. ```html
``` Drilldown feature example: ```html
``` **Note**: You can use `type: 'topojson'` when loading TopoJSON maps. ## g1.mapviewer options - `id`: ID of the map DOM element (example: `mapid`), or the DOM element - `map`: - `options`: supports same options as [Map options](http://leafletjs.com/reference-1.3.0.html#map) - `layers`: builds layers one on top of another in the specified order. - `{layername: {...} }` dict with layer name as keys - Each layer MUST have a type. Currently supported types are - tile - geojson - topojson - marker (`link`: option is not yet supported ) - circleMarker - `tile` layer MUST have a url: that has the URL template for the leaflet tile layer. - `url`: A string of the form - `http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png` - `options`: supports same options as [Tile options](http://leafletjs.com/reference-1.3.0.html#tilelayer-minzoom) - `geojson` layer MUST have a data as an array of objects or else MUST have a url (string). - `url`: String - `data`: An array of objects. data: takes preference over url. - `options`: supports same options as [GeoJSON options](http://leafletjs.com/reference-1.3.0.html#geojson-style) - `link`: adds attributes from input dataset to geojson - `url` is url (String) to fetch data - `mapKey` is attribute name in geojson to match - `dataKey` is column name in input dataset that matches with geojson `mapKey` - `attrs` Data driven styles. same as `options`. (`attrs` take priority over `options`) - For `color`, `weight`, `opacity`, `fillColor`, `fillOpacity` properties, the options are:. - `metric` string / function - If `metric`: is a string, can be any numeric property of geojson - To have a metric that is formala based on multiple properties, use function. Example: `function(row) { return row['congress_votes'] - row['bjp_votes']}` - `domain` An array of two numbers. Defaults to calculated values of given `metric`. - `range` - For `fillColor` and `color`, must be a [interpolate color scheme](https://github.com/d3/d3-scale-chromatic#diverging) - For `weight`, `opacity`,`fillOpacity` must be an array with min and max values - `tooltip`: string / function that returns formatted value. - function(properties) must return a string. feature properties are passed as argument. - TODO: the properties currently include only geoJSON properties. link properties must be added - `topojson` - same as `Geojson` - `marker` layer MUST have a data as an array of objects or else MUST have a url (string). - `url`: String - `data`: An array of objects. data: takes preference over url. - `latitude`: String (mandatory). Must be column name that contains latitude of marker - `longitude`: String (mandatory). Must be column name that contains longitude of marker - `options`: supports same options as [marker options](http://leafletjs.com/reference-1.3.0.html#marker-icon) - `circleMarker` layer MUST have a data as an array of objects or else MUST have a url (string). - `url`: String - `data`: An array of objects. data: takes preference over url. - `latitude`: String (mandatory). Must be column name that contains latitude of marker - `longitude`: String (mandatory). Must be column name that contains longitude of marker - `options`: supports same options as [circleMarker options](http://leafletjs.com/reference-1.3.0.html#circlemarker-radius) - `attrs` same as `attrs` for `geojson` type layer - `drilldown`: - `rootLayer`: `geojson/topojson` layer that acts as root layer to drilldown further. - `levels`: Array of objects that provides layer info - `layerName`: Can be a string or function. Function takes argument as `properties` of parentLayer feature - `layerOptions`: Same as layer options in `layers` option. If `url` is function, `url` takes argument as `properties` of parentLayer feature ## g1.mapviewer methods `fitToLayer(layerName, options)` Zooms map view to fit the layer. Supports same options as [fitBounds options](http://leafletjs.com/reference-1.3.0.html#fitbounds-options) `zoomHandler(layerName, minZoomLevel, maxZoomLevel(optional) )` Shows the layer with `layerName` only between `minZoomLevel` and `maxZoomLevel`. ## g1.mapviewer events - `layersloaded` is fired when all layers are saved in mapviewer.gLayers (used interally). - tooltip is rendered on each layer only after `layersload` is fired - `layerName + 'loaded'` is fired for each layer with name as `layerName`