【问题标题】:Basemap - Values must be between -90, 90 Degrees底图 - 值必须介于 -90、90 度之间
【发布时间】:2017-12-06 23:37:14
【问题描述】:

目标

  • 将 GIS、shapefile(县界)上传到底图
  • 使用底图绘制县界
  • 确定某个位置是否在边界内
  • 为点分配权重,具体取决于它们所在的边界
  • 使用 DBSCAN 根据坐标和权重发现聚类中心

方法

使用this tutorial on Basemap,上传shapefile进行映射。

#First, we have to import our datasets. 
#These datasets include store locations, existing distribution locations, county borders, and real estate by county
walmartStores = pd.read_csv("data/walmart-stores.csv",header=0, encoding='latin1')
propertyValues = pd.read_csv("data/property values.csv")
shp = fiona.open('data/boundaries/Counties.shp')


#We need to create a workable array with Walmart Stores
longitude = walmartStores.longitude
latitude = walmartStores.latitude
stores = np.column_stack((longitude, latitude))

#We also need to load the shape file for county boundaries
extra = 0.1 
bds = shp.bounds 
shp.close()

#We need to assign the lower-left bound and upper-right bound
ll = (bds[0], bds[1])
ur = (bds[2], bds[3])


#concatenate the lower left and upper right into a variable called coordinates
coords = list(chain(ll, ur))
print(coords)

#define variables for the width and the height of the map
w, h = coords[2] - coords[0], coords[3] - coords[1]

print(coords) = [105571.4206781257, 4480951.235680977, 779932.0626624253, 4985476.422250552]

到目前为止一切都很好,但是我遇到了以下问题:

m = Basemap(
    #set projection to 'tmerc' to minimize map distortion
    projection='tmerc',

    #set longitude as average of lower, upper longitude bounds
    lon_0 = np.average([bds[0],bds[2]]),

    #set latitude as average of lower,upper latitude bounds
    lat_0 = np.average([bds[1],bds[3]]),

    #string describing ellipsoid (‘GRS80’ or ‘WGS84’, for example). 
    #Not sure what this does...
    ellps = 'WGS84',

    #set the map boundaries. Note that we use the extra variable to provide a 10% buffer around the map
    llcrnrlon=coords[0] - extra * w,
    llcrnrlat=coords[1] - extra + 0.01 * h,
    urcrnrlon=coords[2] + extra * w,
    urcrnrlat=coords[3] + extra + 0.01 * h,

    #provide latitude of 'true scale.' 
    #check the Basemap API
    lat_ts=0,

    #resolution of boundary database to use. Can be c (crude), l (low), i (intermediate), h (high), f (full) or None.
    resolution='i',

    #don't show the axis ticks automatically
    suppress_ticks = False)


m.readshapefile(
    #provide the path to the shapefile, but leave off the .shp extension
    'data/boundaries/Counties.shp',

    #name your map something useful (I named this 'srilanka')
    'nyCounties',

    #set the default shape boundary coloring (default is black) and the zorder (layer order)
    color='none',
    zorder=2)

错误:lat_0 必须介于 -90.000000 和 90.000000 之间

问题

  1. lat_0 和 lon_0 不在 -90 和 90 之间。但是,lon_0 不会引发错误。为什么会这样?
  2. 我已经在网上寻找其他面临类似问题的人,但都空手而归。我的笔记本有什么独特之处吗? (注意:conda list 显示 `basemap 1.0.7,所以我知道它已安装并正在运行)

谢谢!

【问题讨论】:

    标签: python matplotlib-basemap


    【解决方案1】:

    纬度只能在 -90 到 90 之间 - 任何其他都没有意义。北极为+90,南极为-90,赤道为0。没有其他可接受的值!

    关于经度,它只能在-180到180之间。0是在本初子午线,去-180(向西)和+180(向东)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多