An open API service indexing awesome lists of open source software.

https://github.com/technobre/powerutils.geolocation

Library to work with geographic coordinates
https://github.com/technobre/powerutils.geolocation

c-sharp dotnet geolocation globalization

Last synced: 5 months ago
JSON representation

Library to work with geographic coordinates

Awesome Lists containing this project

README

          

# PowerUtils.Geolocation

![Logo](https://raw.githubusercontent.com/TechNobre/PowerUtils.Geolocation/main/assets/logo/logo_128x128.png)

***Library to work with geographic coordinates***

![Tests](https://github.com/TechNobre/PowerUtils.Geolocation/actions/workflows/tests.yml/badge.svg)
[![Mutation tests](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2FTechNobre%2FPowerUtils.Geolocation%2Fmain)](https://dashboard.stryker-mutator.io/reports/github.com/TechNobre/PowerUtils.AspNetCore.ErrorHandler/main)

[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.Geolocation&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.Geolocation)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.Geolocation&metric=coverage)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.Geolocation)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.Geolocation&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.Geolocation)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.Geolocation&metric=bugs)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.Geolocation)

[![NuGet](https://img.shields.io/nuget/v/PowerUtils.Geolocation.svg)](https://www.nuget.org/packages/PowerUtils.Geolocation)
[![Nuget](https://img.shields.io/nuget/dt/PowerUtils.Geolocation.svg)](https://www.nuget.org/packages/PowerUtils.Geolocation)
[![License: MIT](https://img.shields.io/github/license/TechNobre/PowerUtils.Geolocation.svg)](https://github.com/TechNobre/PowerUtils.Geolocation/blob/main/LICENSE)

- [Support to ](#support-to-)
- [How to use ](#how-to-use-)
- [Install NuGet package](#install-nuget-package)
- [Exceptions ](#exceptions-)
- [Types ](#types-)
- [CardinalDirection ](#cardinaldirection-)
- [DistanceUnit ](#distanceunit-)
- [GeographicalOrientation ](#geographicalorientation-)
- [Extensions ](#extensions-)
- [LengthConversionExtensions ](#lengthconversionextensions-)
- [.FromKilometerToMeter() ](#fromkilometertometer-)
- [.FromKilometerToMile() ](#fromkilometertomile-)
- [.FromKilometerTo() ](#fromkilometerto-)
- [.FromMeterToKilometer() ](#frommetertokilometer-)
- [.FromMeterToMile() ](#frommetertomile-)
- [.FromMeterTo() ](#frommeterto-)
- [.FromMileToMeter() ](#frommiletometer-)
- [.FromMileToKilometer() ](#frommiletokilometer-)
- [.FromMileTo() ](#frommileto-)
- [ConversionExtensions ](#conversionextensions-)
- [.GetGeographicalOrientation() ](#getgeographicalorientation-)
- [.ToRadian() ](#toradian-)
- [.ToDegree() ](#todegree-)
- [.ToDegree() ](#todegree--1)
- [.ToDDPoint() ](#toddpoint-)
- [Objects ](#objects-)
- [GeoDDCoordinate ](#geoddcoordinate-)
- [Deconstruct ](#deconstruct-)
- [.Clone() ](#clone-)
- [Comparisons ](#comparisons-)
- [Implicits ](#implicits-)
- [Parse ](#parse-)
- [Distance ](#distance-)
- [GeoJSON ](#geojson-)
- [Implicits ](#implicits--1)
- [Guard ](#guard-)
- [GuardGeolocation.Against.Latitude() ](#guardgeolocationagainstlatitude-)
- [GuardGeolocation.Against.Longitude() ](#guardgeolocationagainstlongitude-)
- [Contribution](#contribution)

## Support to
- .NET 10.0
- .NET 9.0
- .NET 8.0
- .NET 7.0
- .NET 6.0

## How to use

### Install NuGet package
This package is available through Nuget Packages: https://www.nuget.org/packages/PowerUtils.Geolocation

**Nuget**
```bash
Install-Package PowerUtils.Geolocation
```

**.NET CLI**
```
dotnet add package PowerUtils.Geolocation
```

### Exceptions
`namespace PowerUtils.Geolocation.Exceptions`

- `InvalidCoordinateException(coordinate);`
- `MinLatitudeException(coordinate);`
- `MaxLatitudeException(coordinate);`
- `MinLongitudeException(coordinate);`
- `MaxLongitudeException(coordinate);`

### Types
`namespace PowerUtils.Geolocation.Types`

#### CardinalDirection

```csharp
public enum CardinalDirection
{
North,
South,
East,
West,
}
```

#### DistanceUnit

```csharp
public enum DistanceUnit
{
kilometer,
Meter,
Mile
}
```

#### GeographicalOrientation

```csharp
public enum GeographicalOrientation
{
Latitude,
Longitude
}
```

### Extensions
`namespace PowerUtils.Geolocation`

#### LengthConversionExtensions

#### .FromKilometerToMeter()
Convert kilometers to meters (int, uint, long, ulong, float, double, decimal)

```csharp
// result = 45_000
var result = 45.FromKilometerToMeter();
```

#### .FromKilometerToMile()
Convert kilometers to miles (float, double, decimal)

```csharp
// result = 137.472_122
var result = (221.24).FromKilometerToMile();
```

#### .FromKilometerTo()
Converting (double, decimal, float) numbers in kilometers to a new unit

```csharp
// result = 20_000
var result = 20.FromKilometerTo(DistanceUnit.Meter);
```

#### .FromMeterToKilometer()
Convert meters to kilometers (int, uint, long, ulong, float, double, decimal)

```csharp
// result = 45
var result = (45_000).FromMeterToKilometer();
```

#### .FromMeterToMile()
Convert meters to kilometers (float, double, decimal)

```csharp
// result = 7.098204899547
var result = (11_423.457).FromMeterToMile();
```

#### .FromMeterTo()
Converting (double, decimal, float) numbers in meters to a new unit

```csharp
// result = 0.002
var result = 2.FromMeterTo(DistanceUnit.kilometer);
```

#### .FromMileToMeter()
Convert miles to meters (float, double, decimal)

```csharp
// result = 356_050.3816
var result = (221.24).FromMileToMeter();
```

#### .FromMileToKilometer()
Convert miles to kilometers (float, double, decimal)

```csharp
// result = 356.05038160000004
var result = (221.24).FromMileToKilometer();
```

#### .FromMileTo()
Converting (double, decimal, float) numbers in miles to a new unit

```csharp
// result = 32_18.68
var result = 2.FromMileTo(DistanceUnit.kilometer);
```

#### ConversionExtensions

##### .GetGeographicalOrientation()
Get the geographical orientation from a specific cardinal direction

```csharp
// result = GeographicalOrientation.Longitude
var result = CardinalDirection.North.GetGeographicalOrientation();
```

##### .ToRadian()
Convert degree to radian (PI / 180)

```csharp
// result = 0.19198621771937624
var result = 11.ToRadian();
```

##### .ToDegree()
Convert radian to degree (180 / PI)

```csharp
// result = 11
var result = (0.19198621771937624).ToDegree();
```

##### .ToDegree()
Convert radian to degree (180 / PI)

```csharp
// result = 11
var result = (0.19198621771937624).ToDegree();
```

##### .ToDDPoint()
Convert decimal degree point (string) to decimal degree point (double)

```csharp
// result = -8.668_173
var result = "-8,668173".ToDDPoint();
```

### Objects
`namespace PowerUtils.Geolocation`

#### GeoDDCoordinate
Decimal degree coordinate

```csharp
var coordinate = new GeoDDCoordinate(81.54, -54.1272);
(var latitude, var longitude) = coordinates;
```

##### Deconstruct
Deconstruct GeoDDCoordinate to double latitude and double longitude

```csharp
(var latitude, var longitude) = coordinates;
```

##### .Clone()
Create a new object 'GeoDDCoordinate' with the same data

```csharp
(var newCoordinate = coordinates.Clone();
```

##### Comparisons

```csharp
GeoDDCoordinate left = new(1.54, 54.1272);
GeoDDCoordinate right = new(1.54, 54.1272);

// result1 = true
var result1 = left == right;

// result2 = false
var result2 = left != right;

// result3 = true
var result3 = left.Equals(right);
```

##### Implicits

```csharp
var text1 = "-12.51214,14.1272";

var coordinate = (GeoDDCoordinate)text1;

var text2 = (string)coordinate;
```

##### Parse

```csharp
var coordinate1 = GeoDDCoordinate.Parse("12,152", "-8,12");
var coordinate2 = GeoDDCoordinate.Parse("81.54 , -54.1272");

var result3 = GeoDDCoordinate.TryParse("12,152", "-8,12", out var coordinate3);
var result4 = GeoDDCoordinate.TryParse("81.54 , -54.1272", out var coordinate4);
```

##### Distance

```csharp
// distance1 = 189143
var distance1 = GeoDDCoordinate.Distance(37.165611, -8.545786, 38.737545, -9.370047, 0);

// distance2 = 18542.719416538552
var distance2 = GeoDDCoordinate.PreciseDistance(37.068673, -7.939493, 37.098708, -8.145107);

GeoDDCoordinate left = new(37.068673, -7.939493);
GeoDDCoordinate right = new(37.098708, -8.145107);

// distance3 = 18543
var distance3 = left.Distance(right);
```

#### GeoJSON

```csharp
var coordinate = new GeoDDCoordinate(9.1, 12);

var result = new GeoJSON(coordinate);
```

##### Implicits

```csharp
var coordinate = new GeoDDCoordinate(9.1, 12);

var geoJSON = (GeoJSON)coordinate;

var result = (GeoDDCoordinate)geoJSON;
```

### Guard

```csharp
var latitude = GuardGeolocation.Against.Latitude(degree);

var longitude = GuardGeolocation.Against.Longitude(degree);
```

#### GuardGeolocation.Against.Latitude()
- Exception
- MinLatitudeException
- MaxLatitudeException

#### GuardGeolocation.Against.Longitude()
- Exception
- MinLongitudeException
- MaxLongitudeException

## Contribution

If you have any questions, comments, or suggestions, please open an [issue](https://github.com/TechNobre/PowerUtils.Geolocation/issues/new/choose) or create a [pull request](https://github.com/TechNobre/PowerUtils.Geolocation/compare)