145 lines
3.3 KiB
Go
145 lines
3.3 KiB
Go
package baidu
|
||
|
||
import (
|
||
. "co
|
||
"fmt"
|
||
"io/ioutil"
|
||
"net/http"
|
||
"net/url"
|
||
)
|
||
|
||
type baiduMap struct {
|
||
Ak string
|
||
Url string
|
||
}
|
||
|
||
var BaiDuMap = baiduMap{}
|
||
|
||
func (that *baiduMap) Init(Ak string) {
|
||
//"ak=ZeT902EZvVgIoGVWEFK3osUm"
|
||
that.Ak = Ak
|
||
that.Url = "https://api.map.baidu.com/place/v2/suggestion?output=json" + "&ak=" + Ak
|
||
//query
|
||
}
|
||
|
||
// from 源坐标类型:
|
||
// 1:GPS标准坐标;
|
||
// 2:搜狗地图坐标;
|
||
// 3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标;
|
||
// 4:3中列举的地图坐标对应的墨卡托平面坐标;
|
||
// 5:百度地图采用的经纬度坐标(bd09ll);
|
||
// 6:百度地图采用的墨卡托平面坐标(bd09mc);
|
||
// 7:图吧地图坐标;
|
||
// 8:51地图坐标;
|
||
// int 1 1 否
|
||
// to
|
||
// 目标坐标类型:
|
||
// 3:火星坐标(gcj02),即高德地图、腾讯地图及MapABC等地图使用的坐标;
|
||
// 5:百度地图采用的经纬度坐标(bd09ll);
|
||
// 6:百度地图采用的墨卡托平面坐标(bd09mc);
|
||
func (that *baiduMap) Geoconv(latlngs []Map, from, to int) (Slice, error) {
|
||
|
||
client := &http.Client{}
|
||
latlngsStr := ""
|
||
for _, v := range latlngs {
|
||
if latlngsStr != "" {
|
||
latlngsStr = latlngsStr + ";" + v.GetString("lng") + "," + v.GetString("lat")
|
||
} else {
|
||
latlngsStr = v.GetString("lng") + "," + v.GetString("lat")
|
||
}
|
||
|
||
}
|
||
|
||
url := "https://api.map.baidu.com/geoconv/v1/?from=" + ObjToStr(from) + "&to=" + ObjToStr(to) + "&ak=" + that.Ak + "&coords=" + latlngsStr
|
||
reqest, err := http.NewRequest("GET", url, nil)
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return nil, err
|
||
}
|
||
response, err := client.Do(reqest)
|
||
defer response.Body.Close()
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return nil, err
|
||
}
|
||
|
||
body, err := ioutil.ReadAll(response.Body)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
//fmt.Println(string(body))
|
||
data := ObjToMap(string(body))
|
||
if data.GetCeilInt64("status") != 0 {
|
||
return nil, err
|
||
}
|
||
|
||
return data.GetSlice("result"), err
|
||
}
|
||
|
||
func (that *baiduMap) GetAddress(lat string, lng string) (string, error) {
|
||
|
||
client := &http.Client{}
|
||
|
||
url := "https://api.map.baidu.com/reverse_geocoding/v3/?ak=" + that.Ak + "&output=json&location=" + lat + "," + lng
|
||
reqest, err := http.NewRequest("GET", url, nil)
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return "", err
|
||
}
|
||
response, err := client.Do(reqest)
|
||
defer response.Body.Close()
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return "", err
|
||
}
|
||
|
||
body, err := ioutil.ReadAll(response.Body)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
//fmt.Println(string(body))
|
||
|
||
return string(body), err
|
||
|
||
}
|
||
dy))
|
||
|
||
return string(b
|
||
// GetPosition 获取定位列表
|
||
func (that *baiduMap) GetPosition(name string, region string) (string, error) {
|
||
|
||
client := &http.Client{}
|
||
if region == "" {
|
||
region = "全国"
|
||
}
|
||
reqest, err := http.NewRequest("GET", that.Url+"&query="+url.PathEscape(name)+"®ion="+url.PathEscape(region), nil)
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return "", err
|
||
}
|
||
response, err := client.Do(reqest)
|
||
defer response.Body.Close()
|
||
|
||
if err != nil {
|
||
fmt.Println("Fatal error ", err.Error())
|
||
return "", err
|
||
}
|
||
|
||
body, err := ioutil.ReadAll(response.Body)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
//fmt.Println(string(body))
|
||
|
||
return string(body), err
|
||
|
||
}
|