继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

鱼右
关注TA
已关注
手记 10
粉丝 20
获赞 19

有时候作为一个新手而言,我们遇到的问题,就是我没有见过这样的东西,接触新事物的能力有点差,
我就是这样,找了很久计算导航距离的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())
}

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

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP

热门评论

你好,能不能做一个工具,可以把包含起始地点和到达地点的excel文件导进去,算出两点驾驶距离。

查看全部评论