使用Basemap映射芝加哥周围的GPS坐标

时间:2014-01-10 19:43:31

标签: python matplotlib gps matplotlib-basemap

我正在使用python的matplotlibBasemap库。

我正试图在芝加哥市周围绘制一个GPS点列表,用于我正在进行的项目,但它不起作用。我已经查看了所有可用的示例,但是尽管逐字复制并粘贴它们(然后更改gps点),地图无法使用绘制的点进行渲染。

以下是一些示例点,因为它们存储在我的代码中:

[(41.98302392, -87.71849159), 
(41.77351707, -87.59144826), 
(41.77508317, -87.58899995),
(41.77511247, -87.58646695), 
(41.77514645, -87.58515301), 
(41.77538531, -87.58611272), 
(41.71339537, -87.56963306), 
(41.81685612, -87.59757281), 
(41.81697313, -87.59910809), 
(41.81695808, -87.60049861), 
(41.75894604, -87.55560586)]

这是我用于渲染地图的代码(不起作用)。

# -*- coding: utf-8 -*-

from pymongo import *
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from collections import Counter
import ast

def routes_map():
    """  

    doesn't work :(
    # map of chicago
    """ 
    all_locations = []  #<-- this is the example data above
    x = []
    y = []

    for loc in all_locations:     #creates two lists for the x and y (lat,lon) coordinates
        x.append(float(loc[0]))
        y.append(float(loc[1]))

    # llcrnrlat,llcrnrlon,urcrnrlat,urcrnrlon
    # are the lat/lon values of the lower left and upper right corners
    # of the map.
    # resolution = 'i' means use intermediate resolution coastlines.
    # lon_0, lat_0 are the central longitude and latitude of the projection.
    loc = [41.8709, -87.6331]

    # setup Lambert Conformal basemap.
    m = Basemap(llcrnrlon=-90.0378,llcrnrlat=40.6046,urcrnrlon=-85.4277,urcrnrlat=45.1394,
                projection='merc',resolution='h')
    # draw coastlines.
    m.drawcoastlines()
    m.drawstates()

    # draw a boundary around the map, fill the background.
    # this background will end up being the ocean color, since
    # the continents will be drawn on top.
    m.drawmapboundary(fill_color='white')

    x1, y1 = m(x[:100],y[:100])
    m.plot(x1,y1,marker="o",alpha=1.0)
    plt.title("City of Chicago Bus Stops")
    plt.show()

这是我运行此代码所得到的:

pic

有没有人对我做错了什么有任何提示?

1 个答案:

答案 0 :(得分:1)

您不小心将纬度值输入为x,经度值为y。在您提供的示例数据中,第一列是纬度,第二列是经度,而不是您的代码似乎想到的另一种方式。

因此请使用x.append(float(loc[1]))y.append(float(loc[0]))代替您拥有的内容。