golang HERE位置服务API客户端插件库go-here的使用
Golang HERE位置服务API客户端插件库go-here的使用
简介
go-here是一个用于访问HERE API的Go客户端库。HERE提供基于位置的服务,该库旨在让Go程序员更轻松地使用HERE的REST API。
功能特性
- HERE REST API支持:
- 路线规划(Routing)
- 地理编码(Geocoding)
- 反向地理编码(Reverse Geocoding)
- 地理编码自动完成(Geocoding Autocomplete)
- 地点(Places)
安装
go get github.com/abdullahselek/go-here/here
要安装go-here及其所有依赖项:
go get -t github.com/abdullahselek/go-here/here
使用示例
1. 路线规划(Routing)
var httpClient = &http.Client{
Timeout: time.Second * 15,
}
// 创建路由客户端
routingClient := here.NewRoutingClient(httpClient)
// 创建路由参数
routingParams := routingClient.Routing.CreateRoutingParams(
[2]float32{52.5160, 13.3779}, // 起点坐标
[2]float32{52.5206, 13.3862}, // 终点坐标
"appID", // HERE应用ID
[]here.Enum{ // 路由模式
here.RouteMode.Fastest,
here.RouteMode.Car,
here.RouteMode.TrafficDefault,
},
)
// 获取路线
routes, httpResponse, err := routingClient.Routing.Route(&routingParams)
2. 边界框内地址搜索
geocodingClient := here.NewGeocodingClient(httpClient)
// 创建边界框搜索参数
addressBoundingBoxParams := here.AddressInBoundingBoxParameters{
SearchText: "1 main", // 搜索文本
MapView: geocodingClient.Geocoding.CreateMapView(
[2]float32{42.3902, -71.1293}, // 西北角坐标
[2]float32{42.3312, -71.0228}, // 东南角坐标
),
Gen: 9, // 生成版本
APIKey: "appKey", // API密钥
}
// 执行搜索
geocodingResponse, httpResponse, err := geocodingClient.Geocoding.AddressInBoundingBox(&addressBoundingBoxParams)
3. 部分地址信息查询
partialAddressInformationParams := here.PartialAddressInformationParameters{
HouseNumber: 425, // 门牌号
Street: "randolph",// 街道
City: "chicago", // 城市
Country: "usa", // 国家
Gen: 9, // 生成版本
APIKey: "apiKey", // API密钥
}
geocodingResponse, httpResponse, err = geocodingClient.Geocoding.PartialAddressInformation(&partialAddressInformationParams)
4. 反向地理编码(地址详情)
reverseGeocodingClient := here.NewReverseGeocodingClient(httpClient)
// 创建位置参数
locationParameters := reverseGeocodingClient.ReverseGeocoding.CreateAddressFromLocationParameters(
[2]float32{42.3902, -71.1293}, // 坐标
250, // 半径(米)
here.ReverseGeocodingMode.RetrieveAddresses, // 模式
1, // 最大结果数
9, // 生成版本
"apiKey", // API密钥
)
geocodingResponse, httpResponse, err = reverseGeocodingClient.ReverseGeocoding.AddressFromLocation(&locationParameters)
5. 反向地理编码(地标详情)
landmarkParameters := reverseGeocodingClient.ReverseGeocoding.CreateLandmarksParameters(
[2]float32{42.3902, -71.1293}, // 坐标
1, // 最大结果数
9, // 生成版本
"apiKey", // API密钥
)
geocodingResponse, httpResponse, err = reverseGeocodingClient.ReverseGeocoding.Landmarks(&landmarkParameters)
6. 自动完成地理编码(完整位置详情)
autocompleteGeocodingClient := here.NewAutocompleteGeocodingClient(httpClient)
// 创建建议参数
suggestionsParameters := autocompleteGeocodingClient.AutocompleteGeocoding.CreateDetailsForSuggestionParameters(
"Pariser 1 Berl", // 搜索文本
"apiKey", // API密钥
)
autocompleteGeocodingResponse, httpResponse, err := autocompleteGeocodingClient.AutocompleteGeocoding.DetailsForSuggestion(&suggestionsParameters)
路线图
- 为其他端点添加新的客户端
在函数上使用参数结构体
许可证
MIT License
更多关于golang HERE位置服务API客户端插件库go-here的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang HERE位置服务API客户端插件库go-here的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用go-here库访问HERE位置服务API
go-here是一个Golang客户端库,用于访问HERE位置服务API。下面我将介绍如何使用这个库进行常见的位置服务操作。
安装
首先安装go-here库:
go get github.com/abdullahselek/go-here
基本使用
1. 初始化客户端
package main
import (
"fmt"
"github.com/abdullahselek/go-here/here"
)
func main() {
// 使用你的HERE API凭证初始化
credentials := here.Credentials{
AppID: "YOUR_APP_ID",
AppCode: "YOUR_APP_CODE",
}
// 创建客户端
client := here.New(credentials)
// 或者使用API密钥(新版本HERE API使用)
// client := here.NewWithAPIKey("YOUR_API_KEY")
}
2. 地理编码(地址转坐标)
func geocodeExample(client *here.Client) {
// 设置地理编码参数
geocodingParams := here.GeocodingParameters{
SearchText: "200 S Mathilda Ave, Sunnyvale, CA",
}
// 执行地理编码请求
response, err := client.Geocoding.Geocoding(&geocodingParams)
if err != nil {
fmt.Printf("Geocoding error: %v\n", err)
return
}
// 处理响应
if len(response.Response.View) > 0 && len(response.Response.View[0].Result) > 0 {
location := response.Response.View[0].Result[0].Location.DisplayPosition
fmt.Printf("Latitude: %f, Longitude: %f\n", location.Latitude, location.Longitude)
}
}
3. 反向地理编码(坐标转地址)
func reverseGeocodeExample(client *here.Client) {
// 设置反向地理编码参数
params := here.ReverseGeocodingParameters{
Latitude: 37.422,
Longitude: -122.084,
Mode: here.ReverseGeocodingMode.RetrieveAddresses,
}
// 执行请求
response, err := client.Geocoding.ReverseGeocoding(¶ms)
if err != nil {
fmt.Printf("Reverse geocoding error: %v\n", err)
return
}
// 处理响应
if len(response.Response.View) > 0 && len(response.Response.View[0].Result) > 0 {
address := response.Response.View[0].Result[0].Location.Address
fmt.Printf("Address: %s, %s, %s\n", address.Street, address.City, address.Country)
}
}
4. 路线规划
func routingExample(client *here.Client) {
// 设置路线参数
params := here.RoutingParameters{
Waypoint0: "geo!52.5,13.4", // 起点
Waypoint1: "geo!52.5,13.45", // 终点
Mode: here.RoutingMode.FastestCar,
}
// 获取路线
response, err := client.Routing.Route(¶ms)
if err != nil {
fmt.Printf("Routing error: %v\n", err)
return
}
// 处理响应
if len(response.Response.Route) > 0 {
route := response.Response.Route[0]
fmt.Printf("Distance: %d meters\n", route.Summary.Distance)
fmt.Printf("Travel Time: %d seconds\n", route.Summary.TravelTime)
for _, maneuver := range route.Leg[0].Maneuver {
fmt.Printf("Instruction: %s\n", maneuver.Instruction)
}
}
}
5. 兴趣点(POI)搜索
func placesExample(client *here.Client) {
// 设置POI搜索参数
params := here.PlacesParameters{
In: "37.7942,-122.4070", // 中心点坐标
Distance: 1000, // 搜索半径(米)
Q: "restaurant", // 搜索关键词
}
// 执行搜索
response, err := client.Places.Search(¶ms)
if err != nil {
fmt.Printf("Places search error: %v\n", err)
return
}
// 处理响应
for _, result := range response.Results.Items {
fmt.Printf("Name: %s, Distance: %dm, Address: %s\n",
result.Title,
result.Distance,
result.Vicinity)
}
}
高级功能
批量请求
func batchExample(client *here.Client) {
// 创建批量请求
batch := client.Batch.NewBatchRequest()
// 添加多个请求
batch.AddGeocodingRequest(&here.GeocodingParameters{
SearchText: "Berlin, Germany",
})
batch.AddReverseGeocodingRequest(&here.ReverseGeocodingParameters{
Latitude: 52.5167,
Longitude: 13.3833,
})
// 执行批量请求
responses, err := batch.Execute()
if err != nil {
fmt.Printf("Batch error: %v\n", err)
return
}
// 处理响应
for _, response := range responses {
switch r := response.(type) {
case *here.GeocodingResponse:
// 处理地理编码响应
case *here.ReverseGeocodingResponse:
// 处理反向地理编码响应
}
}
}
错误处理
func handleErrors(err error) {
if hereErr, ok := err.(*here.Error); ok {
fmt.Printf("HERE API Error: %s (Code: %d)\n", hereErr.Message, hereErr.Code)
} else {
fmt.Printf("Error: %v\n", err)
}
}
总结
go-here库提供了访问HERE位置服务API的便捷方式。通过这个库,你可以轻松实现:
- 地址与坐标之间的转换
- 路线规划和导航
- 兴趣点搜索
- 批量处理多个请求
记得在使用前获取有效的HERE开发者凭证,并根据你的具体需求调整API参数。