通过地址获取经纬度和城市明细

作者: adm 分类: go 发布时间: 2023-07-05

背景:
居然需要为上百个地址信息添加对应的经纬度,没办法了,只能让程序帮忙完成了。
1、腾讯地图上的经纬度
2、程序使用golang编写

步骤:
1、在腾讯地图注册并开启WebServiceAPI
2、golang程序

// 城市信息
type CityInfo struct {
	Lng float64
	Lat float64
	City string
}
// 获取经纬度
func getLongLat(address string)(*CityInfo, error){
	key := "GGRBZ-L4NKJ-4MVFF-KZ6GW-****-****" 	// 创建应用的key
	skey := "j3Qnp12XlPLyGqKoSMdKGQN********"	// 开启WebServiceAPI获取的key
	path := "/ws/geocoder/v1"
	query := "address=" + address + "&key=" + key		// 这里实际上是需要根据key进行排序的,详见教程
	md5src := path + "?" + query + skey
	sig := md5V(md5src)
	fmt.Println(sig)
	url := "http://apis.map.qq.com/ws/geocoder/v1?address=" + address + "&key=" + key + "&sig=" + sig
	resultstr := (Get(url))
	fmt.Println(resultstr)
	var result struct{
		Status int `json:"status"`
		Message string `json:"message"`
		Result struct{
			Title string `json:"title"`
			Location struct{
				Lng float64 `json:"lng"`
				Lat float64 `json:"lat"`
			} `json:"location"`
			AddressComponents struct{
				City string `json:"city"`
			} `json:"address_components"`
		}
	}
	err := json.Unmarshal([]byte(resultstr), &result)
	if err != nil{
		fmt.Println(err.Error())
		return nil, err
	}
	cityInfo := CityInfo{}
	cityInfo.City = result.Result.AddressComponents.City
	cityInfo.Lng = result.Result.Location.Lng
	cityInfo.Lat = result.Result.Location.Lat

	return &cityInfo, nil
}
// md5加密
func md5V(str string) string  {
	h := md5.New()
	h.Write([]byte(str))
	return hex.EncodeToString(h.Sum(nil))
}
// 请求url
func Get(url string) (response string) {
	client := http.Client{Timeout: 5 * time.Second}
	resp, error := client.Get(url)
	if error != nil {
		panic(error)
	}
	defer resp.Body.Close()
	var buffer [512]byte
	result := bytes.NewBuffer(nil)
	for {
		n, err := resp.Body.Read(buffer[0:])
		result.Write(buffer[0:n])
		if err != nil && err == io.EOF {
			break
		} else if err != nil {
			panic(err)
		}
	}

	response = result.String()
	return
}

3、更新数据库
这个就直接获取数据记录,通过详细地址获取经纬度后更新就可以了,simple…

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!