15 KiB
高德地图集成
**本文档引用的文件** - [AbpAmapLocationModule.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AbpAmapLocationModule.cs) - [AmapLocationOptions.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapLocationOptions.cs) - [AmapHttpRequestClient.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapHttpRequestClient.cs) - [AmapLocationResolveProvider.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapLocationResolveProvider.cs) - [AmapHttpResponse.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapHttpResponse.cs) - [AmapPositiveHttpRequestParamter.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapPositiveHttpRequestParamter.cs) - [AmapInverseHttpRequestParamter.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AmapInverseHttpRequestParamter.cs) - [Location.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/Location.cs) - [GecodeLocation.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/GecodeLocation.cs) - [ReGeocodeLocation.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/ReGeocodeLocation.cs) - [Poi.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/Poi.cs) - [Road.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/Road.cs) - [ILocationResolveProvider.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location/LINGYUN/Abp/Location/ILocationResolveProvider.cs)目录
简介
本文档详细说明了如何在ABP框架中集成高德地图服务,包括API密钥配置、地理编码和逆地理编码功能的实现。文档涵盖了高德地图API的调用限制、请求频率控制、错误处理机制以及API调用失败时的降级策略。同时提供了实际代码示例,展示在业务逻辑中调用高德地图服务的方法,包括HTTP客户端配置、请求参数构造、响应数据解析等细节,并说明了高德地图服务与其他位置服务的兼容性设计。
项目结构
高德地图集成模块位于aspnet-core/framework/common/LINGYUN.Abp.Location.Amap目录下,是ABP框架位置服务的一部分。该模块提供了对高德地图API的封装,实现了地理编码和逆地理编码功能。
graph TD
A[高德地图集成模块] --> B[AbpAmapLocationModule]
A --> C[AmapLocationOptions]
A --> D[AmapHttpRequestClient]
A --> E[AmapLocationResolveProvider]
A --> F[AmapHttpResponse]
A --> G[AmapPositiveHttpRequestParamter]
A --> H[AmapInverseHttpRequestParamter]
I[位置服务基类] --> J[Location]
I --> K[GecodeLocation]
I --> L[ReGeocodeLocation]
I --> M[Poi]
I --> N[Road]
I --> O[ILocationResolveProvider]
图示来源
- AbpAmapLocationModule.cs
- AmapLocationOptions.cs
- AmapHttpRequestClient.cs
- Location.cs
- GecodeLocation.cs
- ReGeocodeLocation.cs
章节来源
- AbpAmapLocationModule.cs
- AmapLocationOptions.cs
核心组件
高德地图集成模块的核心组件包括配置选项、HTTP客户端、请求参数类、响应处理类和位置解析提供程序。这些组件共同实现了对高德地图API的封装和调用。
章节来源
- AmapLocationOptions.cs
- AmapHttpRequestClient.cs
- AmapLocationResolveProvider.cs
架构概述
高德地图集成模块采用分层架构设计,从上到下分别为模块层、服务层、HTTP客户端层和数据模型层。模块层负责注册服务和配置,服务层提供位置解析接口,HTTP客户端层负责与高德地图API通信,数据模型层定义了请求和响应的数据结构。
graph TD
A[应用层] --> B[ILocationResolveProvider]
B --> C[AmapLocationResolveProvider]
C --> D[AmapHttpRequestClient]
D --> E[高德地图API]
F[配置] --> G[AmapLocationOptions]
G --> C
G --> D
H[数据模型] --> I[AmapPositiveHttpRequestParamter]
H --> J[AmapInverseHttpRequestParamter]
H --> K[AmapHttpResponse]
H --> L[GecodeLocation]
H --> M[ReGeocodeLocation]
图示来源
- AbpAmapLocationModule.cs
- AmapLocationResolveProvider.cs
- AmapHttpRequestClient.cs
详细组件分析
配置选项分析
高德地图集成模块通过AmapLocationOptions类配置API密钥和其他选项。API密钥是调用高德地图API的必要凭证,必须在应用程序配置中正确设置。
classDiagram
class AmapLocationOptions {
+string ApiKey
+bool VisableErrorToClient
}
图示来源
- AmapLocationOptions.cs
章节来源
- AmapLocationOptions.cs
HTTP客户端分析
AmapHttpRequestClient类负责与高德地图API进行HTTP通信。它使用HttpClientFactory创建HTTP客户端,并通过配置的API密钥构造请求URL。客户端实现了正向地理编码和逆向地理编码的API调用。
sequenceDiagram
participant Client as 业务逻辑
participant Provider as AmapLocationResolveProvider
participant Client as AmapHttpRequestClient
participant API as 高德地图API
Client->>Provider : GeocodeAsync(address, city)
Provider->>Client : PositiveAsync(requestParamter)
Client->>API : GET /v3/geocode/geo?key=xxx&address=xxx
API-->>Client : 响应数据
Client-->>Provider : GecodeLocation
Provider-->>Client : GecodeLocation
Client->>Provider : ReGeocodeAsync(lat, lng, radius)
Provider->>Client : InverseAsync(requestParamter)
Client->>API : GET /v3/geocode/regeo?key=xxx&location=xxx
API-->>Client : 响应数据
Client-->>Provider : ReGeocodeLocation
Provider-->>Client : ReGeocodeLocation
图示来源
- AmapLocationResolveProvider.cs
- AmapHttpRequestClient.cs
章节来源
- AmapHttpRequestClient.cs
请求参数分析
高德地图集成模块定义了两个请求参数类:AmapPositiveHttpRequestParamter用于正向地理编码,AmapInverseHttpRequestParamter用于逆向地理编码。这些类封装了API调用所需的所有参数。
classDiagram
class AmapPositiveHttpRequestParamter {
+string Address
+string City
+bool Batch
+string Sig
+string Output
}
class AmapInverseHttpRequestParamter {
+Location[] Locations
+string PoiType
+short Radius
+string Extensions
+bool Batch
+sbyte? RoadLevel
+string Sig
+string Output
+sbyte HomeOrCorp
}
class Location {
+double Latitude
+double Longitude
}
AmapInverseHttpRequestParamter --> Location : 包含
图示来源
- AmapPositiveHttpRequestParamter.cs
- AmapInverseHttpRequestParamter.cs
- Location.cs
章节来源
- AmapPositiveHttpRequestParamter.cs
- AmapInverseHttpRequestParamter.cs
响应处理分析
AmapHttpResponse类是所有高德地图API响应的基类,定义了标准的响应结构,包括状态码、状态说明和错误码。子类如AmapPositiveHttpResponse和AmapInverseLocationResponse继承了这些属性并添加了特定于API的响应数据。
classDiagram
class AmapHttpResponse {
+int Status
+string Info
+string InfoCode
+bool IsSuccess()
+ILocalizableString GetErrorMessage()
}
class AmapPositiveHttpResponse {
+int Count
+Geocode[] Geocodes
}
class AmapInverseLocationResponse {
+Regeocode Regeocode
}
class Geocode {
+string Location
+string Level
}
class Regeocode {
+AddressComponent AddressComponent
+string Address
}
class AddressComponent {
+string Province
+string City
+string District
+string StreetNumber
+string TownShip
+string AdCode
+string Country
}
AmapHttpResponse <|-- AmapPositiveHttpResponse
AmapHttpResponse <|-- AmapInverseLocationResponse
AmapPositiveHttpResponse --> Geocode
AmapInverseLocationResponse --> Regeocode
Regeocode --> AddressComponent
图示来源
- AmapHttpResponse.cs
- AmapHttpRequestClient.cs
章节来源
- AmapHttpResponse.cs
位置解析提供程序分析
AmapLocationResolveProvider类实现了ILocationResolveProvider接口,提供了正向和逆向地理编码的服务。它依赖于AmapHttpRequestClient来执行实际的API调用,并将结果转换为统一的位置数据模型。
classDiagram
class ILocationResolveProvider {
+Task<IPGecodeLocation> IPGeocodeAsync(string ipAddress)
+Task<GecodeLocation> GeocodeAsync(string address, string city)
+Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng, int radius)
}
class AmapLocationResolveProvider {
-AmapHttpRequestClient AmapHttpRequestClient
+Task<ReGeocodeLocation> ReGeocodeAsync(double lat, double lng, int radius)
+Task<GecodeLocation> GeocodeAsync(string address, string city)
}
class GecodeLocation {
+double Longitude
+double Latitude
+string Level
+IDictionary<string, object> Additionals
+void AddAdditional(string key, object value)
}
class ReGeocodeLocation {
+string Address
+string FormattedAddress
+string Country
+string Province
+string City
+string District
+string Street
+string AdCode
+string Town
+string Number
+IEnumerable<Poi> Pois
+IEnumerable<Road> Roads
+IDictionary<string, object> Additionals
+void AddAdditional(string key, object value)
}
class Poi {
+string Tag
+string Name
+string Type
+string Address
+int? Distance
}
class Road {
+string Name
}
ILocationResolveProvider <|-- AmapLocationResolveProvider
AmapLocationResolveProvider --> AmapHttpRequestClient
AmapLocationResolveProvider --> GecodeLocation
AmapLocationResolveProvider --> ReGeocodeLocation
ReGeocodeLocation --> Poi
ReGeocodeLocation --> Road
图示来源
- ILocationResolveProvider.cs
- AmapLocationResolveProvider.cs
- GecodeLocation.cs
- ReGeocodeLocation.cs
- Poi.cs
- Road.cs
章节来源
- AmapLocationResolveProvider.cs
- GecodeLocation.cs
- ReGeocodeLocation.cs
依赖分析
高德地图集成模块依赖于ABP框架的核心模块,包括JSON序列化、本地化、虚拟文件系统和线程处理模块。它还使用了Polly库进行HTTP错误重试策略。
graph TD
A[高德地图集成模块] --> B[AbpLocationModule]
A --> C[AbpJsonModule]
A --> D[AbpThreadingModule]
A --> E[AbpLocalizationModule]
A --> F[Polly]
A --> G[HttpClientFactory]
A --> H[IOptions]
A --> I[IStringLocalizer]
图示来源
- AbpAmapLocationModule.cs
- AmapHttpRequestClient.cs
章节来源
- [AbpAmapLocationModule.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Location.Amap/LINGYUN/Abp/Location/Amap/AbpAmapLocationModule.cs#L1