107 lines
2.9 KiB
Markdown
107 lines
2.9 KiB
Markdown
# Svrnty.GeoManagement.Google
|
|
|
|
Google Geocoding API provider implementation for the Svrnty.GeoManagement library.
|
|
|
|
## Installation
|
|
|
|
Add reference to this project or install via NuGet (when published).
|
|
|
|
## Configuration
|
|
|
|
### Using appsettings.json
|
|
|
|
```json
|
|
{
|
|
"GoogleGeoManagement": {
|
|
"ApiKey": "your-google-api-key-here",
|
|
"Language": "en",
|
|
"Region": "us"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Register in Dependency Injection
|
|
|
|
```csharp
|
|
using Svrnty.GeoManagement.Google.Extensions;
|
|
|
|
// In your Program.cs or Startup.cs
|
|
builder.Services.AddGoogleGeoManagement(
|
|
builder.Configuration.GetSection("GoogleGeoManagement"));
|
|
```
|
|
|
|
### Manual Configuration
|
|
|
|
```csharp
|
|
builder.Services.AddGoogleGeoManagement(options =>
|
|
{
|
|
options.ApiKey = "your-google-api-key-here";
|
|
options.Language = "en";
|
|
options.Region = "us";
|
|
});
|
|
```
|
|
|
|
## Usage
|
|
|
|
```csharp
|
|
using Svrnty.GeoManagement.Abstractions.Abstractions;
|
|
using Svrnty.GeoManagement.Abstractions.Models;
|
|
|
|
public class MyService
|
|
{
|
|
private readonly IGeoManagementProvider _geoProvider;
|
|
|
|
public MyService(IGeoManagementProvider geoProvider)
|
|
{
|
|
_geoProvider = geoProvider;
|
|
}
|
|
|
|
public async Task Example()
|
|
{
|
|
// Forward geocoding - address to coordinates
|
|
var address = new Address(
|
|
Line1: "1600 Amphitheatre Parkway",
|
|
Line2: null,
|
|
City: "Mountain View",
|
|
Subdivision: "CA",
|
|
PostalCode: "94043",
|
|
Country: "US",
|
|
Location: null,
|
|
Note: null);
|
|
|
|
var geoPoint = await _geoProvider.GetGeoPointAsync(address);
|
|
Console.WriteLine($"Coordinates: {geoPoint?.Latitude}, {geoPoint?.Longitude}");
|
|
|
|
// Reverse geocoding - coordinates to address
|
|
var location = new GeoPoint(37.4224764, -122.0842499);
|
|
var foundAddress = await _geoProvider.ReverseGeocodeAsync(location);
|
|
Console.WriteLine($"Address: {foundAddress?.GetFormattedAddress()}");
|
|
|
|
// Normalize address
|
|
var normalized = await _geoProvider.NormalizeAddressAsync(address);
|
|
Console.WriteLine($"Normalized: {normalized?.GetFormattedAddress()}");
|
|
|
|
// Normalize from string
|
|
var normalizedFromString = await _geoProvider.NormalizeAddressAsync(
|
|
"1600 Amphitheatre Parkway, Mountain View, CA");
|
|
Console.WriteLine($"Normalized: {normalizedFromString?.GetFormattedAddress()}");
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration Options
|
|
|
|
- **ApiKey** (required): Your Google Maps API key
|
|
- **Language** (optional): Language code for results (e.g., "en", "fr", "de")
|
|
- **Region** (optional): Region code for biasing results (e.g., "us", "uk", "ca")
|
|
|
|
## Requirements
|
|
|
|
- .NET 8.0
|
|
- Google Maps API key with Geocoding API enabled
|
|
- Internet connection for API calls
|
|
|
|
## Error Handling
|
|
|
|
The provider returns `null` for operations that fail (e.g., invalid address, API errors, network issues). All errors are logged using `ILogger<GeoManagementGoogleProvider>`.
|