The GIS Widget provides geographic information system capabilities, allowing templates to query location-based data such as wind speeds, elevations, and regional parameters based on latitude and longitude coordinates.

GIS Solvers

Learn about GIS solvers for advanced geographic data processing

Remote Widget Integration

GIS widgets often integrate with remote solvers for complex geographic calculations

Widget Types

The GIS widget supports four different types of geographic queries:
TypeDescriptionOutput
regionQuery regions with defined borders, returns values based on polygon boundariesvalue (scalar or unit)
raycastDraw rays from a point to detect intersections with boundariesdistances (flat array of numbers)
contourQuery interpolated values from contour mapsvalue (interpolated scalar or unit)
elevationGet elevation data from external APIselevation (elevation number at coordinate)

Region Type

This widget queries a region map (Multi-polygon GIS geometry) where each region has an assigned value. The output is not interpolated between regions.

Configuration

type
string
required
Set to “region” for regional boundary queries
dataset
string
required
Name of the GIS dataset to query (e.g., “no_base_wind_speed”)
displayValue
function
required
Function defining what is displayed above the map: f(o) = o.value
latitude
number
required
Latitude coordinate, often using projectDefault("latitude", fallback)
longitude
number
required
Longitude coordinate, often using projectDefault("longitude", fallback)

Example Implementation

{
  "type": "sheetTemplateWidgets",
  "attributes": {
    "type": "gis",
    "label": "Base Wind Velocity",
    "referenceId": "baseWindVelocityMap",
    "equation": [
      {
        "result": "{
          \"type\": \"region\", 
          \"dataset\": \"no_base_wind_speed\", 
          \"displayValue\": f(o) = o.value,
          \"latitude\": projectDefault(\"latitude\", 59.91323), 
          \"longitude\": projectDefault(\"longitude\", 10.73978) 
        }",
        "condition": "annex == \"NS\""
      }
    ],
    "showInSummary": true
  }
}

Accessing Region Data

Extract the value from the GIS widget in a equation widget:
{
  "type": "computed",
  "units2": "m/s",  
  "equation": [
    {
      "result": "baseWindVelocityMap.value",
      "condition": "@default"
    }
  ]
}
Unit Handling: The GIS layer can return either a number (requiring unit assignment in the equation widget) or a unit (already with units assigned).

Raycast Type

Raycast draws lines from a single point outwards to detect intersections with boundaries. This is used for calculating distances to coastlines, elevation profiles, and similar applications.

Configuration

type
string
required
Set to “raycast” for ray-based boundary detection
dataset
string
required
Dataset containing boundary information (e.g., “eu_coastline”)
maxDistance
number
required
Maximum distance for rays in meters
numRays
number
required
Number of equally-spaced rays to cast
latitude
number
required
Origin latitude coordinate
longitude
number
required
Origin longitude coordinate

Example Implementation

{
  "type": "gis",
  "referenceId": "distanceUpwindMap",
  "equation": [
    {
      "result": "{      
        \"type\": \"raycast\",
        \"dataset\": \"eu_coastline\",
        \"maxDistance\": 100000,
        \"numRays\": 12,
        \"latitude\": projectDefault(\"latitude\", 51.50003),
        \"longitude\": projectDefault(\"longitude\", -0.12458)
      }",
      "condition": "@default"
    }
  ]
}

Accessing Raycast Data

Extract specific ray distances:
{
  "equation": [
    {
      "result": "vectorSubset(distanceUpwindMap.distances, rowIndex()+1)",
      "condition": "@default"
    }
  ]
}
The gisSignificantOrography remote widget solver is independent of this widget but typically shares the same latitude, longitude, and numRays parameters.

Contour Type

Queries interpolated values from contour maps. Values are interpolated between contours when possible.

Configuration

type
string
required
Set to “contour” for contour map queries
dataset
string
required
Name of the contour dataset (e.g., “gb_base_wind_speed”)
unit
string
Optional unit specification if dataset doesn’t include units
latitude
number
required
Query latitude coordinate
longitude
number
required
Query longitude coordinate

Example Implementation

{
  "type": "sheetTemplateWidgets",
  "attributes": {
    "type": "gis",
    "label": "Base Wind Velocity",
    "referenceId": "baseWindVelocityMap",
    "equation": [
      {
        "result": "{
          \"type\": \"contour\", 
          \"dataset\": \"gb_base_wind_speed\", 
          \"unit\": \"m/s\",
          \"latitude\": projectDefault(\"latitude\", 51.50003), 
          \"longitude\": projectDefault(\"longitude\", -0.12458) 
        }",
        "condition": "annex == \"BS\""
      }
    ],
    "showInSummary": true
  }
}
When contour data is complex, interpolation may not occur. Refer to GIS solver SQL query documentation for details on interpolation behavior.

Elevation Type

Queries elevation data at specific coordinates using external APIs (MapTiler). This provides single-point elevation sampling.

Configuration

type
string
required
Set to “elevation” for elevation queries
latitude
number
required
Query latitude coordinate
longitude
number
required
Query longitude coordinate

Example Implementation

{
  "type": "sheetTemplateWidgets",
  "attributes": {
    "type": "gis",
    "label": "Elevation",
    "referenceId": "elevationMap",
    "visibleIf": null,
    "equation": [
      {
        "result": "{
          \"type\": \"elevation\",  
          \"latitude\": projectDefault(\"latitude\", 51.50003), 
          \"longitude\": projectDefault(\"longitude\", -0.12458)  
        }",
        "condition": "@default"
      }
    ],
    "showInSummary": true
  }
}

Accessing Elevation Data

Reference the elevation value:
{
  "equation": [
    {
      "result": "elevationMap.elevation",
      "condition": "@default"
    }
  ]
}

Best Practices

Coordinate Handling

  • Always use projectDefault() for latitude and longitude to provide fallback values
  • Ensure coordinates are in decimal degrees format
  • Consider user input validation for coordinate ranges

Performance Optimization

  • Cache GIS queries when possible by avoiding frequent coordinate changes
  • Use appropriate maxDistance and numRays values for raycast operations
  • Consider the complexity of datasets when choosing between region and contour types

Error Handling

  • Provide meaningful fallback values in projectDefault() calls
  • Test GIS widgets with various global locations
  • Handle cases where GIS services may be unavailable

Integration with Other Systems

  • GIS widgets often work in conjunction with remote solvers
  • Consider the relationship between GIS data and calculation requirements
  • Document the source and accuracy of GIS datasets used

Examples in Production

TemplateLocationUsage
MAFIBracketFreestanderNorway (Skansen 28, 2670 Otta)Wind velocity regions
MAFIBracketFreestanderUK (London)Contour maps and raycast
For advanced GIS solver integration and complex geographic calculations, refer to the GIS Solvers documentation and Remote Widget implementation guides.