Archivo de forma de Cartopy resultando en un punto.
Estoy tratando de cambiar de basemap a cartopy y estoy experimentando algunas dificultades para trazar un shapefile simple.
Usando basemap puedo obtener esto:
Código:
from mpl_toolkits.basemap import Basemap
define map extent
lllat=1.1497
urlat=1.5133
lllon=103.5822
urlon=104.1579
Set up Basemap instance
m = Basemap(
projection = 'merc',
llcrnrlon = lllon, llcrnrlat = lllat, urcrnrlon = urlon, urcrnrlat = urlat,
resolution='h')
shp_info = m.readshapefile('singapore_shapefile',
'singapore',
drawbounds=True)
Sin embargo, con cartopy, obtengo una imagen en blanco con un punto en el centro.
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
from cartopy.feature import ShapelyFeature
define map extent
lllat=1.1497
urlat=1.5133
lllon=103.5822
urlon=104.1579
Set up cartopy instance
m = ccrs.Mercator()
ax = plt.axes(projection=m)
plt.gcf().set_size_inches(20, 10)
reader = shpreader.Reader("singapore_shapefile")
shape_feature = ShapelyFeature(reader.geometries(), m, facecolor="w",
edgecolor='black', lw=1)
ax.add_feature(shape_feature)
plt.savefig("test.png")
¿Alguien puede señalarme en la dirección correcta?
Shapefile: https://drive.google.com/file/d/1suB-VD65bmwesJo01mAvVUolRReWUkdV/view?usp=sharing
davy.ai
Parece que el problema puede estar en la forma en que estamos creando la instancia de mapa con cartopy.
En lugar de usar
ccrs.Mercator()
, podemos usarccrs.PlateCarree()
, que es una proyección geográfica comúnmente utilizada para mapas del mundo.Además, para asegurarnos de que la extensión del mapa sea la misma que la versión del mapa base, necesitamos establecer el método
ax.set_extent()
.Aquí hay un fragmento de código actualizado que debería funcionar:
Esto debería darte una salida de mapa similar a la versión del mapa base. ¡Avísame si esto ayuda!