如何在Cartopy中正确设置地图范围?在UTM 51N和Plate Carree中,输出仍然“放大”到错误的区域

问题描述 投票:0回答:1

目标是将CSV中的每次地震绘制到Cartopy的库存图上。因此,一场地震就是一张照片。这些照片将被制成GIF。

代码

import os
os.chdir(r'path')
import matplotlib.pyplot as plt
import pandas as pd
import geopandas as gpd
import cartopy.crs as ccrs
from geopandas import GeoDataFrame
from shapely.geometry import Point

df = pd.read_csv('emscPhilippines2008to2020_5lines.csv')
crs = "epsg:32651" 
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
gdf = GeoDataFrame(df, crs=crs, geometry=geometry)
proj = ccrs.PlateCarree()
#projutm = ccrs.UTM(51)
ph = gpd.read_file('Provinces.shp')
bounds = ph.total_bounds
for i in range(gdf.shape[0]):
    ax = plt.axes(projection=proj)
    ax.stock_img()
    ax.set_extent(bounds, crs=proj)
    g = gdf.iloc[i].geometry
    date = gdf.iloc[i]['Date']
    time = gdf.iloc[i]['Time_UTC']
    info = (date + " " + time)
    plt.plot(g.x, g.y, marker='o', color='red', markersize=15)
    plt.suptitle('Earthquakes in the Philippines from 2008 to 2020')
    plt.title(info)e
    plt.show()
    #plt.savefig("earthquake{0}.png".format(i))
plt.show()

结果

enter image description here

但是如果我注释掉ax.set_extent行(在前面放#号,则结果是一个全局映射。

enter image description here

即使使用边界boxes of PH from here,即[117.17427453、5.58100332277、126.537423944、18.5052273625],焦点仍然是错误的。

enter image description here

python mapping gis bounding-box cartopy
1个回答
0
投票

解决了。因此,github页面中的边界框是错误的,下面的注释者给出了正确的边界框。

改为使用此

bounds = [114.095214, 126.8072562, 4.2158064, 21.3217806]

读取documentation,格式应为

在给定坐标中设置地图的范围(x0,x1,y0,y1)系统。

结果正确放大,但分辨率较低

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.