Skip to content

Instantly share code, notes, and snippets.

@dmitry-zasypkin
Created May 31, 2016 15:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmitry-zasypkin/f14fb7a2ac4fb3f4db5727efb197f075 to your computer and use it in GitHub Desktop.
Save dmitry-zasypkin/f14fb7a2ac4fb3f4db5727efb197f075 to your computer and use it in GitHub Desktop.
InterSystems DeepSee heatmap demo
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
<Class name="DeepSee.EnhancedMapPortlet">
<Description>
Portlet that displays a clickable google map. Supports 2012.2 or higher versions of Cache.
Improvements compared to %DeepSee.Component.Widget.map:
1) Polygon support. In addition to markers, this widget supports clickable colored polygons with tooltips.
The "coordsProperty" widget setting should be set to the name of a data source property that provides polygon coordinates. The value of this property is expected to contain one or more ordered sequences of coordinates each of which designates a closed loop.
Sequences are delimited by ; (semicolon). Coordinates in such a sequence are delimited by spaces, for example: 42.725042,55.257428,0 42.727162,55.270206,0 42.737196,55.27019,0 42.725042,55.257428,0
Each coordinate triple consists of latitude / longitude numbers and a noWrap flag (see http://code.google.com/intl/en/apis/maps/documentation/javascript/reference.html#LatLng for details).
An alternative approach is to store polygon coordinates in a static js file rather than in the database. See coordsJsFile property description for details.
2) Configurable names of data source properties that provide marker and polygon data (latitude, longitude, color, opacity etc).
3) Configurable "onclick" handler for markers and polygons. Configurable "onaddpolygon" and "onaddmarker" handlers.
4) Drilldown capabilities.
5) Convenience javascript methods: createInfoWindowAtPosition(), getControl() and findWidgetByName().
6) Heatmap mode for rendering markers (in this mode marker coordinates are used to render heat "points", no real markers are created).</Description>
<Super>%DeepSee.Component.Portlet.abstractPortlet</Super>
<Parameter name="INCLUDEFILES">
<Default><![CDATA[script:http://maps.google.com/maps/api/js?sensor=false&libraries=visualization]]></Default>
</Parameter>
<Property name="latitude">
<Description>
Initial latitude (as a decimal number).</Description>
<Type>%ZEN.Datatype.float</Type>
<InitialExpression>42.36</InitialExpression>
</Property>
<Property name="longitude">
<Description>
Initial longitude (as a decimal number).</Description>
<Type>%ZEN.Datatype.float</Type>
<InitialExpression>288.92</InitialExpression>
</Property>
<Property name="zoom">
<Description>
Initial zoom level (0 shows entire globe).</Description>
<Type>%ZEN.Datatype.integer</Type>
<InitialExpression>12</InitialExpression>
</Property>
<Property name="mapType">
<Description>
Initial map display.</Description>
<Type>%ZEN.Datatype.string</Type>
<InitialExpression>"ROADMAP"</InitialExpression>
<Parameter name="VALUELIST" value=",ROADMAP,SATELLITE,HYBRID,TERRAIN"/>
</Property>
<Property name="markersDraggable">
<Description>
If true, then the markers on this map are draggable.</Description>
<Type>%ZEN.Datatype.boolean</Type>
<InitialExpression>0</InitialExpression>
</Property>
<Property name="latitudeProperty">
<Description>
Name of property in data source that provides the latitude value for a marker.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="longitudeProperty">
<Description>
Name of property in data source that provides the longitude value for a marker.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="coordsProperty">
<Description>
Name of property in data source that provides the coordinates array for a polygon.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="colorProperty">
<Description>
Name of property in data source that provides the color of a polygon.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="onclickmarker">
<Description>
onclickmarker event handler: if defined, this event is fired when a marker is clicked.</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="onclickpolygon">
<Description>
onclickpolygon event handler: if defined, this event is fired when a polygon is clicked.</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="markerTitleProperty">
<Description>
Name of property in data source that provides the title of a marker (used for tooltip text).</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="polygonTitleProperty">
<Description>
Name of property in data source that provides the title of a polygon (used for tooltip text).</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="markerDataProperties">
<Description>
List of properties in data source that provides data to be stored within the current marker. This data is visible from onclick event handler.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="polygonDataProperties">
<Description>
List of properties in data source that provides data to be stored within the current polygon. This data is visible from onclick event handler.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="ondrilldown">
<Description>
ondrilldown event handler: if defined, this event is fired from drillDown() method.</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="ondrillup">
<Description>
ondrillup event handler: if defined, this event is fired from drillUp() method.</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="fillOpacityProperty">
<Description>
Name of property in data source that provides polygon fill opacity.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="isClickableProperty">
<Description>
Name of property in data source that provides "сlickable" attribute value for markers and polygons.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="hoverOpacity">
<Description>
Hover opacity for clickable polygons.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="strokeOpacity">
<Description>
Polygon stroke opacity.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="strokeWeight">
<Description>
Polygon stroke weight.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="fillOpacity">
<Description>
Default fillOpacity for polygons.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="markerIconProperty">
<Description>
Name of property in data source that provides icon href for markers.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="markerIcon">
<Description>
Default marker icon href.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="markerIconSize">
<Description>
Marker icon size (ignored if both markerIcon and markerIconProperty are not set).</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="onapplyfilters">
<Description>
onapplyfilters event handler</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="onaddpolygon">
<Description>
onaddpolygon event handler</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="onaddmarker">
<Description>
onaddmarker event handler</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="coordsJsFile">
<Description><![CDATA[
JS file containing "function loadCoordinates(polygonCoordsArray) {}" that populates a polygon coordinates associative array.
If <var>coordsJsFile</var> is specified then <var>coordsProperty</var> must contain name of the property that provides keys for the coordinates associative array.]]></Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="drillUpButtonPosition">
<Description><![CDATA[
Where "<< Back" button is located]]></Description>
<Type>%ZEN.Datatype.string</Type>
<InitialExpression>"top"</InitialExpression>
<Parameter name="VALUELIST" value="top,bottom"/>
</Property>
<Property name="markersAsHeatmap">
<Description>
Use markers coordinates to render a heatmap</Description>
<Type>%ZEN.Datatype.boolean</Type>
<InitialExpression>0</InitialExpression>
</Property>
<Property name="onrender">
<Description>
onrender</Description>
<Type>%ZEN.Datatype.eventHandler</Type>
</Property>
<Property name="colorClientProperty">
<Description>
Name of property in data source that provides values for client-side calculation of polygon colors.</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Property name="colorFormula">
<Description>
Formula that is used during client-side calculation of polygon colors. Only "rgb(...)" and "hsl(...)" functions are supported a the top level. Formula examples: rgb(x*x, 255 - x/10, x+x*32), hsl((255-x)/255 * 120, 100%, 50%).</Description>
<Type>%ZEN.Datatype.string</Type>
</Property>
<Method name="%OnGetPortletName">
<ClassMethod>1</ClassMethod>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[ quit "Extended Map"
]]></Implementation>
</Method>
<Method name="%OnGetPortletIcon">
<ClassMethod>1</ClassMethod>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[ quit "deepsee/world_48.gif"
]]></Implementation>
</Method>
<Method name="%OnGetPortletSettings">
<ClassMethod>1</ClassMethod>
<FormalSpec>*pInfo:%List</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
kill pInfo
// $LB(name,value,type,caption,title)
set tTypeList = "ENUM^"_$$$Text("Roadmap","%DeepSee")_":ROADMAP,"_
$$$Text("Satellite","%DeepSee")_":SATELLITE,"_
$$$Text("Hybrid","%DeepSee")_":HYBRID,"_
$$$Text("Terrain","%DeepSee")_":TERRAIN"
set pInfo($I(pInfo)) = $LB("mapType","",tTypeList,$$$Text("Map Type","%DeepSee"),$$$Text("Initial display type for the map","%DeepSee"))
set pInfo($I(pInfo)) = $LB("zoom",12,"%Integer",$$$Text("Zoom","%DeepSee"),$$$Text("Initial zoom level for the map","%DeepSee"))
set pInfo($I(pInfo)) = $LB("latitude",55.74,"%Number",$$$Text("Starting latitude","%DeepSee"),$$$Text("Initial latitude for the map","%DeepSee"))
set pInfo($I(pInfo)) = $LB("longitude",37.6,"%Number",$$$Text("Starting longitude","%DeepSee"),$$$Text("Initial longitude for the map","%DeepSee"))
set pInfo($I(pInfo)) = $LB("onclickmarker","","%ZEN.Datatype.eventHandler","'onclickmarker' event handler","User callback for onclickmarker event")
set pInfo($I(pInfo)) = $LB("markersdraggable",1,"%Boolean","Draggable markers?","Toggle markers drag'n'drop.")
set pInfo($I(pInfo)) = $LB("latitudeProperty","","%ZEN.Datatype.string","Latitude property","Latitude property for markers")
set pInfo($I(pInfo)) = $LB("longitudeProperty","","%ZEN.Datatype.string","Longitude property","Longitude property for markers")
set pInfo($I(pInfo)) = $LB("markerTitleProperty","","%ZEN.Datatype.string","Marker title property","Title property for markers")
set pInfo($I(pInfo)) = $LB("markerDataProperties","","%ZEN.Datatype.string","Marker data properties","List of data properties for markers")
set pInfo($I(pInfo)) = $LB("markerIconProperty","","%ZEN.Datatype.string","Marker icon property","Marker icon property")
set pInfo($I(pInfo)) = $LB("markerIcon","","%ZEN.Datatype.string","Marker icon","Default marker icon")
set pInfo($I(pInfo)) = $LB("markerIconSize","","%ZEN.Datatype.string","Marker icon size","Default marker icon size (ingored if Marker icon is not set)")
set pInfo($I(pInfo)) = $LB("coordsJsFile","","%ZEN.Datatype.string","JS file with coords","JS file with javascript 'function loadCoordinates(polygonCoordsArray) {...}' that populates polygonCoordsArray argument with polygon coordinates keyed by values from the data source property specified in 'Polygon coords property' setting.")
set pInfo($I(pInfo)) = $LB("coordsProperty","","%ZEN.Datatype.string","Polygon coords property","Data source property that provides coordinates for polygons if 'JS file with coords' is not specified. Otherwise this setting should contain name of data source property that provides keys for associative array which is populated by javascript code in 'JS file with coords'.")
set pInfo($I(pInfo)) = $LB("onclickpolygon","","%ZEN.Datatype.eventHandler","'onclickpolygon' event handler","User callback for onclickpolygon event")
set pInfo($I(pInfo)) = $LB("colorProperty","","%ZEN.Datatype.string","Polygon сolor property","Color property for polygons")
set pInfo($I(pInfo)) = $LB("polygonTitleProperty","","%ZEN.Datatype.string","Polygon title property","Title property for polygons")
set pInfo($I(pInfo)) = $LB("polygonDataProperties","","%ZEN.Datatype.string","Polygon data properties","List of data properties for polygons")
set pInfo($I(pInfo)) = $LB("fillOpacityProperty","","%ZEN.Datatype.string","Fill opacity property","Fill opacity property for polygons")
set pInfo($I(pInfo)) = $LB("isClickableProperty","","%ZEN.Datatype.string","IsClickable flag property","IsClickable flag property for polygons")
set pInfo($I(pInfo)) = $LB("fillOpacity","","%ZEN.Datatype.string","Fill opacity","Default fill opacity for polygons")
set pInfo($I(pInfo)) = $LB("hoverOpacity","","%ZEN.Datatype.string","Hover opacity","Hover opacity for clickable polygons")
set pInfo($I(pInfo)) = $LB("strokeOpacity","","%ZEN.Datatype.string","Stroke opacity","Stroke opacity for polygons")
set pInfo($I(pInfo)) = $LB("strokeWeight","","%ZEN.Datatype.string","Stroke weight","Stroke weight for polygons")
set pInfo($I(pInfo)) = $LB("drillUpButtonPosition","top","ENUM^top,bottom","Drill-up button position","Where ""<< Back"" button is located")
set pInfo($I(pInfo)) = $LB("ondrilldown","","%ZEN.Datatype.eventHandler","'ondrilldown' event handler","User callback for ondrilldown event")
set pInfo($I(pInfo)) = $LB("ondrillup","","%ZEN.Datatype.eventHandler","'ondrillup' event handler","User callback for ondrillup event")
set pInfo($I(pInfo)) = $LB("onapplyfilters","","%ZEN.Datatype.eventHandler","'onapplyfilters' event handler","User callback for onapplyfilters event")
set pInfo($I(pInfo)) = $LB("onaddpolygon","","%ZEN.Datatype.eventHandler","'onaddpolygon' event handler","User callback for onaddpolygon event")
set pInfo($I(pInfo)) = $LB("onaddmarker","","%ZEN.Datatype.eventHandler","'onaddmarker' event handler","User callback for onaddmarker event")
set pInfo($I(pInfo)) = $LB("onrender","","%ZEN.Datatype.eventHandler","'onrender' event handler","User callback for onrender event")
set pInfo($I(pInfo)) = $LB("markersAsHeatmap",0,"%Boolean","Heatmap mode","Toggle heatmap mode for rendering markers.")
set pInfo($I(pInfo)) = $LB("colorClientProperty","","%ZEN.Datatype.string","Property for client-side polygon color calculation","Property for client-side polygon color calculation")
set pInfo($I(pInfo)) = $LB("colorFormula","","%ZEN.Datatype.string","Formula for client-side polygon color calculation","Formula for client-side polygon color calculation")
quit $$$OK
]]></Implementation>
</Method>
<Method name="renderContents">
<Description>
Client-side method to render control.</Description>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
this._mapObject = null;
var mapDiv = this.getEnclosingDiv();
// test if we have not been rendered yet
if (mapDiv == null) return;
// make sure our div has some area
var width = isNaN(parseFloat(this.width)) ? 200 : parseFloat(this.width);
var height = isNaN(parseFloat(this.height)) ? 200 : parseFloat(this.height);
if ('' == this.enclosingStyle) {
mapDiv.style.width = width + 'px';
mapDiv.style.height = height + 'px';
}
// get data from controller, if present.
this.acquireData();
// create map
this.initMap(mapDiv);
// add markers
this.syncMarkers();
// add polygons
this.syncPolygons();
// call onrendder
zenInvokeCallbackMethod(this.onrender,this,'onrender');
]]></Implementation>
</Method>
<Method name="initMap">
<Description>
Initialize the map</Description>
<FormalSpec>mapDiv</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
if (('undefined' == typeof google)||('undefined' == typeof google.maps)) {
mapDiv.innerHTML = $$$Text('Unable to load google map api.');
return;
}
var mapTypeId = this.getMapTypeId(this.mapType);
this.latitude = parseFloat(this.latitude);
if (isNaN(this.latitude)) this.latitude = 42.36;
this.longitude = parseFloat(this.longitude);
if (isNaN(this.longitude)) this.longitude = 288.92;
var mapLatlng = new google.maps.LatLng(this.latitude, this.longitude);
this.zoom = parseInt(this.zoom, 10);
if (isNaN(this.zoom)) this.zoom = 0;
var mapOptions = {
zoom: this.zoom,
center: mapLatlng,
mapTypeId: mapTypeId
}
var map = new google.maps.Map(mapDiv, mapOptions);
this._mapObject = map;
// array of markers
this._markers = [];
// array of polygons
this._polygons = [];
// drilldown arrays
this._prevZoom = [];
this._prevCenter = [];
this._drillDownTitle = [];
// add listeners
var code = new Function('zenPage.getComponent('+this.index+').zoomChangedHandler();');
google.maps.event.addListener(map, 'zoom_changed', code);
var code = new Function('zenPage.getComponent('+this.index+').dragendHandler();');
google.maps.event.addListener(map, 'dragend', code);
var code = new Function('zenPage.getComponent('+this.index+').centerChangedHandler();');
google.maps.event.addListener(map, 'center_changed', code);
]]></Implementation>
</Method>
<Method name="zoomChangedHandler">
<Description>
Callback for zoom-changed event.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
this.zoom = map.getZoom();
}
]]></Implementation>
</Method>
<Method name="dragendHandler">
<Description>
Callback for map dragend event.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var latLng = map.getCenter();
this.latitude = latLng.lat();
this.longitude = latLng.lng();
}
]]></Implementation>
</Method>
<Method name="getMapObject">
<Description>
Return the google map API object used by the map view.</Description>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ return this._mapObject;
]]></Implementation>
</Method>
<Method name="getMapTypeId">
<Description>
Given the name of a map type, convert to a map type id.</Description>
<FormalSpec>type</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
if (('undefined' == typeof google)||('undefined' == typeof google.maps)) {
return '';
}
var mapType = google.maps.MapTypeId.ROADMAP;
switch (type) {
case 'HYBRID':
mapType = google.maps.MapTypeId.HYBRID;
break;
case 'SATELLITE':
mapType = google.maps.MapTypeId.SATELLITE;
break;
case 'TERRAIN':
mapType = google.maps.MapTypeId.TERRAIN;
break;
case 'ROADMAP':
default:
break;
}
return mapType;
]]></Implementation>
</Method>
<Method name="setProperty">
<Description>
Set the value of a named property.</Description>
<FormalSpec>property,value,value2</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
switch(property) {
case 'latitude':
case 'longitude':
this[property] = value;
if (map) {
var mapLatlng = new google.maps.LatLng(parseFloat(this.latitude), parseFloat(this.longitude));
map.panTo(mapLatlng);
}
break;
case 'zoom':
this[property] = value;
if (map) {
map.setZoom(parseInt(this.zoom,10));
}
break;
case 'mapType':
this[property] = value;
if (map) {
var mapTypeId = this.getMapTypeId(this.mapType);
map.setMapTypeId(mapTypeId);
}
break;
default:
return this.invokeSuper('setProperty',arguments);
}
return true;
]]></Implementation>
</Method>
<Method name="notifyViewHandler">
<Description>
Notification that the dataController associated with this dataView has raised an event.</Description>
<FormalSpec>reason,data1,data2,data3</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
switch(reason) {
case 'dataChange':
this.onApplyFilters(true);
case 'modelChange':
// some change in dataController
this.acquireData();
this.syncMarkers();
this.syncPolygons();
break;
case 'seriesChange':
break;
}
]]></Implementation>
</Method>
<Method name="addMarker">
<Description><![CDATA[
Add a marker to the map at given coordinates.<br/>
<var>id</var> is a user-defined identifier associated with the marker.<br/>
Returns the marker object.]]></Description>
<FormalSpec>id,latitude,longitude,title,isClickable,icon,data</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var marker = null;
var map = this.getMapObject();
if (map && !isNaN(parseFloat(latitude)) && !isNaN(parseFloat(longitude))) {
var mapLatlng = new google.maps.LatLng(parseFloat(latitude), parseFloat(longitude));
marker = new google.maps.Marker({
position: mapLatlng,
map: map,
draggable: this.markersDraggable,
title:title,
clickable: (isClickable == 1),
icon: (icon ? (this.markerIconSize ? new google.maps.MarkerImage(icon, null, null, null, new google.maps.Size(this.markerIconSize, this.markerIconSize)) : icon) : null),
data: data});
// add to list
marker._id = id;
var index = this._markers.length;
this._markers[index] = marker;
// add event handler(s)
if (this.markersDraggable) {
var code = new Function('zenPage.getComponent('+this.index+').markerDragEndHandler("'+index+'");');
google.maps.event.addListener(marker, 'dragend', code);
}
var code = new Function('zenPage.getComponent('+this.index+').markerClickHandler("'+index+'");');
google.maps.event.addListener(marker, 'click', code);
}
return marker;
]]></Implementation>
</Method>
<Method name="addPolygon">
<Description><![CDATA[
Add a polygon to the map at given coordinates.<br/>
<var>id</var> is a user-defined identifier associated with the polygon.<br/>
Returns the polygon object.]]></Description>
<FormalSpec>id,coords,color,fo,isClickable,title,data</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var polygon = null;
var map = this.getMapObject();
if (map)
{
if (color.substring(0, 4) === "rgb(" && color.indexOf(")") == (color.length - 1) && color.indexOf(".") > -1)
{
var colorAr = color.substring(4, color.length - 1).split(",");
color = "rgb(" + String(parseFloat(colorAr[0])).split(".")[0] + "," + String(parseFloat(colorAr[1])).split(".")[0] + "," + String(parseFloat(colorAr[2])).split(".")[0] + ")";
}
polygon = new google.maps.Polygon({
tooltip: '',
title: title,
fillColor: (color.substring(0, "hsv2rgb".length) === "hsv2rgb" ? eval(color) : color),
fillOpacity: fo,
clickable: (isClickable == 1),
strokeColor: (color.substring(0, "hsv2rgb".length) === "hsv2rgb" ? eval(color) : color),
strokeOpacity: (this.strokeOpacity ? this.strokeOpacity : 0.5),
strokeWeight: (this.strokeWeight ? this.strokeWeight : 3),
paths: coords,
map: map,
data: data,
defaultFO: fo});
// add to list
polygon._id = id;
var index = this._polygons.length;
this._polygons[index] = polygon;
var code = new Function('event', 'zenPage.getComponent('+this.index+').polygonClickHandler("'+index+'", event);');
google.maps.event.addListener(polygon, 'click', code);
code = new Function('event', 'zenPage.getComponent('+this.index+').polygonMouseOver("'+index+'", event);');
google.maps.event.addListener(polygon, 'mouseover', code);
code = new Function('event', 'zenPage.getComponent('+this.index+').polygonMouseMove("'+index+'", event);');
google.maps.event.addListener(polygon, 'mousemove', code);
code = new Function('event', 'zenPage.getComponent('+this.index+').polygonMouseOut("'+index+'", event);');
google.maps.event.addListener(polygon, 'mouseout', code);
}
return polygon;
]]></Implementation>
</Method>
<Method name="polygonMouseOver">
<Internal>1</Internal>
<FormalSpec>index,event</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var polygon = this.getPolygon(index);
if (polygon && polygon.clickable) polygon.setOptions({fillOpacity: (this.hoverOpacity ? this.hoverOpacity : 0.35)});
}
]]></Implementation>
</Method>
<Method name="polygonMouseMove">
<Internal>1</Internal>
<FormalSpec>index,event</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var polygon = this.getPolygon(index);
if (polygon && polygon.tooltip)
{
clearTimeout(polygon.tooltipTimer);
polygon.tooltipTimer = setTimeout('zenPage.getComponent('+this.index+').polygonTooltipTimer('+index+',' + event.latLng.lat() + ',' + event.latLng.lng() + ');', 500);
}
}
]]></Implementation>
</Method>
<Method name="polygonTooltipTimer">
<Internal>1</Internal>
<FormalSpec>index,lat,lng</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var polygon = this.getPolygon(index);
if (polygon && polygon.tooltip) polygon.tooltip.show(new google.maps.LatLng(lat, lng));
}
]]></Implementation>
</Method>
<Method name="polygonMouseOut">
<Internal>1</Internal>
<FormalSpec>index,event</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var polygon = this.getPolygon(index);
if (polygon)
{
if (polygon.clickable) polygon.setOptions({fillOpacity: polygon.defaultFO});
if (polygon.tooltip)
{
polygon.tooltip.hide();
clearTimeout(polygon.tooltipTimer);
}
}
}
]]></Implementation>
</Method>
<Method name="polygonClickHandler">
<Internal>1</Internal>
<FormalSpec>index,event</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var polygon = this.getPolygon(index);
if (polygon) {
if (polygon.tooltip)
{
polygon.tooltip.hide();
clearTimeout(polygon.tooltipTimer);
}
zenInvokeCallbackMethod(this.onclickpolygon,this,'onclickpolygon','polygon',polygon,'position',event.latLng);
}
}
]]></Implementation>
</Method>
<Method name="getMarker">
<Description>
Find marker in marker list by index # (0-based).</Description>
<Internal>1</Internal>
<FormalSpec>index</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ return this._markers ? this._markers[index] : null;
]]></Implementation>
</Method>
<Method name="getPolygon">
<Description>
Find polygon in polygon list by index # (0-based).</Description>
<Internal>1</Internal>
<FormalSpec>index</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ return this._polygons ? this._polygons[index] : null;
]]></Implementation>
</Method>
<Method name="markerDragEndHandler">
<Description>
Callback for marker dragend event.</Description>
<Internal>1</Internal>
<FormalSpec>index</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var marker = this.getMarker(index);
if (marker) {
this.createInfoWindow(marker,'Marker moved to:<br/>' + marker.getPosition());
}
}
]]></Implementation>
</Method>
<Method name="markerClickHandler">
<Description>
Callback for marker click event.</Description>
<Internal>1</Internal>
<FormalSpec>index</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map) {
var marker = this.getMarker(index);
if (marker) {
zenInvokeCallbackMethod(this.onclickmarker,this,'onclickmarker','marker',marker);
}
}
]]></Implementation>
</Method>
<Method name="createInfoWindow">
<Description>
Create and show an info window for a given marker.</Description>
<Internal>1</Internal>
<FormalSpec>marker,content</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map && marker) {
var infoWindow = new google.maps.InfoWindow({content: content});
infoWindow.open(map,marker);
return infoWindow;
}
else
{
return null;
}
]]></Implementation>
</Method>
<Method name="createInfoWindowAtPosition">
<Description>
Create and show an info window at the specified position.</Description>
<FormalSpec>position,content</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map && position) {
var infoWindow = new google.maps.InfoWindow({content: content});
//infoWindow.position = position;
infoWindow.setPosition(position);
infoWindow.open(map);
return infoWindow;
}
else
{
return null;
}
]]></Implementation>
</Method>
<Method name="removeMarker">
<Description><![CDATA[
Remove a marker from the map.
<var>marker</var> is the marker to remove.]]></Description>
<FormalSpec>marker</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
try {
marker.setMap(null);
}
catch(ex) {
// swallow google error!
}
]]></Implementation>
</Method>
<Method name="removePolygon">
<Description><![CDATA[
Remove a polygon from the map.
<var>polygon</var> is the polygon to remove.]]></Description>
<FormalSpec>polygon</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
try {
if (polygon.tooltip) polygon.tooltip.setMap(null);
polygon.setMap(null);
}
catch(ex) {
// swallow google error!
}
]]></Implementation>
</Method>
<Method name="acquireData">
<Description>
Internal method: acquire data for this view and store a copy in a local cache.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var controller = this.getController();
if (null == controller) {
// try to connect to dataController
this.connectToController();
controller = this.getController();
}
// array of marker data
this._markerData = [];
if (controller && (this.latitudeProperty != '') && (this.longitudeProperty != ''))
{
// get data from controller (make sure data is loaded)
var dims = controller.getDimensions();
// are we connected to a pivot table?
var invert = controller.getSelectedRange;
if (!invert) {
var seriesSize = controller.getDimSize(1);
var seriesCount = controller.getDimSize(2);
var labelDim = 2;
var titleCol = -1;
var latCol = -1;
var longCol = -1;
var clickableCol = -1;
var miCol = -1;
}
else {
var seriesSize = controller.getDimSize(2);
var seriesCount = controller.getDimSize(1);
var labelDim = 1;
}
if (seriesCount > 0)
{
// find long and lat and title columns
if (!invert)
for (var p = 0; p < seriesSize; p++)
{
var pname = controller.getPropertyName(p);
if (pname == this.latitudeProperty) {
latCol = p;
}
if (pname == this.longitudeProperty) {
longCol = p;
}
if (pname == this.markerTitleProperty) {
titleCol = p;
}
if (pname == this.isClickableProperty) {
clickableCol = p;
}
if (pname == this.markerIconProperty) {
miCol = p;
}
}
// each series corresponds to a marker
if (invert || (latCol >= 0 && longCol >= 0))
for (var n = 0; n < seriesCount; n++)
{
var isClickable = 1;
var mi = null;
var sname = controller.getLabel(n,labelDim);
if (!invert) {
var lat = controller.getData(latCol,n);
var long = controller.getData(longCol,n);
if (titleCol >= 0) sname = controller.getData(titleCol,n);
if (clickableCol >= 0) isClickable = controller.getData(clickableCol,n);
if (miCol >= 0) mi = controller.getData(miCol,n);
}
else {
var lat = controller.getDataByName(this.latitudeProperty,n);
var long = controller.getDataByName(this.longitudeProperty,n);
if (this.markerTitleProperty != '') sname = controller.getDataByName(this.markerTitleProperty,n);
if (this.isClickableProperty != '') isClickable = controller.getDataByName(this.isClickableProperty,n);
if (this.markerIconProperty != '') mi = controller.getDataByName(this.markerIconProperty,n);
}
if (!isNaN(parseFloat(lat)) && !isNaN(parseFloat(long))) {
var data = [];
if (this.markerDataProperties != '')
{
var props = this.markerDataProperties.split(",");
for (var i = 0; i < props.length; i++) {
data[props[i]] = controller.getDataByName(props[i],n);
}
}
if (!mi) mi = this.markerIcon;
if (this.markersAsHeatmap)
{
this._markerData[this._markerData.length] = new google.maps.LatLng(lat, long);
}
else
{
this._markerData[this._markerData.length] = {
title: sname,
latitude: lat,
longitude: long,
isClickable: (!isClickable ? 1 : isClickable),
icon: mi,
data: data
};
}
}
}
}
}
// array of polygon data
this._polygonData = [];
if (this.coordsJsFile && !this._polygonCoords)
{
this._polygonCoords = [];
loadCoordinates(this._polygonCoords);
}
if (controller && (this.coordsProperty != ''))
{
// get data from controller (make sure data is loaded)
var dims = controller.getDimensions();
// are we connected to a pivot table?
var invert = controller.getSelectedRange;
if (!invert) {
// not a pivot
var seriesSize = controller.getDimSize(1);
var seriesCount = controller.getDimSize(2);
var labelDim = 2;
var titleCol = -1;
var coordsCol = -1;
var colorCol = -1;
var foCol = -1;
var clickableCol = -1;
}
else {
var seriesSize = controller.getDimSize(2);
var seriesCount = controller.getDimSize(1);
var labelDim = 1;
}
if (seriesCount > 0)
{
// find coords and color columns
if (!invert)
for (var p = 0; p < seriesSize; p++)
{
var pname = controller.getPropertyName(p);
if (pname == this.coordsProperty) {
coordsCol = p;
}
if (pname == this.colorProperty) {
colorCol = p;
}
if (pname == this.fillOpacityProperty) {
foCol = p;
}
if (pname == this.isClickableProperty) {
clickableCol = p;
}
if (pname == this.polygonTitleProperty) {
titleCol = p;
}
}
// if we have a pivot and non-empty ..colorClientProperty, then find out min and max values in that property
if (invert && (this.colorClientProperty != ''))
{
var minColorVal = controller.getDataByName(this.colorClientProperty, 0);
var maxColorVal = minColorVal;
var currColorVal;
for (var n = 1; n < seriesCount; n++)
{
currColorVal = controller.getDataByName(this.colorClientProperty, n);
if (currColorVal > maxColorVal) {
maxColorVal = currColorVal;
} else if (currColorVal < minColorVal) {
minColorVal = currColorVal;
}
}
}
// each series corresponds to a poly
for (var n = 0; n < seriesCount; n++)
{
var color = 'purple';
var fo = this.fillOpacity; // default opacity
var isClickable = 1;
var sname = controller.getLabel(n,labelDim);
if (!invert) {
if (coordsCol<0) break;
var coords = controller.getData(coordsCol,n);
if (colorCol >= 0) color = controller.getData(colorCol,n);
if (foCol >= 0) fo = controller.getData(foCol,n);
if (clickableCol >= 0) isClickable = controller.getData(clickableCol,n);
if (titleCol >= 0) sname = controller.getData(titleCol,n);
}
else {
var coords = controller.getDataByName(this.coordsProperty,n);
if (this.colorProperty != '') color = controller.getDataByName(this.colorProperty,n);
if (this.fillOpacityProperty != '') fo = controller.getDataByName(this.fillOpacityProperty,n);
if (this.isClickableProperty != '') isClickable = controller.getDataByName(this.isClickableProperty,n);
if (this.polygonTitleProperty != '') sname = controller.getDataByName(this.polygonTitleProperty,n);
}
// a special case: we have a pivot and non-empty ..colorClientProperty
if (invert && (this.colorClientProperty != '') && (maxColorVal > minColorVal))
{
var currColorVal = controller.getDataByName(this.colorClientProperty, n);
var value = ((currColorVal - minColorVal) * 255) / (maxColorVal - minColorVal);
var f = "rgb(x, 255-x, 0)";
if (this.colorFormula != '') f = this.colorFormula;
var fidx = f.indexOf("(");
var firstPart = f.substring(0, fidx).toLowerCase();
f = f.substring(fidx + 1, f.length - 1);
var parts = f.split(",");
var x = value || 0;
var tmp;
for (var i = 0; i < parts.length; i++)
{
if (parts[i].indexOf("x") === -1) continue;
parts[i] = parts[i].replace(/x/g, x.toString());
eval("tmp = " + parts[i] + ";");
if (tmp > 255) tmp = 255;
if (tmp < 0) tmp = 0;
parts[i] = Math.floor(tmp).toString();
}
color = firstPart + "a(" + parts.join(",") + ", 1)";
}
if (!fo) fo = this.fillOpacity; // default opacity
if (this.coordsJsFile) coords = this._polygonCoords[coords];
if (!coords) continue;
var pathsSets = coords.split(";");
for (var j = 0; j < pathsSets.length; j++) {
var paths = pathsSets[j].split(" ");
for (var i = 0; i < paths.length; i++) {
var p = paths[i].split(",")
paths[i] = new google.maps.LatLng(p[1], p[0], p[2]);
}
pathsSets[j] = paths;
}
var data = [];
if (this.polygonDataProperties != '')
{
var props = this.polygonDataProperties.split(",");
for (var i = 0; i < props.length; i++) {
data[props[i]] = controller.getDataByName(props[i],n);
}
}
this._polygonData[this._polygonData.length] = {
title: sname,
coords: pathsSets,
color: (!color ? 'purple' : color),
fo: (!fo ? 0.1 : fo),
isClickable: (!isClickable ? 1 : isClickable),
data: data
};
}
}
}
]]></Implementation>
</Method>
<Method name="syncMarkers">
<Description>
Internal method: sync markers to data from controller.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
try {
var controller = this.getController();
if (null == controller) {
return;
}
this.clearMarkers();
if (this._markerData)
{
var map = this.getMapObject();
// heatmap
if (this.markersAsHeatmap && map)
{
if (isNaN(this._heatmap)) this._heatmap = new google.maps.visualization.HeatmapLayer();
this._heatmap.setMap(null);
this._heatmap.setOptions({data: this._markerData});
this._heatmap.setMap(map);
}
else
{
for (var n = 0; n < this._markerData.length; n++) {
var md = this._markerData[n];
if (md) {
var marker = this.addMarker(n,md.latitude,md.longitude,md.title,md.isClickable,md.icon,md.data);
if (marker) zenInvokeCallbackMethod(this.onaddmarker,this,'onaddmarker','marker',marker);
}
}
}
}
}
catch(ex) {
alert('Error in syncMarkers ' + ex.message);
}
]]></Implementation>
</Method>
<Method name="syncPolygons">
<Description>
Internal method: sync polygons to data from controller.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
function TooltipOverlay(map, title)
{
this.map_ = map;
this.div_ = null;
this.title_ = title;
this.setMap(map);
};
TooltipOverlay.prototype = new google.maps.OverlayView();
TooltipOverlay.prototype.onAdd = function()
{
var div = document.createElement('div');
div.appendChild(document.createTextNode(this.title_));
div.style.border = 'solid 1px #000000';
div.style.color = '#000000';
div.style.backgroundColor = '#ffffe1';
div.style.whiteSpace = 'nowrap';
div.style.font = 'icon';
if (navigator.userAgent.indexOf("Safari")>=0 || navigator.userAgent.indexOf("Chrome")>=0)
{
div.style.fontFamily = "Tahoma,sans-serif";
div.style.fontSize = "13px";
}
div.style.MozBoxShadow = '2px 2px 4px #7f7f7f';
div.style.boxShadow = '2px 2px 4px #7f7f7f';
div.style.padding = '2px 3px';
div.style.position = 'absolute';
div.style.visibility = "hidden";
this.div_ = div;
var panes = this.getPanes();
panes.floatShadow.appendChild(div);
}
TooltipOverlay.prototype.onRemove = function()
{
if (this.div_) this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
}
TooltipOverlay.prototype.draw = function() {}
TooltipOverlay.prototype.hide = function()
{
if (this.div_) this.div_.style.visibility = "hidden";
}
TooltipOverlay.prototype.show = function(latLng)
{
if (this.div_)
{
var point = this.getProjection().fromLatLngToDivPixel(latLng)
this.div_.style.left = point.x + 'px';
this.div_.style.top = (point.y - parseInt(this.div_.offsetHeight)) + 'px';
this.div_.style.visibility = "visible";
}
}
var map = this.getMapObject();
try {
var controller = this.getController();
if (null == controller) {
return;
}
this.clearPolygons();
if (this._polygonData) {
for (var n = 0; n < this._polygonData.length; n++) {
var md = this._polygonData[n];
if (md) {
var poly = this.addPolygon(n, md.coords, md.color, md.fo, md.isClickable, md.title, md.data);
if (poly && map && md.title) poly.tooltip = new TooltipOverlay(map, md.title);
if (poly) zenInvokeCallbackMethod(this.onaddpolygon,this,'onaddpolygon','polygon',poly);
}
}
}
}
catch(ex) {
alert('Error in syncPolygons ' + ex.message);
}
]]></Implementation>
</Method>
<Method name="drillDown">
<Description>
Perform a drilldown</Description>
<Internal>1</Internal>
<FormalSpec>title,latLng,zoom,data</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map)
{
this._prevZoom.push(map.getZoom());
this._prevCenter.push(map.getCenter());
map.setZoom(parseInt(zoom));
map.setCenter(latLng);
if (this._drillDownTitle.length > 0) this._drillDownTitle[this._drillDownTitle.length - 1].hide();
this._drillDownTitle.push(this.newDrillDownTitleOverlay(map, 'zenPage.getComponent('+this.index+').drillUp();', title, this.drillUpButtonPosition));
this._drillDownTitle[this._drillDownTitle.length - 1].show();
zenInvokeCallbackMethod(this.ondrilldown,this,'ondrilldown','data',data);
}
]]></Implementation>
</Method>
<Method name="newDrillDownTitleOverlay">
<Internal>1</Internal>
<FormalSpec>mapRef,clickHandler,text,drillUpButtonPosition</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
function DrillDownTitleOverlay(map, onclickHandler, titleText, drillUpButtonPosition)
{
this.map_ = map;
this.div_ = null;
this.divTitle_ = null;
this.titleText_ = titleText;
this.onclickHandler_ = onclickHandler;
this.rect_ = null;
this.visible_ = false;
this.drillUpButtonPosition_ = drillUpButtonPosition;
this.setMap(map);
};
DrillDownTitleOverlay.prototype = new google.maps.OverlayView();
DrillDownTitleOverlay.prototype.onAdd = function()
{
this.visible_ = true;
}
DrillDownTitleOverlay.prototype.onRemove = function()
{
if (this.div_) this.div_.parentNode.removeChild(this.div_);
if (this.divTitle_) this.divTitle_.parentNode.removeChild(this.divTitle_);
if (this.rect_) this.rect_.setMap(null);
this.div_ = null;
this.divTitle_ = null;
this.rect_ = null;
}
DrillDownTitleOverlay.prototype.draw = function()
{
var overlayProjection = this.getProjection();
if (this.div_) this.div_.parentNode.removeChild(this.div_);
if (this.divTitle_) this.divTitle_.parentNode.removeChild(this.divTitle_);
if (this.rect_) this.rect_.setMap(null);
var div = document.createElement('div');
div.appendChild(document.createTextNode('<< ' + $$$Text("Back", "Ensemble")));
div.style.border = 'solid 1px #000000';
div.style.color = '#ffffff';
div.style.backgroundColor = '#356B8D';
div.style.MozBoxShadow = '2px 2px 4px #7f7f7f';
div.style.boxShadow = '2px 2px 4px #7f7f7f';
div.style.whiteSpace = 'nowrap';
div.style.font = 'icon';
if (navigator.userAgent.indexOf("Safari")>=0 || navigator.userAgent.indexOf("Chrome")>=0)
{
div.style.fontFamily = "Tahoma,sans-serif";
div.style.fontSize = "13px";
}
div.style.padding = '2px 8px';
div.style.position = 'absolute';
div.style.display = 'block';
div.style.visibility = (this.visible_ ? "visible" : "hidden");
this.div_ = div;
var div2 = document.createElement('div');
div2.appendChild(document.createTextNode(this.titleText_));
div2.style.border = 'solid 1px #000000';
div2.style.color = '#000000';
if (navigator.userAgent.indexOf("MSIE")>=0)
{
div2.style.backgroundColor = 'white';
}
else
{
div2.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';
}
div2.style.MozBoxShadow = '2px 2px 4px #7f7f7f';
div2.style.boxShadow = '2px 2px 4px #7f7f7f';
div2.style.whiteSpace = 'nowrap';
div2.style.font = 'icon';
if (navigator.userAgent.indexOf("Safari")>=0 || navigator.userAgent.indexOf("Chrome")>=0)
{
div2.style.fontFamily = "Tahoma,sans-serif";
div2.style.fontSize = "13px";
}
div2.style.fontWeight = 'bold';
div2.style.padding = '2px 8px';
div2.style.position = 'absolute';
div2.style.display = 'block';
div2.style.visibility = (this.visible_ ? "visible" : "hidden");
this.divTitle_ = div2;
var panes = this.getPanes();
panes.floatPane.appendChild(this.div_);
panes.floatPane.appendChild(this.divTitle_);
if (this.drillUpButtonPosition_ == 'bottom')
{
var x = 12
var y = parseInt(this.map_.getDiv().style.height) - 50
}
else
{
var x = 120
var y = 14
}
var point = overlayProjection.fromLatLngToDivPixel(overlayProjection.fromContainerPixelToLatLng(new google.maps.Point(x, y)));
this.div_.style.left = point.x + 'px';
this.div_.style.top = point.y + 'px';
var sw = overlayProjection.fromDivPixelToLatLng(new google.maps.Point(point.x, point.y + parseInt(this.div_.offsetHeight)));
var ne = overlayProjection.fromDivPixelToLatLng(new google.maps.Point(point.x + parseInt(this.div_.offsetWidth), point.y));
var rectBounds = new google.maps.LatLngBounds(sw, ne);
this.rect_ = new google.maps.Rectangle({
bounds: rectBounds,
clickable: true,
fillOpacity: 0,
strokeOpacity: 0,
map: (this.visible_ ? this.map_ : null),
zIndex: 1});
google.maps.event.addListener(this.rect_, 'click', new Function(this.onclickHandler_));
var point = new google.maps.Point(x + parseInt(this.div_.offsetWidth) - 1, 5);
point = overlayProjection.fromLatLngToDivPixel(overlayProjection.fromContainerPixelToLatLng(point));
this.divTitle_.style.left = point.x + 'px';
this.divTitle_.style.top = this.div_.style.top;
this.div_.style.height = (parseInt(this.divTitle_.offsetHeight) - 6) + 'px';
this.divTitle_.style.height = (parseInt(this.divTitle_.offsetHeight) - 6) + 'px';
}
DrillDownTitleOverlay.prototype.hide = function()
{
if (this.div_) this.div_.style.visibility = "hidden";
if (this.divTitle_) this.divTitle_.style.visibility = "hidden";
if (this.rect_) this.rect_.setMap(null);
this.visible_ = false;
}
DrillDownTitleOverlay.prototype.show = function()
{
if (this.div_) this.div_.style.visibility = "visible";
if (this.divTitle_) this.divTitle_.style.visibility = "visible";
if (this.rect_) this.rect_.setMap(this.map_);
this.visible_ = true;
}
return new DrillDownTitleOverlay(mapRef, clickHandler, text, drillUpButtonPosition);
]]></Implementation>
</Method>
<Method name="centerChangedHandler">
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ if (this._drillDownTitle.length > 0) this._drillDownTitle[this._drillDownTitle.length - 1].draw();
]]></Implementation>
</Method>
<Method name="drillUp">
<Description>
Restores map parameters (center, zoom and "drilldown title") to their state before drilldown was performed</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var map = this.getMapObject();
if (map)
{
if (this._drillDownTitle.length > 0)
{
this._drillDownTitle[this._drillDownTitle.length - 1].hide();
this._drillDownTitle[this._drillDownTitle.length - 1].setMap(null);
this._drillDownTitle.pop();
if (this._drillDownTitle.length > 0) this._drillDownTitle[this._drillDownTitle.length - 1].show();
}
if (this._prevZoom.length > 0)
{
map.setZoom(this._prevZoom[this._prevZoom.length - 1]);
this._prevZoom.pop();
}
if (this._prevCenter.length > 0)
{
map.setCenter(this._prevCenter[this._prevCenter.length - 1]);
this._prevCenter.pop();
}
zenInvokeCallbackMethod(this.ondrillup,this,'ondrillup');
}
]]></Implementation>
</Method>
<Method name="getControl">
<Description>
Obtain a reference to a filter (or any other widget control).</Description>
<FormalSpec>ind</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ return zenPage.getComponent(this.parent.parent.controlIndices[ind]);
]]></Implementation>
</Method>
<Method name="getFilterStateArray">
<Description>
Get the array of filter state information for the widget.</Description>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ return this.parent.parent.getFilterStateArray();
]]></Implementation>
</Method>
<Method name="findWidgetByName">
<Description>
Find widget by name (NB widget names don't have to be unique)</Description>
<FormalSpec>wname</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
var desktop = zen('desktop');
var w = null;
if (desktop)
{
for (var n = 0; n < desktop.children.length; n++)
{
var widget = desktop.children[n];
if (widget && widget.getEnclosingDiv() && (widget.name==wname) && widget.controlEventHandler)
{
w = widget;
break;
}
}
}
return w;
]]></Implementation>
</Method>
<Method name="clearMarkers">
<Description>
Internal method: clear markers from map.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
try {
// kill old markers
if (this._markers) {
for (var n = 0; n < this._markers.length; n++) {
this.removeMarker(this._markers[n]);
}
}
this._markers = [];
if (!isNaN(this._heatmap)) this._heatmap.setMap(null);
}
catch(ex) {
alert('Error in clearMarkers ' + ex.message);
}
]]></Implementation>
</Method>
<Method name="clearPolygons">
<Description>
Internal method: clear polygons from map.</Description>
<Internal>1</Internal>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
try {
// kill old polygons
if (this._polygons) {
for (var n = 0; n < this._polygons.length; n++) {
this.removePolygon(this._polygons[n]);
}
}
this._polygons = [];
}
catch(ex) {
alert('Error in clearPolygons ' + ex.message);
}
]]></Implementation>
</Method>
<Method name="panToAddress">
<Description>
Invoke the google geocoder api to lookup an address string and move the map to view it.
Applications that call this are responsible for adhering to the google geocoder api terms of use.</Description>
<FormalSpec>address</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
if (('undefined' == typeof google)||('undefined' == typeof google.maps)) {
return '';
}
var callback = new Function('results','status','zenPage.getComponent('+this.index+').geocodeAddressHandler(results,status)');
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address}, callback);
]]></Implementation>
</Method>
<Method name="geocodeAddressHandler">
<Description>
Callback for geocoder API.</Description>
<Internal>1</Internal>
<FormalSpec>results,status</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[
if (status == google.maps.GeocoderStatus.OK) {
var map = this.getMapObject();
if (map) {
map.setCenter(results[0].geometry.location);
}
}
else {
alert("Address not found: " + status);
}
]]></Implementation>
</Method>
<Method name="%DrawHTML">
<Implementation><![CDATA[
// This causes ZEN to render this component on the client.
set ..renderFlag = ..renderFlag + 1
// copy ..settings into properties
#dim propName As %String = $order(..settings(""))
while (propName '= "")
{
if ("" '= $get(..settings(propName)))
try
{
set $property($this, propName) = ..settings(propName)
}
catch {}
set propName = $order(..settings(propName))
}
&html<<script type="text/javascript">
function hsv2rgb(h,s,v)
{
// Adapted from http://www.easyrgb.com/math.html
// hsv values = 0 - 1, rgb values = 0 - 255
var r, g, b;
var RGB = new Array();
if(s == 0)
{
RGB['red']=RGB['green']=RGB['blue']=Math.round(v*255);
}
else
{
var var_h = h * 6; // h must be < 1
if (var_h == 6) var_h = 0;
var var_i = Math.floor( var_h );
var var_1 = v*(1-s);
var var_2 = v*(1-s*(var_h-var_i));
var var_3 = v*(1-s*(1-(var_h-var_i)));
if (var_i == 0)
{
var_r = v;
var_g = var_3;
var_b = var_1;
}
else if (var_i == 1)
{
var_r = var_2;
var_g = v;
var_b = var_1;
}
else if (var_i == 2)
{
var_r = var_1;
var_g = v;
var_b = var_3
}
else if (var_i == 3)
{
var_r = var_1;
var_g = var_2;
var_b = v;
}
else if (var_i == 4)
{
var_r = var_3;
var_g = var_1;
var_b = v;
}
else
{
var_r = v;
var_g = var_1;
var_b = var_2
}
RGB['red'] = Math.round(var_r * 255);
RGB['green'] = Math.round(var_g * 255);
RGB['blue'] = Math.round(var_b * 255);
}
return '#' + RGB['red'].toString(16) + RGB['green'].toString(16) + RGB['blue'].toString(16);
};
</script>>
if (..coordsJsFile '= "")
{
&html<<script type='text/javascript' src='#(..coordsJsFile)#'></script>>
}
]]></Implementation>
</Method>
<Method name="onApplyFilters">
<Internal>1</Internal>
<FormalSpec>refresh</FormalSpec>
<Language>javascript</Language>
<ClientMethod>1</ClientMethod>
<Implementation><![CDATA[ zenInvokeCallbackMethod(this.onapplyfilters,this,'onapplyfilters','refresh',refresh);
]]></Implementation>
</Method>
</Class>
<Class name="demo.HeatmapDemoKPI">
<Super>%DeepSee.KPI</Super>
<TimeChanged>63061,46106.505484</TimeChanged>
<TimeCreated>63061,44459.477833</TimeCreated>
<XData name="KPI">
<XMLNamespace>http://www.intersystems.com/deepsee/kpi</XMLNamespace>
<Data><![CDATA[
<kpi xmlns="http://www.intersystems.com/deepsee/kpi"
name="demo/HeatmapDemoKPI" sourceType="manual" caption="">
<property name="latitude"/>
<property name="longitude"/>
</kpi>
]]></Data>
</XData>
<Method name="%OnLoadKPI">
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
set ..%seriesCount = 500
//for i=1:1:..%seriesCount set ..%seriesNames(i) = i
set ..%data(1, "latitude") = 37.782551 set ..%data(1, "longitude") = -122.445368
set ..%data(2, "latitude") = 37.782745 set ..%data(2, "longitude") = -122.444586
set ..%data(3, "latitude") = 37.782842 set ..%data(3, "longitude") = -122.443688
set ..%data(4, "latitude") = 37.782919 set ..%data(4, "longitude") = -122.442815
set ..%data(5, "latitude") = 37.782992 set ..%data(5, "longitude") = -122.442112
set ..%data(6, "latitude") = 37.783100 set ..%data(6, "longitude") = -122.441461
set ..%data(7, "latitude") = 37.783206 set ..%data(7, "longitude") = -122.440829
set ..%data(8, "latitude") = 37.783273 set ..%data(8, "longitude") = -122.440324
set ..%data(9, "latitude") = 37.783316 set ..%data(9, "longitude") = -122.440023
set ..%data(10, "latitude") = 37.783357 set ..%data(10, "longitude") = -122.439794
set ..%data(11, "latitude") = 37.783371 set ..%data(11, "longitude") = -122.439687
set ..%data(12, "latitude") = 37.783368 set ..%data(12, "longitude") = -122.439666
set ..%data(13, "latitude") = 37.783383 set ..%data(13, "longitude") = -122.439594
set ..%data(14, "latitude") = 37.783508 set ..%data(14, "longitude") = -122.439525
set ..%data(15, "latitude") = 37.783842 set ..%data(15, "longitude") = -122.439591
set ..%data(16, "latitude") = 37.784147 set ..%data(16, "longitude") = -122.439668
set ..%data(17, "latitude") = 37.784206 set ..%data(17, "longitude") = -122.439686
set ..%data(18, "latitude") = 37.784386 set ..%data(18, "longitude") = -122.439790
set ..%data(19, "latitude") = 37.784701 set ..%data(19, "longitude") = -122.439902
set ..%data(20, "latitude") = 37.784965 set ..%data(20, "longitude") = -122.439938
set ..%data(21, "latitude") = 37.785010 set ..%data(21, "longitude") = -122.439947
set ..%data(22, "latitude") = 37.785360 set ..%data(22, "longitude") = -122.439952
set ..%data(23, "latitude") = 37.785715 set ..%data(23, "longitude") = -122.440030
set ..%data(24, "latitude") = 37.786117 set ..%data(24, "longitude") = -122.440119
set ..%data(25, "latitude") = 37.786564 set ..%data(25, "longitude") = -122.440209
set ..%data(26, "latitude") = 37.786905 set ..%data(26, "longitude") = -122.440270
set ..%data(27, "latitude") = 37.786956 set ..%data(27, "longitude") = -122.440279
set ..%data(28, "latitude") = 37.800224 set ..%data(28, "longitude") = -122.433520
set ..%data(29, "latitude") = 37.800155 set ..%data(29, "longitude") = -122.434101
set ..%data(30, "latitude") = 37.800160 set ..%data(30, "longitude") = -122.434430
set ..%data(31, "latitude") = 37.800378 set ..%data(31, "longitude") = -122.434527
set ..%data(32, "latitude") = 37.800738 set ..%data(32, "longitude") = -122.434598
set ..%data(33, "latitude") = 37.800938 set ..%data(33, "longitude") = -122.434650
set ..%data(34, "latitude") = 37.801024 set ..%data(34, "longitude") = -122.434889
set ..%data(35, "latitude") = 37.800955 set ..%data(35, "longitude") = -122.435392
set ..%data(36, "latitude") = 37.800886 set ..%data(36, "longitude") = -122.435959
set ..%data(37, "latitude") = 37.800811 set ..%data(37, "longitude") = -122.436275
set ..%data(38, "latitude") = 37.800788 set ..%data(38, "longitude") = -122.436299
set ..%data(39, "latitude") = 37.800719 set ..%data(39, "longitude") = -122.436302
set ..%data(40, "latitude") = 37.800702 set ..%data(40, "longitude") = -122.436298
set ..%data(41, "latitude") = 37.800661 set ..%data(41, "longitude") = -122.436273
set ..%data(42, "latitude") = 37.800395 set ..%data(42, "longitude") = -122.436172
set ..%data(43, "latitude") = 37.800228 set ..%data(43, "longitude") = -122.436116
set ..%data(44, "latitude") = 37.800169 set ..%data(44, "longitude") = -122.436130
set ..%data(45, "latitude") = 37.800066 set ..%data(45, "longitude") = -122.436167
set ..%data(46, "latitude") = 37.784345 set ..%data(46, "longitude") = -122.422922
set ..%data(47, "latitude") = 37.784389 set ..%data(47, "longitude") = -122.422926
set ..%data(48, "latitude") = 37.784437 set ..%data(48, "longitude") = -122.422924
set ..%data(49, "latitude") = 37.784746 set ..%data(49, "longitude") = -122.422818
set ..%data(50, "latitude") = 37.785436 set ..%data(50, "longitude") = -122.422959
set ..%data(51, "latitude") = 37.786120 set ..%data(51, "longitude") = -122.423112
set ..%data(52, "latitude") = 37.786433 set ..%data(52, "longitude") = -122.423029
set ..%data(53, "latitude") = 37.786631 set ..%data(53, "longitude") = -122.421213
set ..%data(54, "latitude") = 37.786660 set ..%data(54, "longitude") = -122.421033
set ..%data(55, "latitude") = 37.786801 set ..%data(55, "longitude") = -122.420141
set ..%data(56, "latitude") = 37.786823 set ..%data(56, "longitude") = -122.420034
set ..%data(57, "latitude") = 37.786831 set ..%data(57, "longitude") = -122.419916
set ..%data(58, "latitude") = 37.787034 set ..%data(58, "longitude") = -122.418208
set ..%data(59, "latitude") = 37.787056 set ..%data(59, "longitude") = -122.418034
set ..%data(60, "latitude") = 37.787169 set ..%data(60, "longitude") = -122.417145
set ..%data(61, "latitude") = 37.787217 set ..%data(61, "longitude") = -122.416715
set ..%data(62, "latitude") = 37.786144 set ..%data(62, "longitude") = -122.416403
set ..%data(63, "latitude") = 37.785292 set ..%data(63, "longitude") = -122.416257
set ..%data(64, "latitude") = 37.780666 set ..%data(64, "longitude") = -122.390374
set ..%data(65, "latitude") = 37.780501 set ..%data(65, "longitude") = -122.391281
set ..%data(66, "latitude") = 37.780148 set ..%data(66, "longitude") = -122.392052
set ..%data(67, "latitude") = 37.780173 set ..%data(67, "longitude") = -122.391148
set ..%data(68, "latitude") = 37.780693 set ..%data(68, "longitude") = -122.390592
set ..%data(69, "latitude") = 37.781261 set ..%data(69, "longitude") = -122.391142
set ..%data(70, "latitude") = 37.781808 set ..%data(70, "longitude") = -122.391730
set ..%data(71, "latitude") = 37.782340 set ..%data(71, "longitude") = -122.392341
set ..%data(72, "latitude") = 37.782812 set ..%data(72, "longitude") = -122.393022
set ..%data(73, "latitude") = 37.783300 set ..%data(73, "longitude") = -122.393672
set ..%data(74, "latitude") = 37.783809 set ..%data(74, "longitude") = -122.394275
set ..%data(75, "latitude") = 37.784246 set ..%data(75, "longitude") = -122.394979
set ..%data(76, "latitude") = 37.784791 set ..%data(76, "longitude") = -122.395958
set ..%data(77, "latitude") = 37.785675 set ..%data(77, "longitude") = -122.396746
set ..%data(78, "latitude") = 37.786262 set ..%data(78, "longitude") = -122.395780
set ..%data(79, "latitude") = 37.786776 set ..%data(79, "longitude") = -122.395093
set ..%data(80, "latitude") = 37.787282 set ..%data(80, "longitude") = -122.394426
set ..%data(81, "latitude") = 37.787783 set ..%data(81, "longitude") = -122.393767
set ..%data(82, "latitude") = 37.788343 set ..%data(82, "longitude") = -122.393184
set ..%data(83, "latitude") = 37.788895 set ..%data(83, "longitude") = -122.392506
set ..%data(84, "latitude") = 37.789371 set ..%data(84, "longitude") = -122.391701
set ..%data(85, "latitude") = 37.789722 set ..%data(85, "longitude") = -122.390952
set ..%data(86, "latitude") = 37.790315 set ..%data(86, "longitude") = -122.390305
set ..%data(87, "latitude") = 37.790738 set ..%data(87, "longitude") = -122.389616
set ..%data(88, "latitude") = 37.779448 set ..%data(88, "longitude") = -122.438702
set ..%data(89, "latitude") = 37.779023 set ..%data(89, "longitude") = -122.438585
set ..%data(90, "latitude") = 37.778542 set ..%data(90, "longitude") = -122.438492
set ..%data(91, "latitude") = 37.778100 set ..%data(91, "longitude") = -122.438411
set ..%data(92, "latitude") = 37.777986 set ..%data(92, "longitude") = -122.438376
set ..%data(93, "latitude") = 37.777680 set ..%data(93, "longitude") = -122.438313
set ..%data(94, "latitude") = 37.777316 set ..%data(94, "longitude") = -122.438273
set ..%data(95, "latitude") = 37.777135 set ..%data(95, "longitude") = -122.438254
set ..%data(96, "latitude") = 37.776987 set ..%data(96, "longitude") = -122.438303
set ..%data(97, "latitude") = 37.776946 set ..%data(97, "longitude") = -122.438404
set ..%data(98, "latitude") = 37.776944 set ..%data(98, "longitude") = -122.438467
set ..%data(99, "latitude") = 37.776892 set ..%data(99, "longitude") = -122.438459
set ..%data(100, "latitude") = 37.776842 set ..%data(100, "longitude") = -122.438442
set ..%data(101, "latitude") = 37.776822 set ..%data(101, "longitude") = -122.438391
set ..%data(102, "latitude") = 37.776814 set ..%data(102, "longitude") = -122.438412
set ..%data(103, "latitude") = 37.776787 set ..%data(103, "longitude") = -122.438628
set ..%data(104, "latitude") = 37.776729 set ..%data(104, "longitude") = -122.438650
set ..%data(105, "latitude") = 37.776759 set ..%data(105, "longitude") = -122.438677
set ..%data(106, "latitude") = 37.776772 set ..%data(106, "longitude") = -122.438498
set ..%data(107, "latitude") = 37.776787 set ..%data(107, "longitude") = -122.438389
set ..%data(108, "latitude") = 37.776848 set ..%data(108, "longitude") = -122.438283
set ..%data(109, "latitude") = 37.776870 set ..%data(109, "longitude") = -122.438239
set ..%data(110, "latitude") = 37.777015 set ..%data(110, "longitude") = -122.438198
set ..%data(111, "latitude") = 37.777333 set ..%data(111, "longitude") = -122.438256
set ..%data(112, "latitude") = 37.777595 set ..%data(112, "longitude") = -122.438308
set ..%data(113, "latitude") = 37.777797 set ..%data(113, "longitude") = -122.438344
set ..%data(114, "latitude") = 37.778160 set ..%data(114, "longitude") = -122.438442
set ..%data(115, "latitude") = 37.778414 set ..%data(115, "longitude") = -122.438508
set ..%data(116, "latitude") = 37.778445 set ..%data(116, "longitude") = -122.438516
set ..%data(117, "latitude") = 37.778503 set ..%data(117, "longitude") = -122.438529
set ..%data(118, "latitude") = 37.778607 set ..%data(118, "longitude") = -122.438549
set ..%data(119, "latitude") = 37.778670 set ..%data(119, "longitude") = -122.438644
set ..%data(120, "latitude") = 37.778847 set ..%data(120, "longitude") = -122.438706
set ..%data(121, "latitude") = 37.779240 set ..%data(121, "longitude") = -122.438744
set ..%data(122, "latitude") = 37.779738 set ..%data(122, "longitude") = -122.438822
set ..%data(123, "latitude") = 37.780201 set ..%data(123, "longitude") = -122.438882
set ..%data(124, "latitude") = 37.780400 set ..%data(124, "longitude") = -122.438905
set ..%data(125, "latitude") = 37.780501 set ..%data(125, "longitude") = -122.438921
set ..%data(126, "latitude") = 37.780892 set ..%data(126, "longitude") = -122.438986
set ..%data(127, "latitude") = 37.781446 set ..%data(127, "longitude") = -122.439087
set ..%data(128, "latitude") = 37.781985 set ..%data(128, "longitude") = -122.439199
set ..%data(129, "latitude") = 37.782239 set ..%data(129, "longitude") = -122.439249
set ..%data(130, "latitude") = 37.782286 set ..%data(130, "longitude") = -122.439266
set ..%data(131, "latitude") = 37.797847 set ..%data(131, "longitude") = -122.429388
set ..%data(132, "latitude") = 37.797874 set ..%data(132, "longitude") = -122.429180
set ..%data(133, "latitude") = 37.797885 set ..%data(133, "longitude") = -122.429069
set ..%data(134, "latitude") = 37.797887 set ..%data(134, "longitude") = -122.429050
set ..%data(135, "latitude") = 37.797933 set ..%data(135, "longitude") = -122.428954
set ..%data(136, "latitude") = 37.798242 set ..%data(136, "longitude") = -122.428990
set ..%data(137, "latitude") = 37.798617 set ..%data(137, "longitude") = -122.429075
set ..%data(138, "latitude") = 37.798719 set ..%data(138, "longitude") = -122.429092
set ..%data(139, "latitude") = 37.798944 set ..%data(139, "longitude") = -122.429145
set ..%data(140, "latitude") = 37.799320 set ..%data(140, "longitude") = -122.429251
set ..%data(141, "latitude") = 37.799590 set ..%data(141, "longitude") = -122.429309
set ..%data(142, "latitude") = 37.799677 set ..%data(142, "longitude") = -122.429324
set ..%data(143, "latitude") = 37.799966 set ..%data(143, "longitude") = -122.429360
set ..%data(144, "latitude") = 37.800288 set ..%data(144, "longitude") = -122.429430
set ..%data(145, "latitude") = 37.800443 set ..%data(145, "longitude") = -122.429461
set ..%data(146, "latitude") = 37.800465 set ..%data(146, "longitude") = -122.429474
set ..%data(147, "latitude") = 37.800644 set ..%data(147, "longitude") = -122.429540
set ..%data(148, "latitude") = 37.800948 set ..%data(148, "longitude") = -122.429620
set ..%data(149, "latitude") = 37.801242 set ..%data(149, "longitude") = -122.429685
set ..%data(150, "latitude") = 37.801375 set ..%data(150, "longitude") = -122.429702
set ..%data(151, "latitude") = 37.801400 set ..%data(151, "longitude") = -122.429703
set ..%data(152, "latitude") = 37.801453 set ..%data(152, "longitude") = -122.429707
set ..%data(153, "latitude") = 37.801473 set ..%data(153, "longitude") = -122.429709
set ..%data(154, "latitude") = 37.801532 set ..%data(154, "longitude") = -122.429707
set ..%data(155, "latitude") = 37.801852 set ..%data(155, "longitude") = -122.429729
set ..%data(156, "latitude") = 37.802173 set ..%data(156, "longitude") = -122.429789
set ..%data(157, "latitude") = 37.802459 set ..%data(157, "longitude") = -122.429847
set ..%data(158, "latitude") = 37.802554 set ..%data(158, "longitude") = -122.429825
set ..%data(159, "latitude") = 37.802647 set ..%data(159, "longitude") = -122.429549
set ..%data(160, "latitude") = 37.802693 set ..%data(160, "longitude") = -122.429179
set ..%data(161, "latitude") = 37.802729 set ..%data(161, "longitude") = -122.428751
set ..%data(162, "latitude") = 37.766104 set ..%data(162, "longitude") = -122.409291
set ..%data(163, "latitude") = 37.766103 set ..%data(163, "longitude") = -122.409268
set ..%data(164, "latitude") = 37.766138 set ..%data(164, "longitude") = -122.409229
set ..%data(165, "latitude") = 37.766183 set ..%data(165, "longitude") = -122.409231
set ..%data(166, "latitude") = 37.766153 set ..%data(166, "longitude") = -122.409276
set ..%data(167, "latitude") = 37.766005 set ..%data(167, "longitude") = -122.409365
set ..%data(168, "latitude") = 37.765897 set ..%data(168, "longitude") = -122.409570
set ..%data(169, "latitude") = 37.765767 set ..%data(169, "longitude") = -122.409739
set ..%data(170, "latitude") = 37.765693 set ..%data(170, "longitude") = -122.410389
set ..%data(171, "latitude") = 37.765615 set ..%data(171, "longitude") = -122.411201
set ..%data(172, "latitude") = 37.765533 set ..%data(172, "longitude") = -122.412121
set ..%data(173, "latitude") = 37.765467 set ..%data(173, "longitude") = -122.412939
set ..%data(174, "latitude") = 37.765444 set ..%data(174, "longitude") = -122.414821
set ..%data(175, "latitude") = 37.765444 set ..%data(175, "longitude") = -122.414964
set ..%data(176, "latitude") = 37.765318 set ..%data(176, "longitude") = -122.415424
set ..%data(177, "latitude") = 37.763961 set ..%data(177, "longitude") = -122.415296
set ..%data(178, "latitude") = 37.763115 set ..%data(178, "longitude") = -122.415196
set ..%data(179, "latitude") = 37.762967 set ..%data(179, "longitude") = -122.415183
set ..%data(180, "latitude") = 37.762278 set ..%data(180, "longitude") = -122.415127
set ..%data(181, "latitude") = 37.761675 set ..%data(181, "longitude") = -122.415055
set ..%data(182, "latitude") = 37.760932 set ..%data(182, "longitude") = -122.414988
set ..%data(183, "latitude") = 37.759337 set ..%data(183, "longitude") = -122.414862
set ..%data(184, "latitude") = 37.773187 set ..%data(184, "longitude") = -122.421922
set ..%data(185, "latitude") = 37.773043 set ..%data(185, "longitude") = -122.422118
set ..%data(186, "latitude") = 37.773007 set ..%data(186, "longitude") = -122.422165
set ..%data(187, "latitude") = 37.772979 set ..%data(187, "longitude") = -122.422219
set ..%data(188, "latitude") = 37.772865 set ..%data(188, "longitude") = -122.422394
set ..%data(189, "latitude") = 37.772779 set ..%data(189, "longitude") = -122.422503
set ..%data(190, "latitude") = 37.772676 set ..%data(190, "longitude") = -122.422701
set ..%data(191, "latitude") = 37.772606 set ..%data(191, "longitude") = -122.422806
set ..%data(192, "latitude") = 37.772566 set ..%data(192, "longitude") = -122.422840
set ..%data(193, "latitude") = 37.772508 set ..%data(193, "longitude") = -122.422852
set ..%data(194, "latitude") = 37.772387 set ..%data(194, "longitude") = -122.423011
set ..%data(195, "latitude") = 37.772099 set ..%data(195, "longitude") = -122.423328
set ..%data(196, "latitude") = 37.771704 set ..%data(196, "longitude") = -122.423783
set ..%data(197, "latitude") = 37.771481 set ..%data(197, "longitude") = -122.424081
set ..%data(198, "latitude") = 37.771400 set ..%data(198, "longitude") = -122.424179
set ..%data(199, "latitude") = 37.771352 set ..%data(199, "longitude") = -122.424220
set ..%data(200, "latitude") = 37.771248 set ..%data(200, "longitude") = -122.424327
set ..%data(201, "latitude") = 37.770904 set ..%data(201, "longitude") = -122.424781
set ..%data(202, "latitude") = 37.770520 set ..%data(202, "longitude") = -122.425283
set ..%data(203, "latitude") = 37.770337 set ..%data(203, "longitude") = -122.425553
set ..%data(204, "latitude") = 37.770128 set ..%data(204, "longitude") = -122.425832
set ..%data(205, "latitude") = 37.769756 set ..%data(205, "longitude") = -122.426331
set ..%data(206, "latitude") = 37.769300 set ..%data(206, "longitude") = -122.426902
set ..%data(207, "latitude") = 37.769132 set ..%data(207, "longitude") = -122.427065
set ..%data(208, "latitude") = 37.769092 set ..%data(208, "longitude") = -122.427103
set ..%data(209, "latitude") = 37.768979 set ..%data(209, "longitude") = -122.427172
set ..%data(210, "latitude") = 37.768595 set ..%data(210, "longitude") = -122.427634
set ..%data(211, "latitude") = 37.768372 set ..%data(211, "longitude") = -122.427913
set ..%data(212, "latitude") = 37.768337 set ..%data(212, "longitude") = -122.427961
set ..%data(213, "latitude") = 37.768244 set ..%data(213, "longitude") = -122.428138
set ..%data(214, "latitude") = 37.767942 set ..%data(214, "longitude") = -122.428581
set ..%data(215, "latitude") = 37.767482 set ..%data(215, "longitude") = -122.429094
set ..%data(216, "latitude") = 37.767031 set ..%data(216, "longitude") = -122.429606
set ..%data(217, "latitude") = 37.766732 set ..%data(217, "longitude") = -122.429986
set ..%data(218, "latitude") = 37.766680 set ..%data(218, "longitude") = -122.430058
set ..%data(219, "latitude") = 37.766633 set ..%data(219, "longitude") = -122.430109
set ..%data(220, "latitude") = 37.766580 set ..%data(220, "longitude") = -122.430211
set ..%data(221, "latitude") = 37.766367 set ..%data(221, "longitude") = -122.430594
set ..%data(222, "latitude") = 37.765910 set ..%data(222, "longitude") = -122.431137
set ..%data(223, "latitude") = 37.765353 set ..%data(223, "longitude") = -122.431806
set ..%data(224, "latitude") = 37.764962 set ..%data(224, "longitude") = -122.432298
set ..%data(225, "latitude") = 37.764868 set ..%data(225, "longitude") = -122.432486
set ..%data(226, "latitude") = 37.764518 set ..%data(226, "longitude") = -122.432913
set ..%data(227, "latitude") = 37.763435 set ..%data(227, "longitude") = -122.434173
set ..%data(228, "latitude") = 37.762847 set ..%data(228, "longitude") = -122.434953
set ..%data(229, "latitude") = 37.762291 set ..%data(229, "longitude") = -122.435935
set ..%data(230, "latitude") = 37.762224 set ..%data(230, "longitude") = -122.436074
set ..%data(231, "latitude") = 37.761957 set ..%data(231, "longitude") = -122.436892
set ..%data(232, "latitude") = 37.761652 set ..%data(232, "longitude") = -122.438886
set ..%data(233, "latitude") = 37.761284 set ..%data(233, "longitude") = -122.439955
set ..%data(234, "latitude") = 37.761210 set ..%data(234, "longitude") = -122.440068
set ..%data(235, "latitude") = 37.761064 set ..%data(235, "longitude") = -122.440720
set ..%data(236, "latitude") = 37.761040 set ..%data(236, "longitude") = -122.441411
set ..%data(237, "latitude") = 37.761048 set ..%data(237, "longitude") = -122.442324
set ..%data(238, "latitude") = 37.760851 set ..%data(238, "longitude") = -122.443118
set ..%data(239, "latitude") = 37.759977 set ..%data(239, "longitude") = -122.444591
set ..%data(240, "latitude") = 37.759913 set ..%data(240, "longitude") = -122.444698
set ..%data(241, "latitude") = 37.759623 set ..%data(241, "longitude") = -122.445065
set ..%data(242, "latitude") = 37.758902 set ..%data(242, "longitude") = -122.445158
set ..%data(243, "latitude") = 37.758428 set ..%data(243, "longitude") = -122.444570
set ..%data(244, "latitude") = 37.757687 set ..%data(244, "longitude") = -122.443340
set ..%data(245, "latitude") = 37.757583 set ..%data(245, "longitude") = -122.443240
set ..%data(246, "latitude") = 37.757019 set ..%data(246, "longitude") = -122.442787
set ..%data(247, "latitude") = 37.756603 set ..%data(247, "longitude") = -122.442322
set ..%data(248, "latitude") = 37.756380 set ..%data(248, "longitude") = -122.441602
set ..%data(249, "latitude") = 37.755790 set ..%data(249, "longitude") = -122.441382
set ..%data(250, "latitude") = 37.754493 set ..%data(250, "longitude") = -122.442133
set ..%data(251, "latitude") = 37.754361 set ..%data(251, "longitude") = -122.442206
set ..%data(252, "latitude") = 37.753719 set ..%data(252, "longitude") = -122.442650
set ..%data(253, "latitude") = 37.753096 set ..%data(253, "longitude") = -122.442915
set ..%data(254, "latitude") = 37.751617 set ..%data(254, "longitude") = -122.443211
set ..%data(255, "latitude") = 37.751496 set ..%data(255, "longitude") = -122.443246
set ..%data(256, "latitude") = 37.750733 set ..%data(256, "longitude") = -122.443428
set ..%data(257, "latitude") = 37.750126 set ..%data(257, "longitude") = -122.443536
set ..%data(258, "latitude") = 37.750103 set ..%data(258, "longitude") = -122.443784
set ..%data(259, "latitude") = 37.750390 set ..%data(259, "longitude") = -122.444010
set ..%data(260, "latitude") = 37.750448 set ..%data(260, "longitude") = -122.444013
set ..%data(261, "latitude") = 37.750536 set ..%data(261, "longitude") = -122.444040
set ..%data(262, "latitude") = 37.750493 set ..%data(262, "longitude") = -122.444141
set ..%data(263, "latitude") = 37.790859 set ..%data(263, "longitude") = -122.402808
set ..%data(264, "latitude") = 37.790864 set ..%data(264, "longitude") = -122.402768
set ..%data(265, "latitude") = 37.790995 set ..%data(265, "longitude") = -122.402539
set ..%data(266, "latitude") = 37.791148 set ..%data(266, "longitude") = -122.402172
set ..%data(267, "latitude") = 37.791385 set ..%data(267, "longitude") = -122.401312
set ..%data(268, "latitude") = 37.791405 set ..%data(268, "longitude") = -122.400776
set ..%data(269, "latitude") = 37.791288 set ..%data(269, "longitude") = -122.400528
set ..%data(270, "latitude") = 37.791113 set ..%data(270, "longitude") = -122.400441
set ..%data(271, "latitude") = 37.791027 set ..%data(271, "longitude") = -122.400395
set ..%data(272, "latitude") = 37.791094 set ..%data(272, "longitude") = -122.400311
set ..%data(273, "latitude") = 37.791211 set ..%data(273, "longitude") = -122.400183
set ..%data(274, "latitude") = 37.791060 set ..%data(274, "longitude") = -122.399334
set ..%data(275, "latitude") = 37.790538 set ..%data(275, "longitude") = -122.398718
set ..%data(276, "latitude") = 37.790095 set ..%data(276, "longitude") = -122.398086
set ..%data(277, "latitude") = 37.789644 set ..%data(277, "longitude") = -122.397360
set ..%data(278, "latitude") = 37.789254 set ..%data(278, "longitude") = -122.396844
set ..%data(279, "latitude") = 37.788855 set ..%data(279, "longitude") = -122.396397
set ..%data(280, "latitude") = 37.788483 set ..%data(280, "longitude") = -122.395963
set ..%data(281, "latitude") = 37.788015 set ..%data(281, "longitude") = -122.395365
set ..%data(282, "latitude") = 37.787558 set ..%data(282, "longitude") = -122.394735
set ..%data(283, "latitude") = 37.787472 set ..%data(283, "longitude") = -122.394323
set ..%data(284, "latitude") = 37.787630 set ..%data(284, "longitude") = -122.394025
set ..%data(285, "latitude") = 37.787767 set ..%data(285, "longitude") = -122.393987
set ..%data(286, "latitude") = 37.787486 set ..%data(286, "longitude") = -122.394452
set ..%data(287, "latitude") = 37.786977 set ..%data(287, "longitude") = -122.395043
set ..%data(288, "latitude") = 37.786583 set ..%data(288, "longitude") = -122.395552
set ..%data(289, "latitude") = 37.786540 set ..%data(289, "longitude") = -122.395610
set ..%data(290, "latitude") = 37.786516 set ..%data(290, "longitude") = -122.395659
set ..%data(291, "latitude") = 37.786378 set ..%data(291, "longitude") = -122.395707
set ..%data(292, "latitude") = 37.786044 set ..%data(292, "longitude") = -122.395362
set ..%data(293, "latitude") = 37.785598 set ..%data(293, "longitude") = -122.394715
set ..%data(294, "latitude") = 37.785321 set ..%data(294, "longitude") = -122.394361
set ..%data(295, "latitude") = 37.785207 set ..%data(295, "longitude") = -122.394236
set ..%data(296, "latitude") = 37.785751 set ..%data(296, "longitude") = -122.394062
set ..%data(297, "latitude") = 37.785996 set ..%data(297, "longitude") = -122.393881
set ..%data(298, "latitude") = 37.786092 set ..%data(298, "longitude") = -122.393830
set ..%data(299, "latitude") = 37.785998 set ..%data(299, "longitude") = -122.393899
set ..%data(300, "latitude") = 37.785114 set ..%data(300, "longitude") = -122.394365
set ..%data(301, "latitude") = 37.785022 set ..%data(301, "longitude") = -122.394441
set ..%data(302, "latitude") = 37.784823 set ..%data(302, "longitude") = -122.394635
set ..%data(303, "latitude") = 37.784719 set ..%data(303, "longitude") = -122.394629
set ..%data(304, "latitude") = 37.785069 set ..%data(304, "longitude") = -122.394176
set ..%data(305, "latitude") = 37.785500 set ..%data(305, "longitude") = -122.393650
set ..%data(306, "latitude") = 37.785770 set ..%data(306, "longitude") = -122.393291
set ..%data(307, "latitude") = 37.785839 set ..%data(307, "longitude") = -122.393159
set ..%data(308, "latitude") = 37.782651 set ..%data(308, "longitude") = -122.400628
set ..%data(309, "latitude") = 37.782616 set ..%data(309, "longitude") = -122.400599
set ..%data(310, "latitude") = 37.782702 set ..%data(310, "longitude") = -122.400470
set ..%data(311, "latitude") = 37.782915 set ..%data(311, "longitude") = -122.400192
set ..%data(312, "latitude") = 37.783137 set ..%data(312, "longitude") = -122.399887
set ..%data(313, "latitude") = 37.783414 set ..%data(313, "longitude") = -122.399519
set ..%data(314, "latitude") = 37.783629 set ..%data(314, "longitude") = -122.399237
set ..%data(315, "latitude") = 37.783688 set ..%data(315, "longitude") = -122.399157
set ..%data(316, "latitude") = 37.783716 set ..%data(316, "longitude") = -122.399106
set ..%data(317, "latitude") = 37.783798 set ..%data(317, "longitude") = -122.399072
set ..%data(318, "latitude") = 37.783997 set ..%data(318, "longitude") = -122.399186
set ..%data(319, "latitude") = 37.784271 set ..%data(319, "longitude") = -122.399538
set ..%data(320, "latitude") = 37.784577 set ..%data(320, "longitude") = -122.399948
set ..%data(321, "latitude") = 37.784828 set ..%data(321, "longitude") = -122.400260
set ..%data(322, "latitude") = 37.784999 set ..%data(322, "longitude") = -122.400477
set ..%data(323, "latitude") = 37.785113 set ..%data(323, "longitude") = -122.400651
set ..%data(324, "latitude") = 37.785155 set ..%data(324, "longitude") = -122.400703
set ..%data(325, "latitude") = 37.785192 set ..%data(325, "longitude") = -122.400749
set ..%data(326, "latitude") = 37.785278 set ..%data(326, "longitude") = -122.400839
set ..%data(327, "latitude") = 37.785387 set ..%data(327, "longitude") = -122.400857
set ..%data(328, "latitude") = 37.785478 set ..%data(328, "longitude") = -122.400890
set ..%data(329, "latitude") = 37.785526 set ..%data(329, "longitude") = -122.401022
set ..%data(330, "latitude") = 37.785598 set ..%data(330, "longitude") = -122.401148
set ..%data(331, "latitude") = 37.785631 set ..%data(331, "longitude") = -122.401202
set ..%data(332, "latitude") = 37.785660 set ..%data(332, "longitude") = -122.401267
set ..%data(333, "latitude") = 37.803986 set ..%data(333, "longitude") = -122.426035
set ..%data(334, "latitude") = 37.804102 set ..%data(334, "longitude") = -122.425089
set ..%data(335, "latitude") = 37.804211 set ..%data(335, "longitude") = -122.424156
set ..%data(336, "latitude") = 37.803861 set ..%data(336, "longitude") = -122.423385
set ..%data(337, "latitude") = 37.803151 set ..%data(337, "longitude") = -122.423214
set ..%data(338, "latitude") = 37.802439 set ..%data(338, "longitude") = -122.423077
set ..%data(339, "latitude") = 37.801740 set ..%data(339, "longitude") = -122.422905
set ..%data(340, "latitude") = 37.801069 set ..%data(340, "longitude") = -122.422785
set ..%data(341, "latitude") = 37.800345 set ..%data(341, "longitude") = -122.422649
set ..%data(342, "latitude") = 37.799633 set ..%data(342, "longitude") = -122.422603
set ..%data(343, "latitude") = 37.799750 set ..%data(343, "longitude") = -122.421700
set ..%data(344, "latitude") = 37.799885 set ..%data(344, "longitude") = -122.420854
set ..%data(345, "latitude") = 37.799209 set ..%data(345, "longitude") = -122.420607
set ..%data(346, "latitude") = 37.795656 set ..%data(346, "longitude") = -122.400395
set ..%data(347, "latitude") = 37.795203 set ..%data(347, "longitude") = -122.400304
set ..%data(348, "latitude") = 37.778738 set ..%data(348, "longitude") = -122.415584
set ..%data(349, "latitude") = 37.778812 set ..%data(349, "longitude") = -122.415189
set ..%data(350, "latitude") = 37.778824 set ..%data(350, "longitude") = -122.415092
set ..%data(351, "latitude") = 37.778833 set ..%data(351, "longitude") = -122.414932
set ..%data(352, "latitude") = 37.778834 set ..%data(352, "longitude") = -122.414898
set ..%data(353, "latitude") = 37.778740 set ..%data(353, "longitude") = -122.414757
set ..%data(354, "latitude") = 37.778501 set ..%data(354, "longitude") = -122.414433
set ..%data(355, "latitude") = 37.778182 set ..%data(355, "longitude") = -122.414026
set ..%data(356, "latitude") = 37.777851 set ..%data(356, "longitude") = -122.413623
set ..%data(357, "latitude") = 37.777486 set ..%data(357, "longitude") = -122.413166
set ..%data(358, "latitude") = 37.777109 set ..%data(358, "longitude") = -122.412674
set ..%data(359, "latitude") = 37.776743 set ..%data(359, "longitude") = -122.412186
set ..%data(360, "latitude") = 37.776440 set ..%data(360, "longitude") = -122.411800
set ..%data(361, "latitude") = 37.776295 set ..%data(361, "longitude") = -122.411614
set ..%data(362, "latitude") = 37.776158 set ..%data(362, "longitude") = -122.411440
set ..%data(363, "latitude") = 37.775806 set ..%data(363, "longitude") = -122.410997
set ..%data(364, "latitude") = 37.775422 set ..%data(364, "longitude") = -122.410484
set ..%data(365, "latitude") = 37.775126 set ..%data(365, "longitude") = -122.410087
set ..%data(366, "latitude") = 37.775012 set ..%data(366, "longitude") = -122.409854
set ..%data(367, "latitude") = 37.775164 set ..%data(367, "longitude") = -122.409573
set ..%data(368, "latitude") = 37.775498 set ..%data(368, "longitude") = -122.409180
set ..%data(369, "latitude") = 37.775868 set ..%data(369, "longitude") = -122.408730
set ..%data(370, "latitude") = 37.776256 set ..%data(370, "longitude") = -122.408240
set ..%data(371, "latitude") = 37.776519 set ..%data(371, "longitude") = -122.407928
set ..%data(372, "latitude") = 37.776539 set ..%data(372, "longitude") = -122.407904
set ..%data(373, "latitude") = 37.776595 set ..%data(373, "longitude") = -122.407854
set ..%data(374, "latitude") = 37.776853 set ..%data(374, "longitude") = -122.407547
set ..%data(375, "latitude") = 37.777234 set ..%data(375, "longitude") = -122.407087
set ..%data(376, "latitude") = 37.777644 set ..%data(376, "longitude") = -122.406558
set ..%data(377, "latitude") = 37.778066 set ..%data(377, "longitude") = -122.406017
set ..%data(378, "latitude") = 37.778468 set ..%data(378, "longitude") = -122.405499
set ..%data(379, "latitude") = 37.778866 set ..%data(379, "longitude") = -122.404995
set ..%data(380, "latitude") = 37.779295 set ..%data(380, "longitude") = -122.404455
set ..%data(381, "latitude") = 37.779695 set ..%data(381, "longitude") = -122.403950
set ..%data(382, "latitude") = 37.779982 set ..%data(382, "longitude") = -122.403584
set ..%data(383, "latitude") = 37.780295 set ..%data(383, "longitude") = -122.403223
set ..%data(384, "latitude") = 37.780664 set ..%data(384, "longitude") = -122.402766
set ..%data(385, "latitude") = 37.781043 set ..%data(385, "longitude") = -122.402288
set ..%data(386, "latitude") = 37.781399 set ..%data(386, "longitude") = -122.401823
set ..%data(387, "latitude") = 37.781727 set ..%data(387, "longitude") = -122.401407
set ..%data(388, "latitude") = 37.781853 set ..%data(388, "longitude") = -122.401247
set ..%data(389, "latitude") = 37.781894 set ..%data(389, "longitude") = -122.401195
set ..%data(390, "latitude") = 37.782076 set ..%data(390, "longitude") = -122.400977
set ..%data(391, "latitude") = 37.782338 set ..%data(391, "longitude") = -122.400603
set ..%data(392, "latitude") = 37.782666 set ..%data(392, "longitude") = -122.400133
set ..%data(393, "latitude") = 37.783048 set ..%data(393, "longitude") = -122.399634
set ..%data(394, "latitude") = 37.783450 set ..%data(394, "longitude") = -122.399198
set ..%data(395, "latitude") = 37.783791 set ..%data(395, "longitude") = -122.398998
set ..%data(396, "latitude") = 37.784177 set ..%data(396, "longitude") = -122.398959
set ..%data(397, "latitude") = 37.784388 set ..%data(397, "longitude") = -122.398971
set ..%data(398, "latitude") = 37.784404 set ..%data(398, "longitude") = -122.399128
set ..%data(399, "latitude") = 37.784586 set ..%data(399, "longitude") = -122.399524
set ..%data(400, "latitude") = 37.784835 set ..%data(400, "longitude") = -122.399927
set ..%data(401, "latitude") = 37.785116 set ..%data(401, "longitude") = -122.400307
set ..%data(402, "latitude") = 37.785282 set ..%data(402, "longitude") = -122.400539
set ..%data(403, "latitude") = 37.785346 set ..%data(403, "longitude") = -122.400692
set ..%data(404, "latitude") = 37.765769 set ..%data(404, "longitude") = -122.407201
set ..%data(405, "latitude") = 37.765790 set ..%data(405, "longitude") = -122.407414
set ..%data(406, "latitude") = 37.765802 set ..%data(406, "longitude") = -122.407755
set ..%data(407, "latitude") = 37.765791 set ..%data(407, "longitude") = -122.408219
set ..%data(408, "latitude") = 37.765763 set ..%data(408, "longitude") = -122.408759
set ..%data(409, "latitude") = 37.765726 set ..%data(409, "longitude") = -122.409348
set ..%data(410, "latitude") = 37.765716 set ..%data(410, "longitude") = -122.409882
set ..%data(411, "latitude") = 37.765708 set ..%data(411, "longitude") = -122.410202
set ..%data(412, "latitude") = 37.765705 set ..%data(412, "longitude") = -122.410253
set ..%data(413, "latitude") = 37.765707 set ..%data(413, "longitude") = -122.410369
set ..%data(414, "latitude") = 37.765692 set ..%data(414, "longitude") = -122.410720
set ..%data(415, "latitude") = 37.765699 set ..%data(415, "longitude") = -122.411215
set ..%data(416, "latitude") = 37.765687 set ..%data(416, "longitude") = -122.411789
set ..%data(417, "latitude") = 37.765666 set ..%data(417, "longitude") = -122.412373
set ..%data(418, "latitude") = 37.765598 set ..%data(418, "longitude") = -122.412883
set ..%data(419, "latitude") = 37.765543 set ..%data(419, "longitude") = -122.413039
set ..%data(420, "latitude") = 37.765532 set ..%data(420, "longitude") = -122.413125
set ..%data(421, "latitude") = 37.765500 set ..%data(421, "longitude") = -122.413553
set ..%data(422, "latitude") = 37.765448 set ..%data(422, "longitude") = -122.414053
set ..%data(423, "latitude") = 37.765388 set ..%data(423, "longitude") = -122.414645
set ..%data(424, "latitude") = 37.765323 set ..%data(424, "longitude") = -122.415250
set ..%data(425, "latitude") = 37.765303 set ..%data(425, "longitude") = -122.415847
set ..%data(426, "latitude") = 37.765251 set ..%data(426, "longitude") = -122.416439
set ..%data(427, "latitude") = 37.765204 set ..%data(427, "longitude") = -122.417020
set ..%data(428, "latitude") = 37.765172 set ..%data(428, "longitude") = -122.417556
set ..%data(429, "latitude") = 37.765164 set ..%data(429, "longitude") = -122.418075
set ..%data(430, "latitude") = 37.765153 set ..%data(430, "longitude") = -122.418618
set ..%data(431, "latitude") = 37.765136 set ..%data(431, "longitude") = -122.419112
set ..%data(432, "latitude") = 37.765129 set ..%data(432, "longitude") = -122.419378
set ..%data(433, "latitude") = 37.765119 set ..%data(433, "longitude") = -122.419481
set ..%data(434, "latitude") = 37.765100 set ..%data(434, "longitude") = -122.419852
set ..%data(435, "latitude") = 37.765083 set ..%data(435, "longitude") = -122.420349
set ..%data(436, "latitude") = 37.765045 set ..%data(436, "longitude") = -122.420930
set ..%data(437, "latitude") = 37.764992 set ..%data(437, "longitude") = -122.421481
set ..%data(438, "latitude") = 37.764980 set ..%data(438, "longitude") = -122.421695
set ..%data(439, "latitude") = 37.764993 set ..%data(439, "longitude") = -122.421843
set ..%data(440, "latitude") = 37.764986 set ..%data(440, "longitude") = -122.422255
set ..%data(441, "latitude") = 37.764975 set ..%data(441, "longitude") = -122.422823
set ..%data(442, "latitude") = 37.764939 set ..%data(442, "longitude") = -122.423411
set ..%data(443, "latitude") = 37.764902 set ..%data(443, "longitude") = -122.424014
set ..%data(444, "latitude") = 37.764853 set ..%data(444, "longitude") = -122.424576
set ..%data(445, "latitude") = 37.764826 set ..%data(445, "longitude") = -122.424922
set ..%data(446, "latitude") = 37.764796 set ..%data(446, "longitude") = -122.425375
set ..%data(447, "latitude") = 37.764782 set ..%data(447, "longitude") = -122.425869
set ..%data(448, "latitude") = 37.764768 set ..%data(448, "longitude") = -122.426089
set ..%data(449, "latitude") = 37.764766 set ..%data(449, "longitude") = -122.426117
set ..%data(450, "latitude") = 37.764723 set ..%data(450, "longitude") = -122.426276
set ..%data(451, "latitude") = 37.764681 set ..%data(451, "longitude") = -122.426649
set ..%data(452, "latitude") = 37.782012 set ..%data(452, "longitude") = -122.404200
set ..%data(453, "latitude") = 37.781574 set ..%data(453, "longitude") = -122.404911
set ..%data(454, "latitude") = 37.781055 set ..%data(454, "longitude") = -122.405597
set ..%data(455, "latitude") = 37.780479 set ..%data(455, "longitude") = -122.406341
set ..%data(456, "latitude") = 37.779996 set ..%data(456, "longitude") = -122.406939
set ..%data(457, "latitude") = 37.779459 set ..%data(457, "longitude") = -122.407613
set ..%data(458, "latitude") = 37.778953 set ..%data(458, "longitude") = -122.408228
set ..%data(459, "latitude") = 37.778409 set ..%data(459, "longitude") = -122.408839
set ..%data(460, "latitude") = 37.777842 set ..%data(460, "longitude") = -122.409501
set ..%data(461, "latitude") = 37.777334 set ..%data(461, "longitude") = -122.410181
set ..%data(462, "latitude") = 37.776809 set ..%data(462, "longitude") = -122.410836
set ..%data(463, "latitude") = 37.776240 set ..%data(463, "longitude") = -122.411514
set ..%data(464, "latitude") = 37.775725 set ..%data(464, "longitude") = -122.412145
set ..%data(465, "latitude") = 37.775190 set ..%data(465, "longitude") = -122.412805
set ..%data(466, "latitude") = 37.774672 set ..%data(466, "longitude") = -122.413464
set ..%data(467, "latitude") = 37.774084 set ..%data(467, "longitude") = -122.414186
set ..%data(468, "latitude") = 37.773533 set ..%data(468, "longitude") = -122.413636
set ..%data(469, "latitude") = 37.773021 set ..%data(469, "longitude") = -122.413009
set ..%data(470, "latitude") = 37.772501 set ..%data(470, "longitude") = -122.412371
set ..%data(471, "latitude") = 37.771964 set ..%data(471, "longitude") = -122.411681
set ..%data(472, "latitude") = 37.771479 set ..%data(472, "longitude") = -122.411078
set ..%data(473, "latitude") = 37.770992 set ..%data(473, "longitude") = -122.410477
set ..%data(474, "latitude") = 37.770467 set ..%data(474, "longitude") = -122.409801
set ..%data(475, "latitude") = 37.770090 set ..%data(475, "longitude") = -122.408904
set ..%data(476, "latitude") = 37.769657 set ..%data(476, "longitude") = -122.408103
set ..%data(477, "latitude") = 37.769132 set ..%data(477, "longitude") = -122.407276
set ..%data(478, "latitude") = 37.768564 set ..%data(478, "longitude") = -122.406469
set ..%data(479, "latitude") = 37.767980 set ..%data(479, "longitude") = -122.405745
set ..%data(480, "latitude") = 37.767380 set ..%data(480, "longitude") = -122.405299
set ..%data(481, "latitude") = 37.766604 set ..%data(481, "longitude") = -122.405297
set ..%data(482, "latitude") = 37.765838 set ..%data(482, "longitude") = -122.405200
set ..%data(483, "latitude") = 37.765139 set ..%data(483, "longitude") = -122.405139
set ..%data(484, "latitude") = 37.764457 set ..%data(484, "longitude") = -122.405094
set ..%data(485, "latitude") = 37.763716 set ..%data(485, "longitude") = -122.405142
set ..%data(486, "latitude") = 37.762932 set ..%data(486, "longitude") = -122.405398
set ..%data(487, "latitude") = 37.762126 set ..%data(487, "longitude") = -122.405813
set ..%data(488, "latitude") = 37.761344 set ..%data(488, "longitude") = -122.406215
set ..%data(489, "latitude") = 37.760556 set ..%data(489, "longitude") = -122.406495
set ..%data(490, "latitude") = 37.759732 set ..%data(490, "longitude") = -122.406484
set ..%data(491, "latitude") = 37.758910 set ..%data(491, "longitude") = -122.406228
set ..%data(492, "latitude") = 37.758182 set ..%data(492, "longitude") = -122.405695
set ..%data(493, "latitude") = 37.757676 set ..%data(493, "longitude") = -122.405118
set ..%data(494, "latitude") = 37.757039 set ..%data(494, "longitude") = -122.404346
set ..%data(495, "latitude") = 37.756335 set ..%data(495, "longitude") = -122.403719
set ..%data(496, "latitude") = 37.755503 set ..%data(496, "longitude") = -122.403406
set ..%data(497, "latitude") = 37.754665 set ..%data(497, "longitude") = -122.403242
set ..%data(498, "latitude") = 37.753837 set ..%data(498, "longitude") = -122.403172
set ..%data(499, "latitude") = 37.752986 set ..%data(499, "longitude") = -122.403112
set ..%data(500, "latitude") = 37.751266 set ..%data(500, "longitude") = -122.403355
quit $$$OK
]]></Implementation>
</Method>
</Class>
<Document name="demo-HeatmapDemoDashboard.dashboard.DFI">
<dashboard xmlns="http://www.intersystems.com/deepsee/library" name="HeatmapDemoDashboard" folderName="demo" title="" description="" keywords="" owner="" shared="true" public="true" locked="false" resource="" timeCreated="2013-08-27T08:21:35.93Z" createdBy="UnknownUser" category="" bookCover="" scheme="" worklistCount="0" snapTo="false" snapGrid="false" gridRows="2" gridCols="2" canResize="true" canModify="true" showTitleBar="true" titleBarOpacity="" titleBarColor="" selectedTitleBarOpacity="" selectedTitleBarColor="" titleBarTextColor="" selectedTitleBarTextColor="" titleBarFont="" companyName="" companyLogo="" companyStyle="" backgroundColor="white" backgroundImage="none" backgroundRepeat="no-repeat" backgroundSize="100% 100%" backgroundOpacity="1" widgetBorders="1px solid #F0F0F0" widgetBordersSwitch="edit" widgetBordersColor="#F0F0F0" widgetBordersStyle="solid" widgetBordersWidth="1" widgetBordersToggle="true">
<widget name="map" type="portlet" subtype="DeepSee.EnhancedMapPortlet" subtypeClass="" title="" dataSource="demo/HeatmapDemoKPI.kpi" dataLink="" drillDownDataSource="" top="0" left="0" width="1152" height="599" sidebarContent="" showSidebar="false" sidebarWidth="" maximized="false" showToolbar="true" showToolbarBottomBorder="true" showToolbarOnlyWhenMaximized="false" colorToolbar="#F0F0F0" opacityToolbar="1" backgroundColor="#F0F0F0" opacity="1" theme="" dataColorList="">
<property name="colorProperty"></property>
<property name="coordsJsFile"></property>
<property name="coordsProperty"></property>
<property name="drillUpButtonPosition">top</property>
<property name="fillOpacity"></property>
<property name="fillOpacityProperty"></property>
<property name="hoverOpacity"></property>
<property name="isClickableProperty"></property>
<property name="latitude">37.774546</property>
<property name="latitudeProperty">latitude</property>
<property name="longitude">-122.433523</property>
<property name="longitudeProperty">longitude</property>
<property name="mapType">SATELLITE</property>
<property name="markerDataProperties"></property>
<property name="markerIcon"></property>
<property name="markerIconProperty"></property>
<property name="markerIconSize"></property>
<property name="markerTitleProperty"></property>
<property name="markersAsHeatmap">1</property>
<property name="markersdraggable">1</property>
<property name="onaddmarker"></property>
<property name="onaddpolygon"></property>
<property name="onapplyfilters"></property>
<property name="onclickmarker"></property>
<property name="onclickpolygon"></property>
<property name="ondrilldown"></property>
<property name="ondrillup"></property>
<property name="polygonDataProperties"></property>
<property name="polygonTitleProperty"></property>
<property name="strokeOpacity"></property>
<property name="strokeWeight"></property>
<property name="zoom">13</property>
</widget>
</dashboard>
</Document></Export>
@dmitry-zasypkin
Copy link
Author

InterSystems DeepSee heatmap demo packaged for InterSystems Developer Community discussion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment