Я пытаюсь создать карту Choropleth с использованием matplotlib и cartopy, для которой мне, очевидно, сначала нужно построить шейп-файл. Однако мне не удалось это сделать, хотя аналогичный вопрос был задан здесь и здесь. Я подозреваю, что неверно указаны либо проекция, либо границы.
В моем шейп-файле есть проекция
PROJCS["WGS_1984_UTM_Zone_32Nz",
GEOGCS["GCS_WGS_1984",
DATUM["WGS_1984",
SPHEROID["WGS_84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting",32500000],
PARAMETER["False_Northing",0],
PARAMETER["Central_Meridian",9],
PARAMETER["Scale_Factor",0.9996],
PARAMETER["Latitude_Of_Origin",0],
UNIT["Meter",1]]
и его можно загрузить здесь, где я говорю о vg250_2010-01-01.utm32w.shape.ebenen/vg250_ebenen-historisch/de1001/vg250_gem.shp
Мой код
#!/usr/local/bin/python
# -*- coding: utf8 -*-
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt
fname = 'path/vg250_gem.shp'
proj = ccrs.TransverseMercator(central_longitude=0.0,central_latitude=0.0,
false_easting=32500000.0,false_northing=0.0,
scale_factor=0.9996)
municipalities = list(shpreader.Reader(fname).geometries())
ax = plt.axes(projection=proj)
plt.title('Deutschland')
ax.add_geometries(municipalities,proj,edgecolor='black',facecolor='gray',alpha=0.5)
ax.set_extent([32458044.649189778*0.9, 5556418.748046352*1.1, 32465287.307457082*0.9, 5564153.5456742775*1.1],proj)
plt.show()
где я получил оценки, используя соответствующий метод от fiona. Python выдает ошибку
Traceback (most recent call last):
File "***/src/analysis/test.py", line 16, in <module>
ax.set_extent([32458044.649189778, 5556418.748046352, 32465287.307457082, 5564153.5456742775],proj)
File "/usr/local/lib/python2.7/site-packages/cartopy/mpl/geoaxes.py", line 652, in set_extent
ylim=self.projection.y_limits))
ValueError: Failed to determine the required bounds in projection coordinates. Check that the values provided are within the valid range (x_limits=[-20000000.0, 20000000.0], y_limits=[-10000000.0, 10000000.0]).
[Finished in 53.9s with exit code 1]
Для меня это не имеет смысла. Кроме того, экспериментируя с ccrs.UTM (), я получаю график, показывающий белую область. Буду признателен, если кто-нибудь скажет мне, как это исправить. Спасибо!
set_extent
(вызов, вызвавший ошибку ) выходят за эти требуемые пределы. - person tsj   schedule 08.10.2016set_extent
, в том числе полностью удалить эту строку, но это тоже не сработало. - person Jhonny   schedule 09.10.2016proj
вы предоставляетеfalse_easting
32,5M. Предположительно это приведет к сдвигу в направлении x. В вашем обращении кset_extent
у вас есть два значения около 32,5M, которые будут исправлены таким сдвигом. Глядя на документы для картографии, входные данные дляset_extent
- (x0, x1, y0, y1), но похоже, что вы могли указать (x0, y0, x1, y1), поэтомуfalse_easting
не вернет вас к приемлемому границы. - person tsj   schedule 10.10.2016