通过地址获取经纬度和城市明细
背景:
居然需要为上百个地址信息添加对应的经纬度,没办法了,只能让程序帮忙完成了。
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…