Konvertierung von und zu Kartenprojektionskoordinaten

Um Daten auf einer Karte darzustellen, müssen die Koordinaten der Daten in Kartenprojektionskoordinaten angegeben werden. Das Aufrufen einer Basemap-Klasseninstanz mit den Argumenten lon, lat konvertiert lon/lat (in Grad) in x/y Kartenprojektionskoordinaten (in Metern). Die Umkehrung der Transformation wird durchgeführt, wenn das optionale Schlüsselwort inverse auf True gesetzt ist. Hier ist ein Beispiel, das diese Funktion verwendet, um einen Marker und Text zur Kennzeichnung des Standorts von Boulder, CO, basierend auf der Längen-/Breitengradposition, zu plotten.

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
# setup Lambert Conformal basemap.
m = Basemap(width=12000000,height=9000000,projection='lcc',
            resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
# 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='aqua') 
# fill continents, set lake color same as ocean color. 
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
# label parallels on right and top
# meridians on bottom and left
parallels = np.arange(0.,81,10.)
# labels = [left,right,top,bottom]
m.drawparallels(parallels,labels=[False,True,True,False])
meridians = np.arange(10.,351.,20.)
m.drawmeridians(meridians,labels=[True,False,False,True])
# plot blue dot on Boulder, colorado and label it as such.
lon, lat = -104.237, 40.125 # Location of Boulder
# convert to map projection coords. 
# Note that lon,lat can be scalars, lists or numpy arrays.
xpt,ypt = m(lon,lat) 
# convert back to lat/lon
lonpt, latpt = m(xpt,ypt,inverse=True)
m.plot(xpt,ypt,'bo')  # plot a blue dot there
# put some text next to the dot, offset a little bit
# (the offset is in map projection coordinates)
plt.text(xpt+100000,ypt+100000,'Boulder (%5.1fW,%3.1fN)' % (lonpt,latpt))
plt.show()

(Quellcode)

../_images/plotboulder.png