Blazor interop for GoogleMap library
️ Blazor interop for Google Maps JavaScript API A powerful and easy-to-use Blazor library for integrating Google Maps into your Blazor WebAssembly and Blazor Server applications.
Install the package via NuGet Package Manager:
dotnet add package BlazorGoogleMaps
Or via NuGet Package Manager Console:
Install-Package BlazorGoogleMaps
Add BlazorGoogleMaps to your Program.cs:
builder.Services.AddBlazorGoogleMaps("YOUR_GOOGLE_API_KEY");
builder.Services.AddBlazorGoogleMaps(new GoogleMapsComponents.Maps.MapApiLoadOptions("YOUR_GOOGLE_API_KEY")
{
Version = "beta",
Libraries = "places,visualization,drawing,marker"
});
For more complex scenarios (e.g., loading keys asynchronously from a database):
builder.Services.AddScoped();
⚠️ Legacy Method (Not Recommended): Adding the script tag directly to your HTML is still supported but not recommended.
Add the required JavaScript files to your wwwroot/index.html (Blazor WASM) or _Host.cshtml/_HostLayout.cshtml (Blazor Server):
Optional: For marker clustering support, add:
Create a simple map component:
@page "/map"
@using GoogleMapsComponents
@using GoogleMapsComponents.Maps
Google Map
@code {
private GoogleMap? _map1;
private MapOptions _mapOptions = default!;
protected override void OnInitialized()
{
_mapOptions = new MapOptions()
{
Zoom = 13,
Center = new LatLngLiteral()
{
Lat = 13.505892,
Lng = 100.8162
},
MapTypeId = MapTypeId.Roadmap
};
}
private async Task AfterMapRender()
{
// Map is ready - you can perform additional initialization here
var bounds = await LatLngBounds.CreateAsync(_map1!.JsRuntime);
}
}
Render interactive Blazor components as markers (requires Google Maps v=beta and a MapId):
…
The Maps Static API returns a map as an ordinary image. No JavaScript is loaded and no interop object is created, which makes it a good fit for thumbnails, previews, e-mails, print views and pages that must stay lightweight. The trade-off is that the result is a picture: it cannot be panned or zoomed.
@page "/static-map"
@using GoogleMapsComponents.Maps
@using GoogleMapsComponents.Maps.StaticMaps
@code {
private StaticMapOptions _options = new()
{
Center = new LatLngLiteral(13.505892, 100.8162),
Zoom = 13,
Width = 600,
Height = 400,
MapType = MapTypeId.Roadmap
};
}
Markers, paths and polygons are added through the options. Locations accept either coordinates or a geocodable
address, and locations that share a style belong in a single StaticMapMarker so that the URL stays short:
…
To build a URL outside of a component — to embed a map in an e-mail, a PDF or a report — inject
StaticMapService, which is registered by AddBlazorGoogleMaps and uses the same API key as the rest of the
library:
@inject StaticMapService StaticMaps
var url = await StaticMaps.GetUrlAsync(options);
EncodedPolyline accepts an already encoded polyline, so the OverviewPolyline of a route returned by the
Directions API can be drawn on a static map directly. PolylineEncoder encodes and decodes those values.
Requests may optionally be signed. Signing needs the URL signing secret, which must never be shipped to a
browser, so StaticMapUrlSigner.Sign and StaticMapService.GetSignedUrlAsync belong in server-side code only.
Explore interactive examples and learn more features:
The server-side demos include the most up-to-date examples covering:
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License.
Happy Mapping! ️
No open issues yet, or sync has not completed.