| name | geonorge |
| description | Norwegian geographic data — address search, reverse geocoding, county (fylke) and municipality (kommune) lookup using AT.Common.GeoNorge. Use this skill when finding an address from a text query, finding the closest address to coordinates, resolving Norwegian counties/municipalities, or finding which municipality contains a geographic point. |
| license | MIT |
| metadata | {"domain":"backend","tags":"geonorge geography address geocoding coordinates fylke kommune norway dotnet"} |
GeoNorge Skill — Arbeidstilsynet/dotnet-common
Arbeidstilsynet.Common.GeoNorge (AT.Common.GeoNorge.Publish) wraps the GeoNorge Adresser API and Fylker og Kommuner API in strongly-typed .NET clients.
Installation
dotnet add package Arbeidstilsynet.Common.GeoNorge
Dependency Injection Setup
builder.Services.AddGeoNorge();
An optional GeoNorgeConfig can be passed to override the base URL (default https://ws.geonorge.no/):
builder.Services.AddGeoNorge(new GeoNorgeConfig
{
BaseUrl = "https://custom-geonorge-proxy.example.com/"
});
This registers IAddressSearch and IFylkeKommuneApi.
Address Search (IAddressSearch)
Text search
Find addresses matching a free-text query:
public class AddressService(IAddressSearch addressSearch)
{
public async Task Example()
{
var result = await addressSearch.SearchAddresses(new TextSearchQuery
{
SearchTerm = "Karl Johans gate 1, Oslo"
});
var location = await addressSearch.QuickSearchLocation(new TextSearchQuery
{
SearchTerm = "Karl Johans gate 1, Oslo"
});
}
}
Point search (reverse geocoding)
Find addresses within a radius of given coordinates:
var result = await addressSearch.SearchAddressesByPoint(new PointSearchQuery
{
Latitude = 59.9139,
Longitude = 10.7522,
RadiusInMeters = 1000
});
var closest = await addressSearch.GetClosestAddress(new PointSearchQuery
{
Latitude = 59.9139,
Longitude = 10.7522,
RadiusInMeters = 1000
});
Pagination
Both search methods accept an optional Pagination parameter:
var result = await addressSearch.SearchAddresses(
new TextSearchQuery { SearchTerm = "Brannfjordveien" },
new Pagination { PageIndex = 0, PageSize = 10 }
);
County and Municipality (IFylkeKommuneApi)
public class LocationService(IFylkeKommuneApi fylkeKommuneApi)
{
public async Task Example()
{
var fylker = await fylkeKommuneApi.GetFylker();
var kommuner = await fylkeKommuneApi.GetKommuner();
var fylkerFull = await fylkeKommuneApi.GetFylkerFullInfo();
var oslo = await fylkeKommuneApi.GetFylkeByNumber("03");
var osloKommune = await fylkeKommuneApi.GetKommuneByNumber("0301");
var kommune = await fylkeKommuneApi.GetKommuneByPoint(new PointQuery
{
Latitude = 59.9139,
Longitude = 10.7522
});
}
}
Key Model Types
| Type | Description |
|---|
TextSearchQuery | Free-text address search — SearchTerm (required) plus optional filters: FuzzySearch, Adressenavn, Poststed, Postnummer, Kommunenummer, Gardsnummer, Bruksnummer |
PointSearchQuery | Coordinates + radius for reverse geocoding |
PointQuery | Coordinates (Latitude, Longitude) + Epsg (default 4326) for fylke/kommune lookup |
Address | Full address record (street, number, municipality, coordinates) |
Location | Latitude + Longitude point + optional Epsg coordinate system code |
Pagination | PageIndex (page index) + PageSize (page size) |
PaginationResult<T> | Elements + paging metadata |
Fylke | Norwegian county |
Kommune | Norwegian municipality |
Extension Methods
QuickSearchLocation is a convenience method on IAddressSearch that returns the Location (lat/lon) of the first search result:
Location? location = await addressSearch.QuickSearchLocation(
new TextSearchQuery { SearchTerm = "Youngstorget, Oslo" }
);
Returns null if no address is found.
Adding GeoNorge — Checklist
dotnet add package Arbeidstilsynet.Common.GeoNorge
- Register with
services.AddGeoNorge()
- Inject
IAddressSearch for address/geocoding operations
- Inject
IFylkeKommuneApi for county/municipality operations
- Handle
null returns (network errors or no results)