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(&params)
	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(&params)
	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(&params)
	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的便捷方式。通过这个库,你可以轻松实现:

  1. 地址与坐标之间的转换
  2. 路线规划和导航
  3. 兴趣点搜索
  4. 批量处理多个请求

记得在使用前获取有效的HERE开发者凭证,并根据你的具体需求调整API参数。

回到顶部