2 changed files with 190 additions and 0 deletions
@ -0,0 +1,95 @@ |
|||||
|
# LINGYUN.Abp.Location |
||||
|
|
||||
|
## Introduction |
||||
|
|
||||
|
`LINGYUN.Abp.Location` is a location service foundation module that provides geographic location-related functionality, including geocoding (forward/reverse), distance calculation, and more. |
||||
|
|
||||
|
## Features |
||||
|
|
||||
|
* Geocoding and Reverse Geocoding |
||||
|
* Location distance calculation (based on Google algorithm, error <0.2m) |
||||
|
* Location offset calculation |
||||
|
* Support for POI (Points of Interest) and road information |
||||
|
* Extensible location resolution providers |
||||
|
|
||||
|
## Installation |
||||
|
|
||||
|
```bash |
||||
|
dotnet add package LINGYUN.Abp.Location |
||||
|
``` |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
1. Add `[DependsOn(typeof(AbpLocationModule))]` to your module class. |
||||
|
|
||||
|
```csharp |
||||
|
[DependsOn(typeof(AbpLocationModule))] |
||||
|
public class YourModule : AbpModule |
||||
|
{ |
||||
|
// ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
2. Inject and use the location resolution service: |
||||
|
|
||||
|
```csharp |
||||
|
public class YourLocationService |
||||
|
{ |
||||
|
private readonly ILocationResolveProvider _locationProvider; |
||||
|
|
||||
|
public YourLocationService(ILocationResolveProvider locationProvider) |
||||
|
{ |
||||
|
_locationProvider = locationProvider; |
||||
|
} |
||||
|
|
||||
|
public async Task<GecodeLocation> GeocodeAsync(string address) |
||||
|
{ |
||||
|
return await _locationProvider.GeocodeAsync(address); |
||||
|
} |
||||
|
|
||||
|
public async Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng) |
||||
|
{ |
||||
|
return await _locationProvider.ReGeocodeAsync(lat, lng); |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## Advanced Usage |
||||
|
|
||||
|
### 1. Distance Calculation |
||||
|
|
||||
|
```csharp |
||||
|
// Calculate distance between two locations |
||||
|
var location1 = new Location { Latitude = 39.9042, Longitude = 116.4074 }; // Beijing |
||||
|
var location2 = new Location { Latitude = 31.2304, Longitude = 121.4737 }; // Shanghai |
||||
|
double distance = Location.CalcDistance(location1, location2); // Returns distance in meters |
||||
|
``` |
||||
|
|
||||
|
### 2. Calculate Location Offset Range |
||||
|
|
||||
|
```csharp |
||||
|
var location = new Location { Latitude = 39.9042, Longitude = 116.4074 }; |
||||
|
// Calculate offset range for specified distance (meters) |
||||
|
var position = Location.CalcOffsetDistance(location, 1000); // 1km range |
||||
|
``` |
||||
|
|
||||
|
### 3. Custom Location Resolution Provider |
||||
|
|
||||
|
```csharp |
||||
|
public class CustomLocationProvider : ILocationResolveProvider |
||||
|
{ |
||||
|
public async Task<GecodeLocation> GeocodeAsync(string address) |
||||
|
{ |
||||
|
// Implement geocoding logic |
||||
|
} |
||||
|
|
||||
|
public async Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng) |
||||
|
{ |
||||
|
// Implement reverse geocoding logic |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## Links |
||||
|
|
||||
|
* [中文文档](./README.md) |
||||
@ -0,0 +1,95 @@ |
|||||
|
# LINGYUN.Abp.Location |
||||
|
|
||||
|
## 介绍 |
||||
|
|
||||
|
`LINGYUN.Abp.Location` 是一个位置服务基础模块,提供了地理位置相关的功能,包括地理编码(正向/反向)、距离计算等功能。 |
||||
|
|
||||
|
## 功能 |
||||
|
|
||||
|
* 地理编码(Geocoding)和反向地理编码(Reverse Geocoding) |
||||
|
* 位置距离计算(基于Google算法,误差<0.2米) |
||||
|
* 位置偏移量计算 |
||||
|
* 支持POI(兴趣点)和道路信息 |
||||
|
* 可扩展的位置解析提供程序 |
||||
|
|
||||
|
## 安装 |
||||
|
|
||||
|
```bash |
||||
|
dotnet add package LINGYUN.Abp.Location |
||||
|
``` |
||||
|
|
||||
|
## 使用 |
||||
|
|
||||
|
1. 添加 `[DependsOn(typeof(AbpLocationModule))]` 到你的模块类上。 |
||||
|
|
||||
|
```csharp |
||||
|
[DependsOn(typeof(AbpLocationModule))] |
||||
|
public class YourModule : AbpModule |
||||
|
{ |
||||
|
// ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
2. 注入并使用位置解析服务: |
||||
|
|
||||
|
```csharp |
||||
|
public class YourLocationService |
||||
|
{ |
||||
|
private readonly ILocationResolveProvider _locationProvider; |
||||
|
|
||||
|
public YourLocationService(ILocationResolveProvider locationProvider) |
||||
|
{ |
||||
|
_locationProvider = locationProvider; |
||||
|
} |
||||
|
|
||||
|
public async Task<GecodeLocation> GeocodeAsync(string address) |
||||
|
{ |
||||
|
return await _locationProvider.GeocodeAsync(address); |
||||
|
} |
||||
|
|
||||
|
public async Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng) |
||||
|
{ |
||||
|
return await _locationProvider.ReGeocodeAsync(lat, lng); |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## 高级用法 |
||||
|
|
||||
|
### 1. 距离计算 |
||||
|
|
||||
|
```csharp |
||||
|
// 计算两个位置之间的距离 |
||||
|
var location1 = new Location { Latitude = 39.9042, Longitude = 116.4074 }; // 北京 |
||||
|
var location2 = new Location { Latitude = 31.2304, Longitude = 121.4737 }; // 上海 |
||||
|
double distance = Location.CalcDistance(location1, location2); // 返回单位:米 |
||||
|
``` |
||||
|
|
||||
|
### 2. 计算位置偏移范围 |
||||
|
|
||||
|
```csharp |
||||
|
var location = new Location { Latitude = 39.9042, Longitude = 116.4074 }; |
||||
|
// 计算指定距离(米)的偏移范围 |
||||
|
var position = Location.CalcOffsetDistance(location, 1000); // 1公里范围 |
||||
|
``` |
||||
|
|
||||
|
### 3. 自定义位置解析提供程序 |
||||
|
|
||||
|
```csharp |
||||
|
public class CustomLocationProvider : ILocationResolveProvider |
||||
|
{ |
||||
|
public async Task<GecodeLocation> GeocodeAsync(string address) |
||||
|
{ |
||||
|
// 实现地理编码逻辑 |
||||
|
} |
||||
|
|
||||
|
public async Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng) |
||||
|
{ |
||||
|
// 实现反向地理编码逻辑 |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## 链接 |
||||
|
|
||||
|
* [English document](./README.EN.md) |
||||
Loading…
Reference in new issue