为了账号安全,请及时绑定邮箱和手机立即绑定

Go语言学习之:计算两地之间的导航距离

标签:
Go

有时候作为一个新手而言,我们遇到的问题,就是我没有见过这样的东西,接触新事物的能力有点差,
我就是这样,找了很久计算导航距离的SDK没有找到,只好自己写了,希望能给大家一点帮助,直接贴代码了

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

type Distance struct {
    origin      string
    destination string
}

type AnalyzeJson struct {
    Status  int    `json:"status"`
    Message string `json:"message"`
    Info    struct {
        Copyright struct {
            Text     string `json:"text"`
            ImageURL string `json:"imageUrl"`
        } `json:"copyright"`
    } `json:"info"`
    Result struct {
        Elements []struct {
            Distance struct {
                Text  string `json:"text"`
                Value int    `json:"value"`
            } `json:"distance"`
            Duration struct {
                Text  string `json:"text"`
                Value int    `json:"value"`
            } `json:"duration"`
        } `json:"elements"`
    } `json:"result"`
}

var (
    // 基础URL
    baseURL = "http://api.map.baidu.com/direction/v1/routematrix?+" +
        "output=%s&origins=%s&model=%s&destinations=%s&ak=%s"
    // ak
    ak = "百度申请一个你自己的AK就可以了,很简单"
    // 出行方式是driving
    model = "driving"
    // 输出方式
    output = "json"
    // 解析结果
    distanceJson AnalyzeJson
)

func (d Distance) CalculateDistance() string {

    DistanceURL := fmt.Sprintf(baseURL, output,
        d.origin, model, d.destination, ak)

    req, _ := http.NewRequest("GET", DistanceURL, nil)
    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()

    body, _ := ioutil.ReadAll(res.Body)
    err := json.Unmarshal([]byte(body), &distanceJson)
    if err != nil {
        panic(err)
    }
    elementResult := distanceJson.Result.Elements
    for _, value := range elementResult {
        FinalDistance := value.Distance.Text
        return FinalDistance
    }
    return ""
}

func main() {
    root := Distance{
        origin:      "北京",
        destination: "南京",
    }
    fmt.Println(root.CalculateDistance())
}

有不明白的 可以再下面 给我留言,有好的建议的也可以。哈哈

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消