package amap import ( "encoding/json" "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "github.com/pkg/errors" ) const( __AMAP_API_ENDPOINT = "https://restapi.amap.com" __KEY = "427befed1b2db94d6753b679d7330772" ) type AMapClient struct{ Key string } /** * @brief: 逆地理编码 * @param1 lngLats: 经纬度列表,{lng1,lat1,lng2,lat2} * @return1: 逆转换结果 * @return2: 错误信息 */ func (a *AMapClient)Regeo(lngLats []string)(*RegeoResult, error){ if lngLats == nil || len(lngLats) == 0{ return nil, errors.New("参数lnglats为空") } if len(lngLats) % 2 != 0{ return nil, errors.New("参数lnglats长度必须为2的倍数") } path := "/geocode/regeo" location := "" location = fmt.Sprintf("%s,%s", lngLats[0], lngLats[1]) for i := 2; i < len(lngLats); i += 2 { location += "|" + fmt.Sprintf("%s,%s", lngLats[i], lngLats[i+1]) } params := make(map[string]string) params["location"] = location params["batch"] = "true" fullUrl := a.getFullUrl(path, params) bytess, err := utils.NewHttpUtil().Get(fullUrl, nil, nil) if err != nil{ return nil, err } regeoResult := &RegeoResult{} err = json.Unmarshal(bytess, regeoResult) if err != nil{ return nil, err } return regeoResult, nil } /** * @brief: 坐标转换 * @param1 lngLats: 经纬度列表 * @param2 coordType: 坐标类型 gps;mapbar;baidu;autonavi * @return1: 坐标转回结果 * @return2: 错误信息 */ func (a *AMapClient)ConvCoord(lngLats []string, coordType string)(*ConvCoordResult, error){ locations := a.getLocations(lngLats) params := make(map[string]string) params["locations"] = locations params["coordsys"] = coordType path := "/assistant/coordinate/convert" fullUrl := a.getFullUrl(path, params) bytess, err := utils.NewHttpUtil().Get(fullUrl, nil, nil) if err != nil{ return nil, err } result := &ConvCoordResult{} err = json.Unmarshal(bytess, result) if err != nil{ return nil, err } return result, nil } /** * @brief: 获取天气 * @param1 city: 区编码 * @param2 forecast: 是否预报天汽水 * @return1: 天气结果 * @return2: 错误信息 */ func (a *AMapClient)FetchWeather(city string, live bool)(*WeatherResult, error){ params := make(map[string]string) params["city"] = city if !live{ params["extensions"] = "all" } path := "/weather/weatherInfo" fullUrl := a.getFullUrl(path, params) bytess, err := utils.NewHttpUtil().Get(fullUrl, nil, nil) if err != nil{ return nil, err } result := &WeatherResult{} err = json.Unmarshal(bytess, result) if err != nil{ return nil, err } return result, nil } /** * @brief: 根据ip获取地址信息 * @param1 ip: ip,空标识使用请求ip获取地址 */ func (a *AMapClient)FectionLocationByIp(ip string)(*IpResult, error){ if ip == ""{ return nil, errors.New("ip不能为空") } params := make(map[string]string) params["ip"] = ip path := "/ip" fullUrl := a.getFullUrl(path, params) bytess, err := utils.NewHttpUtil().Get(fullUrl, nil, nil) if err != nil{ return nil, err } result := &IpResult{} err = json.Unmarshal(bytess, result) if err != nil{ return nil, err } return result, nil } /** * @brief: 获取完全url * @param1 path: 请求path * @param2 params: 参数 */ func (a *AMapClient)getFullUrl(path string, params map[string]string)string{ version := "v3" paramsStr := "" params["key"] = a.Key for k, v := range params{ paramsStr += fmt.Sprintf("%s=%s&", k, v) } return __AMAP_API_ENDPOINT + "/" + version + path + "?" + paramsStr } /** * @brief: 多个坐标转换程参数形式 * @param1 lngLats: 坐标列表 * @return1: 坐标结果 lng1,lat1|lng2,lat2 */ func (a *AMapClient)getLocations(lngLats []string)string{ location := "" location = fmt.Sprintf("%s,%s", lngLats[0], lngLats[1]) for i := 2; i < len(lngLats); i += 2 { location += "|" + fmt.Sprintf("%s,%s", lngLats[i], lngLats[i+1]) } return location }