【数据产品案例】Cape Analytics,用地理空间图像为房产估值

通过使用计算机视觉技术分析地理空间图像,CapeAnalytics帮助保险公司高效准确地完成房产估值,已覆盖7000万座建筑物,预示保险业向人工智能与实时分析的重大转型。

1. 目标:保险公司在进行房产估值时减少排出专人到现场的人力成本,并希望得到更准确的评估

2. 方法:
1)从合作方获取地理空间图像(户外图像、卫星图像)
2)利用计算机视觉技术,从图像中提取结构化信息(如占地面积、房顶类型、房顶材料、天窗、太阳能板、光照情况)
3)根据这些信息帮助保险公司进行房产估值(目前已收录7000万座建筑物的信息)

3. “我看过很多依赖于保险行业的战略拐点而实现的商业成功故事,”Cape Analytics董事、XL Innovate合伙人玛莎·诺塔拉斯(Martha Notaras)补充道,“Cape Analytics预示了保险行业向着人工智能和实时分析技术展开重大转变。”

——————
思考
1. 信贷、保险等离钱近的业务,对数据的需求量极大,而目前能帮助进行评估的数据又有限。数据产品可以优先思考对这些业务的帮助(如降低人力成本、降低人力介入评估避免腐败、提高评估的准确性等),同样成本下创造的价值大
<think>好的,用户想用ERA5的cape数据生成2019年7月5日某经纬度范围的填色图。首先,我得回顾之前的对话,确保这次回答符合他们的需求。之前给出的步骤是针对哈尔滨的,但现在用户可能需要更通用的方法。 用户提到“特定日期”和“经纬度范围”,可能需要调整数据选择和区域切片。首先确认数据格式是否正确,尤其是经度范围是否-180到180,或者需要转换到0-360。ERA5通常使用0-360经度,但用户的数据是-180到180,所以切片时要处理经度范围。 接下来,用户可能关心如何正确加载和处理NetCDF文件,尤其是时间维度的选择。需要确保正确选择日期,比如使用xarray的sel方法,并处理时间维度,可能包括小时数据,所以要指定具体日期。 然后是地理投影和绘图设置。用户可能需要使用Cartopy来绘制地图,添加海岸线、国界等要素。要注意经纬度的切片方向,尤其是纬度是否为降序排列,否则绘图时可能出现上下颠倒的问题。 另外,用户可能需要调整颜色映射和色标范围,确保CAPE值在合理范围内显示。比如设置vmin和vmax,或者根据数据动态调整。之前的回答提到检查数据范围,这里可能需要再次强调。 还可能存在的疑问是如何保存图像,生成全天的图还是特定时刻的。用户的问题中没有明确说明是单一时次还是全天,但根据之前的回答,可能默认生成全天的,但需要确认用户的具体需求。 需要检查是否有常见的错误,比如数据切片空白,这可能由于纬度切片方向错误,或者经度范围未正确转换。例如,如果用户指定的经度是东经125-130,而数据是-180到180,可能需要将经度转换为负数,或者调整切片范围。 最后,用户可能需要扩展应用,比如叠加其他参数如CIN,或者地形数据。但当前问题可能只需要基本的填色图,所以保持回答简洁,同时提供扩展建议。 总结步骤:数据加载、时间选择、区域切片、绘图设置、输出图像。确保代码示例正确,并包含必要的注释,帮助用户理解每个步骤的作用。同时,排查常见问题,如数据范围、坐标转换、颜色设置等,提供解决方案。</think>--- ### **分步绘制ERA5 CAPE填色图(2019年7月5日)** --- #### **步骤1:数据加载与检查** **确保数据格式正确** ERA5数据通常以NetCDF格式存储,需验证数据维度: - **时间维度**:包含2019年7月全小时数据 - **空间维度**:经度范围-180°~180°,纬度降序存储(北纬90°至南纬90°) ```python import xarray as xr import numpy as np # 加载数据(启用分块读取优化内存) ds = xr.open_dataset("ERA5_CAPE_201907.nc", chunks={'time': 24}) print(ds) # 查看数据结构和变量名 ``` --- #### **步骤2:时间与空间筛选** **目标参数**: - **日期**:2019年7月5日全天(UTC时间) - **区域**:自定义经纬度范围(示例:经度100°E-120°E,纬度30°N-40°N) ```python # 设置自定义区域(以中国东部为例) lon_min, lon_max = 100, 120 # 东经范围 lat_min, lat_max = 30, 40 # 北纬范围 # 提取数据(注意ERA5纬度降序存储) cape_subset = ds['cape'].sel( time="2019-07-05", longitude=slice(lon_min, lon_max), latitude=slice(lat_max, lat_min) # 纬度降序切片 ).squeeze() # 去除单一维度 ``` --- #### **步骤3:地图投影与可视化** **核心配置**: - 使用**PlateCarree投影**(地理坐标) - 添加**地理边界**(海岸线、国界等) - 设置**色标动态范围** ```python import cartopy.crs as ccrs import cartopy.feature as cfeature import matplotlib.pyplot as plt import matplotlib.ticker as mticker def plot_cape(hour): fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) # 设置地图范围(与目标区域一致) ax.set_extent([lon_min-1, lon_max+1, lat_min-1, lat_max+1], crs=ccrs.PlateCarree()) # 绘制CAPE填色图 cape_data = cape_subset.isel(time=hour) mesh = ax.pcolormesh( cape_subset.longitude, cape_subset.latitude, cape_data, cmap='rainbow', # 或'jet'/'viridis' vmin=0, # CAPE最小值(单位:J/kg) vmax=5000, # CAPE最大值(根据实际数据调整) transform=ccrs.PlateCarree() ) # 添加地理要素 ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.8) ax.add_feature(cfeature.BORDERS, linestyle=':', edgecolor='gray') ax.add_feature(cfeature.LAKES, alpha=0.5, edgecolor='black') # 添加网格与标签 gl = ax.gridlines(draw_labels=True, linestyle='--', alpha=0.5) gl.top_labels = False # 隐藏顶部标签 gl.right_labels = False # 添加色标与标题 plt.colorbar(mesh, label='CAPE (J/kg)', extend='max') time_str = np.datetime_as_string(cape_subset.time[hour].values, unit='h') plt.title(f"CAPE分布图\n{time_str} UTC | 范围:{lon_min}°E-{lon_max}°E, {lat_min}°N-{lat_max}°N") plt.savefig(f"CAPE_{hour:02d}.png", dpi=300, bbox_inches='tight') plt.close() # 生成全天24小时图像 for hour in range(24): plot_cape(hour) ``` --- ### **关键问题解决方案** 1. **经度范围不匹配** - **现象**:切片后数据为空 - **修复**:若数据经度以-180~180存储,而目标区域为东经,需转换负值: ```python lon_min, lon_max = 100, 120 # 东经100°E-120°E # 若数据经度为-180~180,则转换负值范围(例如东经120°=120,东经170°=170;西经120°=-120) ``` 2. **CAPE值异常低/高** - **调整色标**:动态设置`vmin`/`vmax`: ```python vmax = cape_subset.quantile(0.95).item() # 取95%分位数作为最大值 ``` 3. **地图投影偏移** - **验证**:确保`pcolormesh`与`ax.set_extent`使用相同投影(`transform=ccrs.PlateCarree()`) --- ### **扩展功能** 1. **叠加风场/降水数据** 使用`quiver`绘制风矢量: ```python u = ds['u10'].sel(time="2019-07-05", longitude=slice(100,120), latitude=slice(40,30)) v = ds['v10'].sel(time="2019-07-05", longitude=slice(100,120), latitude=slice(40,30)) ax.quiver(u.longitude[::2], u.latitude[::2], u.isel(time=hour)[::2,::2], v.isel(time=hour)[::2,::2], scale=300, color='white') ``` 2. **输出动画** 使用`imageio`生成GIF: ```python import imageio images = [imageio.imread(f"CAPE_{hour:02d}.png") for hour in range(24)] imageio.mimsave('CAPE_animation.gif', images, duration=0.5) ``` --- ### **参考文献** [^1]: ERA5数据纬度存储顺序:https://confluence.ecmwf.int/display/CKB/ERA5%3A+data+documentation [^2]: Cartopy地图要素配置:https://scitools.org.uk/cartopy/docs/latest/matplotlib/feature_interface.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值