{"id":13841743,"url":"https://github.com/sghaskell/Clustered-Single-Value-Map-Visualization","last_synced_at":"2025-07-11T13:32:23.275Z","repository":{"id":93244046,"uuid":"72661728","full_name":"sghaskell/Clustered-Single-Value-Map-Visualization","owner":"sghaskell","description":"Splunk Custom Visualization","archived":true,"fork":false,"pushed_at":"2018-05-25T18:22:55.000Z","size":2453,"stargazers_count":13,"open_issues_count":6,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-08-05T17:29:01.181Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sghaskell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-11-02T16:55:19.000Z","updated_at":"2023-01-28T20:30:11.000Z","dependencies_parsed_at":"2023-05-10T11:46:54.162Z","dependency_job_id":null,"html_url":"https://github.com/sghaskell/Clustered-Single-Value-Map-Visualization","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sghaskell%2FClustered-Single-Value-Map-Visualization","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sghaskell%2FClustered-Single-Value-Map-Visualization/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sghaskell%2FClustered-Single-Value-Map-Visualization/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sghaskell%2FClustered-Single-Value-Map-Visualization/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sghaskell","download_url":"https://codeload.github.com/sghaskell/Clustered-Single-Value-Map-Visualization/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225729650,"owners_count":17515149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T17:01:19.977Z","updated_at":"2024-11-21T12:30:22.112Z","avatar_url":"https://github.com/sghaskell.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","JavaScript (485)"],"sub_categories":[],"readme":"# Splunk Custom Visualization\n\n# Synopsis\nHave you ever wanted to plot massive amounts of single value lat/lons with clustering and drill-down to individual markers? Use this app! No geostats aggregation at all! Tested with 1.7 million individual points. Lots of configuration options including the ability to add description popups with HTML support, color and style markers, add icons, disable clustering and plot nothing but single values. Native splunk maps can't do that!\n\n# Credits\n### Included Open Source Software\n##### [Leaflet Maps](http://leafletjs.com/)\n##### [Leaflet Markercluster Plugin](https://github.com/Leaflet/Leaflet.markercluster)\n##### [Leaflet Awesome Markers Plugin](https://www.npmjs.com/package/drmonty-leaflet-awesome-markers)\n##### [Leaflet.vector-markers Plugin](https://github.com/hiasinho/Leaflet.vector-markers)\n##### [Leaflet.FeatureGroup.SubGroup](https://github.com/ghybs/Leaflet.FeatureGroup.SubGroup)\n##### [leaflet-measure](https://www.npmjs.com/package/leaflet-measure)\n##### [Leaflet.contextmenu](https://github.com/aratcliffe/Leaflet.contextmenu)\n##### [leaflet-bing-layer](https://github.com/digidem/leaflet-bing-layer)\n##### [Leaflet.Dialog](https://github.com/NBTSolutions/Leaflet.Dialog)\n##### [togeojson](https://github.com/mapbox/togeojson)\n##### [load-google-maps-api](https://www.npmjs.com/package/load-google-maps-api#usage)\n##### [load-google-places-autocomplete](https://www.npmjs.com/package/leaflet-google-places-autocomplete)\n##### [JSZip](https://stuk.github.io/jszip/)\n##### [JSZipUtils](http://stuk.github.io/jszip-utils/)\n##### [Jquery](https://jquery.com/)\n##### [Underscore.js](http://underscorejs.org/)\n##### [Webpack](https://webpack.github.io/)\n##### [transform-loader](https://www.npmjs.com/package/transform-loader)\n##### [brfs](https://www.npmjs.com/package/brfs)\n\nBig thanks to the following people: \n\n* [Damien Dallimore](https://splunkbase.splunk.com/apps/#/page/1/search/damien%2520dallimore/order/relevance) and **Andrew Stein** for all the feature requests and extensive testing.\n* Johannes Effland for contributing the path tracing code.\n* Paul Thompson for [marker priority](#marker-priority) and [SVG marker](#svg-markers) feature suggestions.\n* [dxwils3](https://github.com/dxwils3) for **pathColor** enhancement.\n\n# Compatibility\nThis app is compatible with **Splunk 6.4+** as it relies on the [Custom Visualization API](http://docs.splunk.com/Documentation/Splunk/latest/AdvancedDev/CustomVizDevOverview).\n\n# Usage\n### Fields must be named exactly as labled here. The app is keyed off of field names and not field order.\n```\nbase_search | table latitude, longitude [ description | tooltip | title | icon | markerColor |markerPriority | markerSize | markerAnchor | markerVisibility | iconColor | shadowAnchor | shadowSize | prefix | extraClasses | layerDescription | pathWeight | pathOpacity | pathColor | layerGroup]\n```\n\n# Required Fields\n##### latitude\nLatitude Coordinates\n##### longitude\nLongitude Coordinates\n\n# Optional Fields\n##### description\nDesciption that is displayed in a pop-up when then marker is clicked on the map. You can get creative with this field. Combine a bunch of other fields or lookups using eval to make the description full of detail. **This field supports HTML**.\n##### layerDescription\nDescription that is added next to the icon in the layer control legend. **this field supports HTML**\n\n# Style Markers And Icons Dynamically Through SPL\n### Feature Description\nVersion 1.1 introduces new features to dynamically style map markers and add icons via SPL. Create fields using [eval](http://docs.splunk.com/Documentation/Splunk/6.4.0/SearchReference/CommonEvalFunctions) to define colors for the marker or use an icon from [Font Awesome](http://fortawesome.github.io/Font-Awesome/icons/) or [ionicons](http://ionicons.com/). If you find the color set of icons too limiting, feel free to override the map marker icon with a map icon from Font Awesome and style it with any hex color or RGB value.\n\nBy default, markers are rendered as PNG's. The set of markers comes in a limited array of color values and cannot be re-sized. If you want access to an unlimited color palette and the ability to size markers, use [SVG based markers](#svg-markers).\n\n### Available Fields and Values\n##### title\nIcon mouse hover over description. **Deprecated (with backwards compatibility) - see tooltip**\n##### tooltip\nTooltip to display on marker hover.\n##### icon\nIcon displayed in map marker - Any icon from [Font Awesome](http://fortawesome.github.io/Font-Awesome/icons/) or [ionicons](http://ionicons.com/). **Default** ``circle``\n##### markerColor\nColor of map marker - ``red``, ``darkred``, ``lightred``, ``orange``, ``beige``, ``green``, ``darkgreen``, ``lightgreen``, ``blue``, ``darkblue``, ``lightblue``, ``purple``, ``darkpurple``, ``pink``, ``cadetblue``, ``white``, ``gray``, ``lightgray``, ``black``. **Default** ``blue``\n##### iconColor\nColor of icon - Any [CSS color name](https://www.vogatek.com/html-tutorials/cssref/css_colornames.asp.html), [Hex or RGB value](http://www.w3schools.com/colors/colors_picker.asp). **Default** white.\n##### prefix\n``fa`` (Font Awesome) or ``ion`` (ionicons). **Default** ``fa``\n\n##### extraClasses\nAny extra CSS classes you wish to add for styling. Here are some [additional classes](http://fortawesome.github.io/Font-Awesome/examples/) you can use with Font Awesome or Ionicons to change the styling. **Default** ``fa-lg``\n\n### SVG Markers\nVersion 1.4.4 introduces the ability to use SVG based markers. You can dynamically size markers and assign any color (name or hex value). The following settings control SVG based markers.\n\n##### markerType\n``svg`` or ``png`` **Default** ``png``\n\n##### markerSize\nComma separated string representing the pixel width and height of marker, respectively. **Default** ``35,45``\n\n##### markerColor\nColor of map marker. Use any common [HTML color code name](http://www.w3schools.com/colors/colors_names.asp) or [hex value](http://www.google.com/search?q=html+color+picker). **Default** ``#38AADD``\n\n##### markerAnchor\nComma separated string representing the coordinates of the \"tip\" of the icon (relative to its top left corner). **Default** ``15,50``\n\n##### shadowSize\nComma separated string representing the pixel width and height of the marker shadow. You typically don't need to change this value unless you increase or decrese the **markerSize**. Set to ``0,0`` to disable shadows. **Default** ``30,46``\n\n##### shadowAnchor\nComma separated string representing the coordinates of the \"tip\" of the shadow (relative to its top left corner). You typically don't need to change this value unless you increase or decrese the **markerSize**. **Default** ``30,30``\n\n##### iconColor\nColor of icon - Any [CSS color name](https://www.vogatek.com/html-tutorials/cssref/css_colornames.asp.html), [Hex or RGB value](http://www.w3schools.com/colors/colors_picker.asp). **Default** white.\n##### prefix\n``fa`` (Font Awesome) or ``ion`` (ionicons). **Default** ``fa``\n\n##### extraClasses\nAny extra CSS classes you wish to add for styling. Here are some [additional classes](http://fortawesome.github.io/Font-Awesome/examples/) you can use with Font Awesome to change the styling.\n\n# Path Tracing\nVersion 1.5.0 introduces the ability to trace paths along the map. If you have a dataset that contains multiple coordinates for each point (think cars, trains, planes, bicycles, anything that moves and can be tracked) you can now trace the path of the object. You can control whether markers are displayed along the path using the **markerVisibility** setting.\n\n### Available Fields and Values\n##### markerVisibility\nShow marker for the given coordinates. Set to ``marker`` to show marker or any other value to hide.\n\n##### pathWeight\nWeight (width) of path. **Default** ``5``\n\n##### pathOpacity\nOpacity of path line. **Default** ``0.5``\n\n##### pathColor\nThe color of the path.  If not specified, the color will be chosen randomly from the set of colors listed in the **Path Colors** option.\n\n# Marker Priority\nVersion 1.4.4 introduces the ability to prioritize how markers are rendered on the map. Higher priority markers will render on top of lower priority markers. This is especially useful for dense maps where you need certain markers to stand out over others.\n\nUse the following setting to set the marker priority.\n\n##### markerPriority\nNumber used to set marker priority. Higher value numbers render over lower value numbers. Set a high value like ``1000`` (or a high negative value to render beneath). **Default** ``0``\n\n# Drilldown\nVersion 1.3.12 introduces drilldown capability! The visualization will identify any non-standard fields and make them available as drilldown fields. Simply add any fields you wish to the final table command and you'll have access to them via drilldown in Simple XML. See the [documentation on dynamic drilldown](http://docs.splunk.com/Documentation/Splunk/6.5.1/Viz/Dynamicdrilldownindashboardsandforms). Refer to this section of the docs on [accessing tokens for dynamic drilldown](http://docs.splunk.com/Documentation/Splunk/latest/Viz/tokens#Define_tokens_for_dynamic_drilldown).\n\n### Usage\nDrilldown is disabled by default. Enable it in the main **Map** section of the format menu.  Simply **double-click** on a marker to activate the drilldown behavior.\n\n### Contextual Drilldown Example\nThis example highlights creating a dashboard with contextual drilldown. I save the description field as **orig_desc** since I'm modifying it with HTML tags. I then add **orig_desc** into the **table** command. The visualization automatically makes that field accessible as a drilldown token. In the visualization you can see I set a **\u0026lt;condition\u0026gt;** statement on the **orig_desc** field. I then set a token called **orig_desc** and use a **\u0026lt;depends\u0026gt;** statement in the timechart looking for the token. The timechart becomes visible once the marker is double-clicked. \n\n```\n\u003cform\u003e\n  \u003clabel\u003eClustered Single Value Viz - Contextual Drilldown Example\u003c/label\u003e\n  \u003cfieldset submitButton=\"false\"\u003e\n    \u003cinput type=\"time\" token=\"field1\"\u003e\n      \u003clabel\u003e\u003c/label\u003e\n      \u003cdefault\u003e\n        \u003cearliest\u003e0\u003c/earliest\u003e\n        \u003clatest\u003e\u003c/latest\u003e\n      \u003c/default\u003e\n    \u003c/input\u003e\n  \u003c/fieldset\u003e\n  \u003crow\u003e\n    \u003cpanel\u003e\n      \u003cviz type=\"leaflet_maps_app.leaflet_maps\"\u003e\n        \u003csearch\u003e\n          \u003cquery\u003eindex=chicago_crime | fillnull | eval orig_desc=description, description = \"\u0026lt;b\u0026gt;\".description.\"\u0026lt;/b\u0026gt;\", markerColor = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"red\", like(description, \"%RECKLESS CONDUCT%\"), \"green\", 1=1, \"blue\"), icon=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"exclamation\", like(description, \"%RECKLESS CONDUCT%\"), \"check-circle\", 1=1, \"circle\") | table latitude, longitude, description, markerColor, icon, orig_desc\u003c/query\u003e\n          \u003cearliest\u003e$field1.earliest$\u003c/earliest\u003e\n          \u003clatest\u003e$field1.latest$\u003c/latest\u003e\n        \u003c/search\u003e\n        \u003cdrilldown\u003e\n          \u003ccondition field=\"orig_desc\"\u003e\n            \u003cset token=\"orig_desc\"\u003e$row.orig_desc$\u003c/set\u003e\n          \u003c/condition\u003e\n        \u003c/drilldown\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.mapTile\"\u003ehttp://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.scrollWheelZoom\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.fullScreen\"\u003e0\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.mapCenterZoom\"\u003e6\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.mapCenterLat\"\u003e42.2846323\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.mapCenterLon\"\u003e-83.7294274\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.minZoom\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.maxZoom\"\u003e19\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.cluster\"\u003e0\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.allPopups\"\u003e0\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.multiplePopups\"\u003e0\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.animate\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.singleMarkerMode\"\u003e0\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.maxClusterRadius\"\u003e80\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.maxSpiderfySize\"\u003e100\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.spiderfyDistanceMultiplier\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeOneBgColor\"\u003e#B5E28C\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeOneFgColor\"\u003e#6ECC39\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.warningThreshold\"\u003e55\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeTwoBgColor\"\u003e#F1D357\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeTwoFgColor\"\u003e#F0C20C\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.criticalThreshold\"\u003e80\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeThreeBgColor\"\u003e#FD9C73\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.rangeThreeFgColor\"\u003e#F18017\u003c/option\u003e\n        \u003coption name=\"refresh.auto.interval\"\u003e900\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.defaultHeight\"\u003e600\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.layerControl\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.layerControlCollapsed\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureTool\"\u003e1\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureLocalization\"\u003een\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureIconPosition\"\u003etopright\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measurePrimaryLengthUnit\"\u003efeet\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureSecondaryLengthUnit\"\u003emiles\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measurePrimaryAreaUnit\"\u003eacres\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureSecondaryAreaUnit\"\u003esqmiles\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureActiveColor\"\u003e#00ff00\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.measureCompletedColor\"\u003e#0066ff\u003c/option\u003e\n        \u003coption name=\"leaflet_maps_app.leaflet_maps.drilldown\"\u003e1\u003c/option\u003e\n      \u003c/viz\u003e\n    \u003c/panel\u003e\n  \u003c/row\u003e\n  \u003crow\u003e\n    \u003cpanel\u003e\n      \u003cchart depends=\"$orig_desc$\"\u003e\n        \u003ctitle\u003eChart for $orig_desc$\u003c/title\u003e\n        \u003csearch\u003e\n          \u003cquery\u003eindex=chicago_crime description=\"$orig_desc$\" | timechart count\u003c/query\u003e\n          \u003cearliest\u003e$field1.earliest$\u003c/earliest\u003e\n          \u003clatest\u003e$field1.latest$\u003c/latest\u003e\n        \u003c/search\u003e\n        \u003coption name=\"charting.axisLabelsX.majorLabelStyle.overflowMode\"\u003eellipsisNone\u003c/option\u003e\n        \u003coption name=\"charting.axisLabelsX.majorLabelStyle.rotation\"\u003e0\u003c/option\u003e\n        \u003coption name=\"charting.axisTitleX.visibility\"\u003evisible\u003c/option\u003e\n        \u003coption name=\"charting.axisTitleY.visibility\"\u003evisible\u003c/option\u003e\n        \u003coption name=\"charting.axisTitleY2.visibility\"\u003evisible\u003c/option\u003e\n        \u003coption name=\"charting.axisX.scale\"\u003elinear\u003c/option\u003e\n        \u003coption name=\"charting.axisY.scale\"\u003elinear\u003c/option\u003e\n        \u003coption name=\"charting.axisY2.enabled\"\u003e0\u003c/option\u003e\n        \u003coption name=\"charting.axisY2.scale\"\u003einherit\u003c/option\u003e\n        \u003coption name=\"charting.chart\"\u003ecolumn\u003c/option\u003e\n        \u003coption name=\"charting.chart.bubbleMaximumSize\"\u003e50\u003c/option\u003e\n        \u003coption name=\"charting.chart.bubbleMinimumSize\"\u003e10\u003c/option\u003e\n        \u003coption name=\"charting.chart.bubbleSizeBy\"\u003earea\u003c/option\u003e\n        \u003coption name=\"charting.chart.nullValueMode\"\u003egaps\u003c/option\u003e\n        \u003coption name=\"charting.chart.showDataLabels\"\u003enone\u003c/option\u003e\n        \u003coption name=\"charting.chart.sliceCollapsingThreshold\"\u003e0.01\u003c/option\u003e\n        \u003coption name=\"charting.chart.stackMode\"\u003edefault\u003c/option\u003e\n        \u003coption name=\"charting.chart.style\"\u003eshiny\u003c/option\u003e\n        \u003coption name=\"charting.drilldown\"\u003eall\u003c/option\u003e\n        \u003coption name=\"charting.layout.splitSeries\"\u003e0\u003c/option\u003e\n        \u003coption name=\"charting.layout.splitSeries.allowIndependentYRanges\"\u003e0\u003c/option\u003e\n        \u003coption name=\"charting.legend.labelStyle.overflowMode\"\u003eellipsisMiddle\u003c/option\u003e\n        \u003coption name=\"charting.legend.placement\"\u003eright\u003c/option\u003e\n      \u003c/chart\u003e\n    \u003c/panel\u003e\n  \u003c/row\u003e\n\u003c/form\u003e\n```\n\n# Layer Controls\nVersion 1.3.6 introduces a few feature that groups marker/icon styles into their own layer. A layer control widget (enabled by default, but optionally hidden) is presented in the upper right hand corner that displays a legend for each icon class with a checkbox to toggle visbility of the markers on the map. This control works for both clustered and single value visualizations. \n\nVersion 1.5.9 introduces the ability to specify a **layerGroup** via SPL for filtering markers via layer controls. The default behavior is to group by icon. If you have the same icon with different colors, the **layerGroup** field allows you to split them into their own group for filtering.\n\n### Available Fields\n##### layerDescription\nAdd description text next to each icon in the layer control legend.\n##### layerGroup\nSpecify unique group that markers belong to. [See Issue 13 for details](https://github.com/sghaskell/Clustered-Single-Value-Map-Visualization/issues/13)\n\nExample\n```\nlayerGroup=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"hbt\", like(description, \"%RECKLESS CONDUCT%\"), \"rc\", 1=1, \"default\")\n```\n\n# Overlays\nVersion 1.3.7 introduces a new feature that allows you to add custom overlays to the map. The first release implements a KML or KMZ overlay feature. If you have existing KML/KMZ files that define features (polyline, polygons, whatever) you can now leverage them to overlay these features on the map.\n\n#### Usage\n\n##### KML/KMZ Overlay\nCopy any KML or KMZ files into the following directory\n\n```\n$SPLUNK_HOME/etc/apps/leaflet_maps_app/appserver/static/visualizations/leaflet_maps/contrib/kml\n```\n\nIf you use a deployer (search head clustering) or a deployment server to manage your search heads, uncompress the app and place your KML files into the above directory and then recompress the app for distribution. \n\nClick 'Format' and selct the 'Overlays' tab. Enter a comma separated list of filenames that you uploaded to the above directory.\n\n```\nfile1.kml,file2.kmz\n```\n\nThe files will be asynchronously loaded when the map is rendered.\n\n# Measurement Plugin\nVersion 1.3.8 indroduces a new feature that allows you to interactively measure paths and area on the map. The feature is enabled by default. Click the icon in the upper right corner of the map and then select 'Create new measurement'. You can draw a simple path or click to define multiple points to measure an area. Measurements will not be persisted for future use. This is an interactive tool designed for a single session.\n\n# Google Places Search\nVersion 1.5.6 introduces a search control for the Google Places API. Log into the [Google API Console](https://console.developers.google.com/flows/enableapi?apiid=places_backend\u0026reusekey=true\u0026authuser=2) and enable the **Google Places API Web Service** and **Google Maps JavaScript API** for the given project and create an API key. See [Google's docs](https://developers.google.com/places/web-service/get-api-key?authuser=2) for detailed instructions.\n\n#### Usage\n**Enable/Disable** the search control via the format menu option **Google Places -\u003e Google Places Search -\u003e Enabled**\n\nSet the **API Key** option **Google Places -\u003e API Key**\n\nOptionally set the **Zoom Level** option **Google Places -\u003e Zoom Level** for the desired fly to zoom level.\n\n# Bing Maps\nVersion 1.5.17 introduces a Bing Maps tile layer. \n\n#### Usage\n**Enable/Disable** Bing Maps via the format menu option **Bing Maps -\u003e Bing Maps -\u003e Enabled**. When Bing Maps are enabled, the default tile layer set and the map attribution override setting will not work.\n\nSet the **API Key** option **Bing Maps -\u003e API Key** by pasting your Bing Maps API Key into this field.\n\nChoose the desired **Tile Layer** under **Bing Maps -\u003e Tile Layer**\n\nOptionally set the **Label Language** using **Bing Maps -\u003e Label Language** to localize the tile labels in the desired language. See [Microsoft's documentation](https://msdn.microsoft.com/en-us/library/hh441729.aspx) for more details.\n\n# Search Examples\n### Basic plot of latitude and longitude\n```\nindex=chicago_crime \n| fillnull \n| table latitude, longitude\n```\n\n### Plot with latitude, longitude and description\n```\nindex=chicago_crime \n| fillnull \n| eval description = \"\u003cb\u003e\".description.\"\u003c/b\u003e\" \n| table latitude, longitude, description\n```\n\n### Plot with custom marker color and icons\n```\nindex=chicago_crime \n| fillnull \n| eval description = \"\u003cb\u003e\".description.\"\u003c/b\u003e\" \n| eval markerColor = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"red\", like(description, \"%RECKLESS CONDUCT%\"), \"green\", 1=1, \"blue\"), \nicon=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"exclamation\", like(description, \"%RECKLESS CONDUCT%\"), \"check-circle\", 1=1, \"circle\") \n| table latitude, longitude, description, markerColor, icon\n```\n\n### Plot overriding custom marker with map icons from Font Awesome\n```\nindex=chicago_crime \n| fillnull \n| eval description = \"\u003cb\u003e\".description.\"\u003c/b\u003e\"\n| eval markerColor = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"red\", like(description, \"%RECKLESS CONDUCT%\"), \"green\", 1=1, \"blue\"), \nicon=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"map-marker\", like(description, \"%RECKLESS CONDUCT%\"), \"map-pin\", 1=1, \"circle\"), \niconColor=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"#374D13\", like(description, \"%RECKLESS CONDUCT%\"), \"rgb(0,255,255)\", 1=1, \"white\") \n| table latitude, longitude, description, markerColor, icon, iconColor\n``` \n\n### Plot SVG markers with custom marker size, shadow size and marker priority\nRed exclamation markers render on top of green check markers on top of smaller blue markers.\n```\nindex=chicago_crime\n| fillnull\n| eval description = \"\u003cb\u003e\".description.\"\u003c/b\u003e\",\nshadowSize = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"30,46\", like(description, \"%RECKLESS CONDUCT%\"), \"30,46\", 1=1, \"20,36\"),\nshadowAnchor = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"30,30\", like(description, \"%RECKLESS CONDUCT%\"), \"30,30\", 1=1, \"32,40\"),\nextraClasses = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"fa-lg\", like(description, \"%RECKLESS CONDUCT%\"), \"fa-lg\", 1=1, \"\"),\nmarkerSize = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"35,45\", like(description, \"%RECKLESS CONDUCT%\"), \"35,45\", 1=1, \"15,35\"),\nmarkerType = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"svg\", like(description, \"%RECKLESS CONDUCT%\"), \"svg\", 1=1, \"svg\"),\nmarkerColor = case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"red\", like(description, \"%RECKLESS CONDUCT%\"), \"green\", 1=1, \"blue\"),\nicon=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), \"exclamation\", like(description, \"%RECKLESS CONDUCT%\"), \"check-circle\", 1=1, \"circle\"),\nmarkerPriority=case(like(description, \"%HARASSMENT BY TELEPHONE%\"), 1000000, like(description, \"%RECKLESS CONDUCT%\"), 500000, 1=1, -1000000)\n| table latitude, longitude, description, markerColor, icon, markerType, markerSize, extraClasses, shadowSize, shadowAnchor, markerPriority\n```\n\n### Show path lines with only the last marker visible for data set with the following fields: _time, latitude, longitude, vehicle\n```\n| inputlookup vehicles.csv \n| reverse \n| streamstats current=f window=1 first(_time) as ftime by vehicle \n| reverse \n| eval markerVisibility=if(isnull(ftime), \"marker\", \"foo\"), description=vehicle, pathWeight=case(like(user, \"%mustang%\"), 10), pathOpacity=case(like(user, \"%mustang%\"), 0.8)\n| table latitude, longitude, vehicle, description, markerVisibility, pathWeight, pathOpacity\n```\n\n# Formatting Options\n### Map\n###### Map Tile\nSelect one of six available map tiles\n###### Map Tile Override\nUse your own map tile URL and override defaults. Example: http://a.tiles.wmflabs.org/hikebike/{z}/{x}/{y}.png. Find more tiles [here](http://wiki.openstreetmap.org/wiki/Tiles)\n###### Map Attribution Override\nUse your own attribution. - **Requires browser Refresh**\n###### Scroll Wheel Zoom\nEnable or disable scroll wheel zoom.\n###### Full Screen Mode\nEnable or disable full screen mode. Map takes up all available space in browser and adjust to resize. - **Requires browser Refresh**\n###### Drilldown\nEnable or disable drilldown. Double click a marker to activate drilldown. - **Requires browser Refresh**\n###### Context Menu\nEnable or disable context menu when right clicking the map.\n###### Default Height\nInitial Height Of Map (Default: 600)\n###### Auto Fit \u0026 Zoom\nDynamically set map view that contains all markers with the maximum zoom level possible when search finishes. (Default: Enabled)\n###### Auto Fit \u0026 Zoom Delay (ms)\nDelay in milliseconds before triggering Auto Fit \u0026 Zoom. Increase if you get inconsistent behavior (Default: 500)\n###### Dashboard Refresh Interval\nDelay in seconds before refreshing the dasbhoard. WARNING - Refresh forces a full browser refresh on the entire dashboard. This workaround addresses a usability issue in the Custom Viz API around reliably honoring panel or global SimpleXML refresh. (default: 0 - disabled)\n###### Map Zoom\nInitial Zoom for map (Default: 6)\n###### Center Lat\nInitial Center Latitiude (Default: 39.50)\n###### Center Lon\nInitial Center Longitude (Default: -98.35)\n###### Min Zoom\nMinimum zoom for tile layer. Does not affect map zoom. (Default: 1)\n###### Max Zoom\nMaximum zoom for tile layer. Does not affect map zoom. (Default: 19)\n\n### Clustering\n###### Enable Clustering\nDisable clustering and plot all markers. WARNING - This comes at a significant performance penalty for large datasets. - **Requires browser Refresh**\n###### Show All Popups\nDisplay all popups on page load. Only works with clustering disabled. - **Requires browser Refresh**\n###### Allow Multiple Popups\nAllow multiple popups to dispaly on screen without closing previous. Will disappear at higher zoom levels with clustering enabled. Enabled by default when showing all popups. - **Requires browser Refresh**\n###### Animate\nAnimate cluster separation on zoom - **Requires browser Refresh**\n###### Single Marker Mode \nRe-style single marker icon to marker cluster style (round) - **Requires browser Refresh**\n###### Max Cluster Radius\nA cluster will cover at most this many pixels from its center (Default: 80) - **Requires browser Refresh**\n###### Cluster Warning Size\nDisplay an alert warning that the cluster exceeds threshold at max-zoom and do not show underlying markers. Browser may hang and die if a single point exceeds a very large number.(Default: 100) - **Requires browser refresh**\n###### Distance Multiplier\nIncrease to increase the distance away that markers appear from the center when expanded at max zoom. (Default: 1) - **Requires browser refresh**\n\n### Markers\n###### Permanent Tooltip\nOpen the tooltip permanently or only on mouseover. Depends on tooltip field in search results.\n###### Sticky Tooltip\nTooltip follows mouse instead of fixed position.\n\n### Google Places\n###### Google Places Search\nEnable or disable Google Places API search control.\n###### API Key\nGoogle Places API Key\n###### Search Bar Position\nPosition of Google Places Search Bar (Default: Top Left)\n###### Zoom Level\nDesired zoom level to fly to\n\n### Cluster Colors\n#### Cluster color changes require browser refresh\n###### Range One Background\n(Default: #B5E28C)\n###### Range One Foreground\n(Default: #6ECC39)\n###### Range two thereshold\nNumber at which cluster group two starts\n###### Range Two Background\n(Default: #F1D357)\n###### Range Two Foreground\n(Default: #F0C20C)\n###### Range three threshold\nNumber at which cluster group three starts\n###### Range Three Background\n(Default: #FD9C73)\n###### Range Three Foreground\n(Default: #F18017)\n\n### Layer Controls\n#### Layer control changes require browser refresh\n###### Layer Control\nEnable or disable dynamic filtering of layer groups on map. Each icon type's visibility can be toggled via control in upper right corner of map. (Default: Enabled)\n###### Control Collapsed\nCollapse or expand layer control widget. If collapsed, mousing over icon will expand. (Default: Collapsed)\n\n### Overlays\n#### Overlay control changes require browser refresh\n###### KML/KMZ Overlay\nComma separated list of KML or KMZ file names copied into kml directory of app (file1.kml, file2.kml)\n\n### Measure\n###### Enable Measurement Plugin\nEnable or disable measurement plugin to allow path and area measurement on map. (Default: Enabled)\n###### Localization\nLanguage (Default: English)\n###### Icon Position\nPosition of measurement icon on map (Default: Top Right)\n###### Primary Length Unit\nPrimary unit for length measurement (Default: feet)\n###### Secondary Length Unit\nSecondary unit for length measurement (Default: miles)\n###### Primary Area Unit\nPrimary unit for area measurement (Default: acres)\n###### Secondary Area Unit\nSecondary unit for area measurement (Default: square miles)\n###### Active Color\nColor of measurement when actively drawing (Default: #00ff00)\n###### Completed Color\nColor of measurement when drawing is complete (Default: #0066ff)\n\n### Path Lines\n###### Show Path Lines\nDraw path lines on map for markers that have multiple coordinates.\n###### Path Identifier\nField used to distinguish unique paths, e.g. vehicle number or trip ID\n###### Path Colors\nComma-separated list of hex or html colors for path lines (wraps around if more paths than colors)\n\n# Support\n###### This app is supported by Scott Haskell ([shaskell@splunk.com](mailto:shaskell@splunk.com))\n###### [Code hosted at Github](https://github.com/sghaskell/Clustered-Single-Value-Map-Visualization)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsghaskell%2FClustered-Single-Value-Map-Visualization","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsghaskell%2FClustered-Single-Value-Map-Visualization","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsghaskell%2FClustered-Single-Value-Map-Visualization/lists"}