Google静态地图API:将路线表示为编码的折线

1 投票
1 回答
2319 浏览
提问于 2025-04-16 13:08

我正在尝试在一个静态地图上用编码的折线来表示多个点之间的路线。这个功能的代码在一个叫做 getStaticMapAddress 的函数里,定义如下:

def getStaticMapAddress(self, route):
    destUser = DestUser(self.destination)
    route += [destUser]
    attempts = 0
    while attempts < 10:
        try:
            encodedPolyline = self.encodePolyLine(route)
            break
        except googlemaps.GoogleMapsError:
            print "Error. Try again"
            attempts += 1
    url = "http://maps.google.com/maps/api/staticmap?zoom="+encodedPolyline[1]+"&sensor=false&size=400x400&markers="
    i=0
    while i<len(route):
        url += str(route[i].location.lat)+","+str(route[i].location.lng)
        i=i+1
        if i < len(route):
            url += "|"
    url += "&path=color:0xff0000ff|weight:5|enc:"+encodedPolyline[0]
    return url

这条路线是用一系列用户对象来表示的(其中 DestUser 是一个子类)。self.encodePolyLine() 方法的定义如下:

def encodePolyLine(self, route):
    routePairs = []
    destUser = DestUser(self.destination)
    route += [destUser]
    i=0
    while (i < len(route)-1):
        # GET ALL TURNING POINTS FOR EACH POINT ON ROUTE, THEN PUT THEM
        # IN PAIRS AND SEND THEM TO glineenc.encode_pairs()
        for step in gmaps.directions(gmaps.latlng_to_address(route[i].location.lat, route[i].location.lng), gmaps.latlng_to_address(route[i+1].location.lat, route[i+1].location.lng))['Directions']['Routes'][0]['Steps']:
            routePairs += [(step['Point']['coordinates'][0], step['Point']['coordinates'][1])]
        i=i+1
    return glineenc.encode_pairs(routePairs)

这个 glineenc 模块来自 这里,它接收一对对坐标,返回一个包含编码线路字符串和一个表示最大缩放级别的编码字符串,以便能看到所有点。所以,我有一条从布莱顿、伦敦、布里斯托到曼彻斯特的路线,我把它传入了这个函数。输出的 URL 是:

http://maps.google.com/maps/api/staticmap?zoom=B@@@@@?@AA@AA??A@@A@A@?@@@@@@@@B?@@@@@A@@@@@@?B@@AABABA@@@@@@@B&sensor=false&size=400x400&markers=50.8202008,-0.1324898|51.447341,-0.0761212|51.4608947,-2.5884312|53.4778853,-2.2308146|53.4778853,-2.2308146&path=color:0xff0000ff|weight:5|enc:b|XqvduHm@cDcMhAfAfFrc@{BlJgDqHaZkEy[vsKiwp@ciHahd@}nEwoK_KqB_QmoIpAyBw@Mv_BqxDmC`EasCvAeFuuAwi@_Rq|DuVnYgPdXyHvIcBcSgElgBkqBzKgh@`xD_cAzBpBvNM{HsHh]wNfbCzOxpCrUjeD_`Ahi@pItyGdXj`D_PjctLa}BzhH~nFn\dPfe@bObv@dC`i@fS_HrFk@~AmAzDsW_Ak_CmiAkuGy_GvxDctEolnBcpdEhtPc}Srp~AcvsCi_a@clJakR`]kiCr]opDtRcW}JhVcV_EmDaDhFkCc@

如果你查看这个链接,你会发现似乎出现了问题。我不太确定具体发生了什么,但我注意到新的路线看起来像是正确路线的投影,就像用赤道和经线作为对称线反射出来的一样。我不太明白为什么会这样,但这大概是我能想到的可能问题的原因。有什么想法吗?

1 个回答

4

随便猜一下:你可能不小心把经度和纬度的参数搞混了。

撰写回答