Expanded Coverage (Experimental)

The Solar API is launching an experimental feature that expands coverage to previously unsupported regions, based on machine learning models applied to satellite imagery. To access experimental solar data, set the experiments parameter to EXPANDED_COVERAGE and the requiredQuality parameter to BASE.

Experimental data is available for buildingInsights and dataLayers requests. The following sections describe example requests and responses.

Building insights

The buildingInsights endpoint provides insights about the location, dimensions, and solar potential of a building. To request building insights, send an HTTP GET request to:

https://solar.googleapis.com/v1/buildingInsights:findClosest?key=YOUR_API_KEY

Include your request URL parameters that specify the latitude and longitude coordinates of the location and the minimum required quality level allowed in the results.

The following example requests building insights information for the location at the coordinates of latitude = 4.655719 and longitude = -74.128971. To request experimental data, set the following parameters:

  • requiredQuality = BASE
  • experiments = EXPANDED_COVERAGE
curl -X GET "https://solar.googleapis.com/v1/buildingInsights:findClosest?location.latitude=4.655719&location.longitude=-74.128971&requiredQuality=BASE&experiments=EXPANDED_COVERAGE&key=YOUR_API_KEY"

That request produces a JSON response in the form:

{
  "name": "buildings/ChIJW2GaKXecP44RaeGtGpQtk4Q",
  "center": {
    "latitude": 4.6557664,
    "longitude": -74.1289303
  },
  "imageryDate": {
    "year": 2024,
    "month": 2,
    "day": 19
  },
  "regionCode": "CO",
  "solarPotential": {
    "maxArrayPanelsCount": 351,
    "maxArrayAreaMeters2": 689.20776,
    "maxSunshineHoursPerYear": 1631.7008,
    "carbonOffsetFactorKgPerMwh": 122.99986,
    "wholeRoofStats": {
      "areaMeters2": 1078.406,
      "sunshineQuantiles": [
        562.9261,
        930.9767,
        1165.876,
        1221.8761,
        1333.0057,
        1485.7363,
        1563.2417,
        1593.266,
        1610.5652,
        1621.5986,
        1640.6102
      ],
      "groundAreaMeters2": 1050.76
    },
    "roofSegmentStats": [
      {
        "pitchDegrees": 38.58091,
        "azimuthDegrees": 41.91368,
        "stats": {
          "areaMeters2": 23.153826,
          "sunshineQuantiles": [
            582.9132,
            612.5797,
            673.3435,
            762.14233,
            899.41864,
            1031.1329,
            1103.8121,
            1135.5204,
            1150.2969,
            1158.215,
            1170.5475
          ],
          "groundAreaMeters2": 18.1
        },
        "center": {
          "latitude": 4.6554996,
          "longitude": -74.128966699999992
        },
        "boundingBox": {
          "sw": {
            "latitude": 4.655472,
            "longitude": -74.1290005
          },
          "ne": {
            "latitude": 4.6555371999999995,
            "longitude": -74.1289328
          }
        },
        "planeHeightAtCenterMeters": 2552.031
      },
      /.../
    ]
    "solarPanelConfigs": [
      {
        "panelsCount": 4,
        "yearlyEnergyDcKwh": 2609.5698,
        "roofSegmentSummaries": [
          {
            "pitchDegrees": 10.260736,
            "azimuthDegrees": 131.22626,
            "panelsCount": 1,
            "yearlyEnergyDcKwh": 652.84863,
            "segmentIndex": 6
          },
          {
            "pitchDegrees": 8.649131,
            "azimuthDegrees": 145.79407,
            "panelsCount": 1,
            "yearlyEnergyDcKwh": 652.3829,
            "segmentIndex": 11
          },
          {
            "pitchDegrees": 5.061984,
            "azimuthDegrees": 12.690001,
            "panelsCount": 2,
            "yearlyEnergyDcKwh": 1304.3383,
            "segmentIndex": 12
          }
        ]
      },
      /.../
    ]
    "panelCapacityWatts": 400,
    "panelHeightMeters": 1.879,
    "panelWidthMeters": 1.045,
    "panelLifetimeYears": 20,
    "buildingStats": {
      "areaMeters2": 1143.155,
      "sunshineQuantiles": [
        557,
        883.26263,
        1146.4794,
        1209.3063,
        1278.1102,
        1465.2921,
        1557.7494,
        1590.9565,
        1609.4994,
        1621.1909,
        1640.6102
      ],
      "groundAreaMeters2": 1089.35
    },
    "solarPanels": [
      {
        "center": {
          "latitude": 4.6560077,
          "longitude": -74.12885
        },
        "orientation": "PORTRAIT",
        "yearlyEnergyDcKwh": 653.14404,
        "segmentIndex": 12
      },
      /.../
    ]
    },
  "boundingBox": {
    "sw": {
      "latitude": 4.6554716,
      "longitude": -74.129243899999992
    },
    "ne": {
      "latitude": 4.6560513,
      "longitude": -74.128623900000008
    }
  },
  "imageryQuality": "BASE",
  "imageryProcessedDate": {
    "year": 2024,
    "month": 7,
    "day": 21
  }
}

Data layers

The dataLayers endpoint provides detailed solar information for a region surrounding a specified location. The endpoint returns 17 downloadable TIFF files, including a digital surface model (DSM), RGB composite layer (aerial imagery), and a mask layer that identifies the boundaries of the analysis, among others.

The following example shows the URL of a REST request to the dataLayers method:

https://solar.googleapis.com/v1/dataLayers:get?parameters

Include your request URL parameters that specify the following:

  • Latitude and longitude coordinates of the location
  • The radius (in meters) of the region surrounding the location
  • The minimum quality allowed in the results

To request experimental data, set the following parameters:

  • requiredQuality = BASE
  • experiments = EXPANDED_COVERAGE
curl -X GET "https://solar.googleapis.com/v1/dataLayers:get?location.latitude=4.655719&location.longitude=-74.128971&radiusMeters=100&requiredQuality=BASE&experiments=EXPANDED_COVERAGE&key=YOUR_API_KEY"

That request produces a JSON response in the form:

{
  "imageryDate": {
    "year": 2024,
    "month": 2,
    "day": 19
  },
  "imageryProcessedDate": {
    "year": 2024,
    "month": 7,
    "day": 21
  },
  "dsmUrl": "https://solar.googleapis.com/v1/geoTiff:get?id=YTYwZDUzYTMxNjVmMjFlYWNjZmMyYzcxYTNhNWQ2OWItZTM0ZWRjZTQwNTZjZWUyYTNiNWE2ZjU5OTVkYWJjNTM6RFNNOkJBU0U",
  "rgbUrl": "https://solar.googleapis.com/v1/geoTiff:get?id=MWU2NmYxNmU3M2JlYmY5NDJkZmVmMjQ0NDViMjFjYTgtZWVhYjRiN2U0YWJlNzM2Nzk1MzUxZTQ4YTgxNjZiM2M6UkdCOkJBU0U",
  "maskUrl": "https://solar.googleapis.com/v1/geoTiff:get?id=ZGU4NzhmNDg0YjE2OGYwYTdjN2EyYmVlMDQxYTM5NDMtNDk2NGQwNzBhMzAwYzBkYTEwZDNmYjgzNTk4ODkyY2I6TUFTSzpCQVNF",
  "annualFluxUrl": "https://solar.googleapis.com/v1/geoTiff:get?id=NmRiZDQ0NDFkNWE5NDU2Nzc2ZTU1Mzg0MDY0YzFhMWMtMDg2ZDMyZjVkYTMzMDhiZmI5NzM1MzY0YmRjZmFiM2I6QU5OVUFMX0ZMVVg6QkFTRQ",
  "monthlyFluxUrl": "https://solar.googleapis.com/v1/geoTiff:get?id=NTAyMDJkMTVmMjJiZGYyOTNiMDFhMWEzNDJkZjAwNTctZDRjMjY3ZjU1YjQ2ZjE4ZTNkNjE1YmU5NTlmOThlZjM6TU9OVEhMWV9GTFVYOkJBU0U",
  "hourlyShadeUrls": [
    "https://solar.googleapis.com/v1/geoTiff:get?id=NWNkZmM0NTcwYTE5ODQzMmI0MmQ1NDM4NzY4MTc5MzEtOWE0MTBjNDkwM2IxZjA0MmI1ZTNmNTg1NTY0MTNkZjI6SE9VUkxZX1NIQURFOkJBU0U",
    "https://solar.googleapis.com/v1/geoTiff:get?id=Y2YwNDY4MzQ1YzhkMjBlZjU5M2NiNDRmMmM0ODRiNTUtNjMwOWM2NDBjZmI5OTdkMDA3ZGQzOWY2YmI1ZTk2NWM6SE9VUkxZX1NIQURFOkJBU0U",
    /.../
  ],
  "imageryQuality": "BASE"
}

To make a request to the URL in the response, append your API key to the URL:

curl -X GET "https://solar.googleapis.com/v1/geoTiff:get?id=YTYwZDUzYTMxNjVmMjFlYWNjZmMyYzcxYTNhNWQ2OWItZTM0ZWRjZTQwNTZjZWUyYTNiNWE2ZjU5OTVkYWJjNTM6RFNNOkJBU0U&key=YOUR_API_KEY"

With the exception of the RGB layer, all TIFF files will display as blank images in image viewer applications. To view downloaded TIFF files, import them into a mapping application software, such as QGIS.

The full specification of this request and response is in the reference documentation.