> 文章列表 > 【Cartopy基础入门】如何丝滑的加载Geojson数据

【Cartopy基础入门】如何丝滑的加载Geojson数据

【Cartopy基础入门】如何丝滑的加载Geojson数据

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

Cartopy基础入门

【Cartopy基础入门】Cartopy的安装
【Cartopy基础入门】如何丝滑的加载Geojson数据


文章目录

  • Cartopy基础入门
  • 一、Geojson数据来源
  • 二、Cartopy加载geojson数据
    • 1.geojson数据
    • 2.常规图片:png、jpg
    • 3.流文件格式的图
    • 4.geodjango结合Cartopy

一、Geojson数据来源

空间的文本格式包括wkt、wkb、geojson等,geojson广泛存在前后端传输,文件读取,文本格式转换等。
我们系统是vue+leaflet做的前端,django作为后端,leaflet对于坐标的处理跟其他地图组件不同,其他框架都是经度在前,维度在后,leaflet是维度在前经度在后。leaflet支持geojson的加载。

二、Cartopy加载geojson数据

1.geojson数据

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.io.img_tiles as cimgt
from shapely.geometry import GeometryCollection, Point, asShape, shape# 画布
proj = ccrs.PlateCarree()
plt.figure(figsize=[10, 6], dpi=300, edgecolor='coral')
geo_axes = plt.axes(projection=proj)
# 网格线
geo_axes.gridlines(draw_labels=True, x_inline=False, y_inline=False)geom_json = json.loads(map_data['geom'].geojson)
print('geom_json ', geom_json )
geometries = shape(geom_json)
print('geometries', geometries)

【Cartopy基础入门】如何丝滑的加载Geojson数据

2.常规图片:png、jpg

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.io.img_tiles as cimgt
from shapely.geometry import GeometryCollection, Point, asShape, shape# 画布
proj = ccrs.PlateCarree()
plt.figure(figsize=[10, 6], dpi=300, edgecolor='coral')
geo_axes = plt.axes(projection=proj)
# 网格线
geo_axes.gridlines(draw_labels=True, x_inline=False, y_inline=False)geom_json = json.loads(map_data['geom'].geojson)
print('geom_json ', geom_json )
geometries = shape(geom_json)
print('geometries', geometries)geo_axes.add_geometries(geometries,crs=ccrs.PlateCarree(),# facecolor='k',# edgecolor='k',linestyle='--')
# png图
# plt.show()
plt.savefig('t1.png', dpi=300, bbox_inches='tight', transparent=True)

因为shapely版本问题,我这里是2.0版本,用上边的方法会有一个警告。
【Cartopy基础入门】如何丝滑的加载Geojson数据
可以用以下代码替换

print('geometries', geometries)
print('geometries', geometries.geoms)	    
geo_axes.add_geometries(geometries.geoms,crs=ccrs.PlateCarree(),# facecolor='k',# edgecolor='k',linestyle='--')

【Cartopy基础入门】如何丝滑的加载Geojson数据

3.流文件格式的图

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.io.img_tiles as cimgt
from shapely.geometry import GeometryCollection, Point, asShape, shape# 画布
proj = ccrs.PlateCarree()
plt.figure(figsize=[10, 6], dpi=300, edgecolor='coral')
geo_axes = plt.axes(projection=proj)
# 网格线
geo_axes.gridlines(draw_labels=True, x_inline=False, y_inline=False)geom_json = json.loads(map_data['geom'].geojson)
print('geom_json ', geom_json )
geometries = shape(geom_json)
print('geometries', geometries)
geo_axes.add_geometries(geometries,crs=ccrs.PlateCarree(),# facecolor='k',# edgecolor='k',linestyle='--')
# io流图像
img_buf = io.BytesIO()
plt.savefig(img_buf, dpi=300)
img_buf.seek(0)

4.geodjango结合Cartopy

map_data[‘geom’]是geodjango系统的GEOSGeometry格式数据,这个数据就是geodjango数据库的数据。GEOSGeometry的geojson和json方法提供的是str格式,shapely的shape方法接收的是geojson格式,所以我们需要json.loads。

    print('geom', type(json.loads(map_data['geom'].geojson)))geometries = shape(json.loads(map_data['geom'].geojson))