This is a TypeScript package for calling the new Solar API endpoints, including full types for all query inputs and body responses.
npm install @nora-soderlund/google-maps-solar-api
import { findClosestBuildingInsights } from "@nora-soderlund/google-maps-solar-api";
const buildingInsights = await findClosestBuildingInsights("API_KEY", {
location: {
latitude: 57.70936,
longitude: 11.97345
}
});
import { getDataLayers } from "@nora-soderlund/google-maps-solar-api";
const dataLayers = await getDataLayers("API_KEY", {
location: coordinate,
radiusMeters: 100,
view: "IMAGERY_AND_ANNUAL_FLUX_LAYERS"
});
You can use your own Solar API proxy to implement this package in your clients and apply rate limiting or session authentication on your end.
Simply pass a URL object instead of a string in replacement of the API key. Only the host will be used, the protocol must be HTTPS.
import { findClosestBuildingInsights } from "@nora-soderlund/google-maps-solar-api";
const proxyUrl = new URL("https://my-solar-api-proxy.com");
const buildingInsights = await findClosestBuildingInsights(proxyUrl, {
location: {
latitude: 57.70936,
longitude: 11.97345
}
});
Subsequent request will be sent to e.g. https://my-solar-api-proxy.com/v1/buildingInsights:findClosest?...
.
See my developer blog article for an example of using the Solar API data layers with a dynamic Google Maps instance:
https://nora-soderlund.com/articles/integrating-the-new-solar-api-in-google-maps
Another example of visualizing potential solar panel placements in dynamic maps:
https://nora-soderlund.com/articles/visualizing-potential-solar-panel-placements-in-google-maps
findClosestBuildingInsights(apiKeyOrProxyUrl: string | URL, query: FindClosestBuildingInsightsParameters): Promise<BuildingInsights>
Returns a BuildingInsights object or throws a generic Error if the request failed.
See buildingInsights.findClosest on the Solar API reference.
getDataLayers(apiKeyOrProxyUrl: string | URL, query: GetDataLayersParameters): Promise<DataLayers>
Returns a DataLayers object or throws a generic Error if the request failed.
See dataLayers.get on the Solar API reference.
Returns a raw ArrayBuffer object of the GeoTIFF file or throws a generic Error if the request failed.
See geoTiff.get on the Solar API reference.
getDataLayersForBounds(bounds: LatLngBox, pixelSizeMeters: number, paddingMeters: number = 0): DataLayerBounds
Used for getting a connected area coverage. Does not perform any asynchronous requests. Returns a DataLayerBounds object.
dataLayerView: DataLayerView;
The highest supported data layer view, for radius meters over 175m, the DataLayerView in the request must not include monthly flux or hourly shade.
tiles: LatLng[];
The tiles that make up the generated bounds, use with radiusMetersPerTile
radiusMetersPerTile: number;
The radius in meters for each tile.
bounds: LatLngBox;
The generated bounds for the new tiles.
horizontalTiles: number;
verticalTiles: number;
The horizontal and vertical tiles count.