2022-01-17 04:47:39 +08:00
|
|
|
|
package baidu
|
|
|
|
|
|
|
|
|
|
import (
|
2025-04-10 22:09:53 +08:00
|
|
|
|
. "co
|
2022-01-17 04:47:39 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"net/http"
|
|
|
|
|
"net/url"
|
|
|
|
|
)
|
|
|
|
|
|
2022-03-13 02:00:40 +08:00
|
|
|
|
type baiduMap struct {
|
2022-01-17 04:47:39 +08:00
|
|
|
|
Ak string
|
|
|
|
|
Url string
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-13 02:00:40 +08:00
|
|
|
|
var BaiDuMap = baiduMap{}
|
|
|
|
|
|
|
|
|
|
func (that *baiduMap) Init(Ak string) {
|
2022-01-17 04:47:39 +08:00
|
|
|
|
//"ak=ZeT902EZvVgIoGVWEFK3osUm"
|
2022-03-13 01:48:54 +08:00
|
|
|
|
that.Ak = Ak
|
|
|
|
|
that.Url = "https://api.map.baidu.com/place/v2/suggestion?output=json" + "&ak=" + Ak
|
2022-01-17 04:47:39 +08:00
|
|
|
|
//query
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-10 22:09:53 +08:00
|
|
|
|
// 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
|
2022-01-17 04:47:39 +08:00
|
|
|
|
// GetPosition 获取定位列表
|
2022-03-13 02:00:40 +08:00
|
|
|
|
func (that *baiduMap) GetPosition(name string, region string) (string, error) {
|
2022-01-17 04:47:39 +08:00
|
|
|
|
|
|
|
|
|
client := &http.Client{}
|
2022-01-26 11:45:17 +08:00
|
|
|
|
if region == "" {
|
|
|
|
|
region = "全国"
|
|
|
|
|
}
|
2022-03-13 01:48:54 +08:00
|
|
|
|
reqest, err := http.NewRequest("GET", that.Url+"&query="+url.PathEscape(name)+"®ion="+url.PathEscape(region), nil)
|
2022-01-17 04:47:39 +08:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
}
|