Skip to content

Commit e1afdc5

Browse files
author
yxdragon
committed
1.0
1 parent 66f3ccb commit e1afdc5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2245
-490
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ coverage.xml
4747
*.cover
4848
.hypothesis/
4949
.pytest_cache/
50-
pygis/data/
50+
geonumpy/data/
51+
doc/imgs/
5152

5253
# Translations
5354
*.mo

README.md

+144-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,144 @@
1-
# pygis
2-
a gis libraries extending gdal and geopandas
1+
# geonumpy
2+
geonumpy 是一个 GIS,遥感影像处理库,实现了矢量,遥感影像读取,存储,预处理,拼接,重采样,常规指标计算,地图绘制等功能。
3+
4+
5+
6+
### 安装
7+
8+
依赖库:numpy,scipy, matplotlib, pandas
9+
10+
地理依赖库:gdal, fiona, shapely, geopandas
11+
12+
几个地理依赖库不太好装,请参阅 geopandas 官网,有详细的安装方法。
13+
14+
geonumpy 暂时没有上传pypi, 请下载后使用 pip install -e 命令加入PythonPath
15+
16+
17+
18+
19+
### 文档
20+
[**geonumpy 文档**]()
21+
22+
1. [geonumpy api 文档](./doc/index.md#geonumpy API 文档)
23+
2. [geonumpy 操作手册](./doc/index.md#geonumpy 用户手册)
24+
25+
26+
27+
## 功能简介
28+
29+
这里简单介绍 geonumpy 的部分功能,可以让读者快速有一个认识,更多,具体功能,请参阅文档。
30+
31+
32+
33+
### 影像读取
34+
35+
```python
36+
path = '../data/landsat/LC08_L1TP_122033_20190506_20190506_01_RT_B5.TIF'
37+
landsat = gio.read_tif(path)
38+
39+
# landsat is a GeoArray object which subclass the numpy.ndarray
40+
>>> landsat.shape
41+
(7821, 7691)
42+
43+
# but with crs
44+
>>> landsat.crs
45+
4326
46+
47+
# and transform matrix
48+
>>> landsat.mat
49+
array([[ 4.556850e+05, 3.000000e+01, 0.000000e+00],
50+
[ 4.423215e+06, 0.000000e+00, -3.000000e+01]])
51+
52+
plt.imshow(landsat, cmap='gray')
53+
plt.show()
54+
```
55+
56+
![landsat](./geonumpy/doc/imgs/02.png)
57+
58+
59+
60+
### 去条带
61+
62+
```python
63+
path = '../data/landsat-gap/LE07_L1TP_123037_20180721_20180816_01_T1_sr_ndvi.tif'
64+
img = gio.read_tif(path)
65+
# 去条带, img==-999 是掩膜,-999为无效值
66+
degapimg = gpt.degap(img.copy(), img==-9999, 10)
67+
68+
# plot two images ...
69+
```
70+
![](./geonumpy/doc/imgs/16.png)
71+
72+
73+
74+
### 影像拼接
75+
76+
![](./geonumpy/doc/imgs/06.png)
77+
78+
```python
79+
# 读取山东省 shapefile
80+
shandong = gio.read_shp('../data/shape/shandong.shp')
81+
# 转为 web 墨卡托 投影
82+
shandong = shandong.to_crs(3857)
83+
# 缩放到 2048*1536大小,边距0.05,计算相关空间信息
84+
box = gutil.shp2box(shandong, (2048,1536), 0.05, 1)
85+
# 用空间信息实例化 GeoArray 对象
86+
paper = gnp.frombox(*box, dtype=np.int16)
87+
# 读取所有影像的 0 通道
88+
fs = glob('../data/modis/*.hdf')
89+
rasters = [gio.read_hdf(i, 0) for i in fs]
90+
# 将 rasters 投影到 paper
91+
gmt.match_multi(rasters, paper, out='in')
92+
93+
plt.imshow(paper)
94+
plt.show()
95+
```
96+
97+
![](./geonumpy/doc/imgs/04.png)
98+
99+
这里我们使用一个 shapefile 转换到 web 墨卡托坐标系,并用矢量图形确定了图像空间信息,然后将图像块投影到目标图像上,从而实现拼接。
100+
101+
102+
103+
### 矢量图绘制
104+
105+
```python
106+
import geonumpy.io as gio
107+
import geonumpy.draw as gdraw
108+
109+
# 读取山东省矢量图
110+
shandong = gio.read_shp('../data/shape/shandong.shp')
111+
# 投影成 web 墨卡托
112+
shandong = shandong.to_crs(3857)
113+
# 从矢量图计算图像空间信息,尺寸3600*2400,边距十分之一
114+
box = gutil.shp2box(shandong, (3600, 2400), 0.1, 1)
115+
# 从空间信息实例化 GeoArray 对象
116+
paper = gnp.frombox(*box, dtype=np.uint8)
117+
# 底图赋值为白色
118+
paper[:] = 255
119+
# 绘制多边形,颜色为0,线条宽度为2
120+
gdraw.draw_polygon(paper, shandong, 0, 2)
121+
# 绘制刻度,左右80,上下50,单位间隔1,坐标系4326,使用times字体,32好,颜色0,线条宽度2,刻度高5
122+
gdraw.draw_ruler(paper, 80, 50, -80, -50, 1, 4326, ('times', 32), 0, 2, 5)
123+
# 绘制文字标签,用name字段,颜色0,黑体,32好,中心对齐
124+
gdraw.draw_lab(paper, shandong, 'name', 0, ('simhei', 32), 'ct')
125+
# 绘制比例尺,右侧180,底部100的位置,宽度占十分之三宽度,高度30,times字体,48号,颜色0,单位km,线条宽度3, 右对齐
126+
gdraw.draw_unit(paper, -180, -100, 0.3, 30, ('times', 48), 0, 'km', 3, anc='r')
127+
# 绘制标题文字,在180, 120的位置,颜色0,楷体,128号,绘制山东省
128+
gdraw.draw_text(paper, '山东省', 180, 120, 0, ('simkai', 128))
129+
# 在右上角240,240的位置,黑体,100号,线条宽度2,箭头中心线高度100,颜色0,绘制指北针
130+
gdraw.draw_N(paper, -240, 240, ('simhei', 100), 2, 100, 0)
131+
132+
from PIL import Image
133+
Image.formarray(paper).show()
134+
```
135+
136+
![](./geonumpy/doc/imgs/08.png)
137+
138+
geonumpy 提供了为地图定制的一套绘图函数,可以方便的绘制比例尺,指北针,图例等元素。
139+
140+
141+
142+
## 更多功能
143+
144+
geopandas 还在开发过程中,更多功能请查阅文档,也欢迎提交 issue 或贡献代码。

doc/api_download.md

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# geonumpy.download
2+
3+
遥感影像获取是一切分析的前提,好在目前有一些开放的卫星,免费向大家提供下载服务,download 模块主要功能就是实现从各大开放网站上下载遥感影像数据。
4+
5+
6+
7+
## modis_search
8+
9+
search(product, level, areas, terms)
10+
11+
**product:** modis 的产品类型,例如['MOD09Q1', 'MOD11A2'], level=6, areas=['h25v05', 'h27v05', 'h28v05'], terms=[(2019, (0,30))]
12+
13+
**level:** level=6,代表影像等级
14+
15+
**areas:** 要下载区域进行行列编号,例如 ['h25v05', 'h27v05', 'h28v05']
16+
17+
**terms:** 周期,[(2019, (0,30)), ...],年份跟着变数,支持多个。
18+
19+
```python
20+
files = search(['MOD09Q1', 'MOD11A2'],
21+
level=6,
22+
areas=['h25v05', 'h27v05', 'h28v05'],
23+
terms=[(2019, (0,30))])
24+
25+
>>>
26+
searching... MOD09Q1 level 6 2019
27+
001 day ... done
28+
009 day ... done
29+
017 day ... done
30+
025 day ... done
31+
32+
searching... MOD11A2 level 6 2019
33+
001 day ... done
34+
009 day ... done
35+
017 day ... done
36+
025 day ... done
37+
38+
24 new files found!
39+
```
40+
41+
42+
43+
## modis_download
44+
45+
modis_download(files, des):
46+
47+
**files:** 上一步search到的结果,要下载的文件名
48+
49+
**des:** 存储目录
50+
51+
```python
52+
files = search(['MOD09Q1', 'MOD11A2'], level=6, areas=['h25v05', 'h27v05', 'h28v05'], terms=[(2019, (0,30))])
53+
54+
download(files, '')
55+
56+
>>> MOD09Q1.A2019001.h25v05.006.2019010205323.hdf ...
57+
```
58+
59+
60+
61+
## landsat_search
62+
63+
landsat_search(product, crs, start, end, month=None, lcloud='', scloud='', page=1)
64+
65+
**product:** 选项,7,8,45,表示不同代的产品
66+
67+
**crs:** 要下载的行列号序列
68+
69+
**start:** 要下载的开始时间
70+
71+
**end:** 要下载的结束时间
72+
73+
**month:** 下载的月份列表
74+
75+
**lcloud:** 陆地云量小于该值
76+
77+
**scloud:** 卫星影像云量小于该值
78+
79+
**pare:** 下载的页数,满页后不再改变
80+
81+
```python
82+
records = get_record(7, blocks, '06/30/2018', '07/30/2019', None, 10, 10, 1)
83+
>>>
84+
searching 123 043, ...
85+
1
86+
searching 119 037, ...
87+
3
88+
searching 122 037, ...
89+
6
90+
91+
>>>
92+
LE07_L1TP_123043_20181126_20181222_01_T1
93+
LE07_L1TP_119037_20190509_20190604_01_T1
94+
LE07_L1TP_119037_20181029_20181124_01_T1
95+
LE07_L1TP_119037_20181013_20181108_01_T1
96+
LE07_L1TP_122037_20190701_20190727_01_T1
97+
LE07_L1TP_122037_20190311_20190406_01_T1
98+
LE07_L1TP_122037_20190122_20190217_01_T1
99+
LE07_L1TP_122037_20181018_20181113_01_T1
100+
LE07_L1TP_122037_20181002_20181030_01_T1
101+
LE07_L1TP_122037_20180714_20180809_01_T1
102+
```
103+
104+
105+
106+
# landsat_download
107+
108+
...

0 commit comments

Comments
 (0)