Skip to content

Commit

Permalink
+doc/ui/pygis
Browse files Browse the repository at this point in the history
  • Loading branch information
xinetzone committed Apr 8, 2024
1 parent 4254dcc commit a02acde
Show file tree
Hide file tree
Showing 15 changed files with 2,901 additions and 1 deletion.
4 changes: 3 additions & 1 deletion doc/ui/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

```{toctree}
fastapi/index
nicegui <https://xinetzone.github.io/vision/ext/nicegui/>
NiceGUI <https://xinetzone.github.io/vision/ext/nicegui/>
Dash <https://xinetzone.github.io/vision/ext/dash/index.html>
pygis/index
others/index
```
8 changes: 8 additions & 0 deletions doc/ui/pygis/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# PyGIS

[PyGIS](https://pygis.io/)(开源空间编程与遥感)利用诸如 geopanda、Rasterio、Sklearn 和 Geowombat 等开源 Python 包来更好地理解我们的世界,并帮助预测它的未来。

```{toctree}
start/index
vector-ops/index
```
10 changes: 10 additions & 0 deletions doc/ui/pygis/start/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# PyGIS 快速上手

```{toctree}
spatial-data
storage-formats
spatial-vector-data
spatial-raster-data
test
```
318 changes: 318 additions & 0 deletions doc/ui/pygis/start/spatial-data.ipynb

Large diffs are not rendered by default.

171 changes: 171 additions & 0 deletions doc/ui/pygis/start/spatial-raster-data.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 光栅数据\n",
"\n",
"栅格数据模型使用单元格数组或像素来表示真实世界的对象。光栅数据集通常用于表示和管理图像、表面温度、数字高程模型和许多其他实体。栅格可以被认为是区域对象的一种特殊情况,其中区域被划分为规则的单元格网格。但是,有规律间隔的标记点数组可能是更好的类比,因为栅格存储为值数组,其中每个单元格在大多数 GIS 环境中由单个坐标对定义。在栅格数据模型中隐含着一个与每个单元格或像素相关的值。这与向量模型相反,向量模型可能具有或不具有与几何原语相关的值。\n",
"\n",
"为了处理光栅数据,将使用 `rasterio` 和稍后的 `geowombat`。幕后是 `numpy.ndarray` 做了所有繁重的工作。为了理解栅格是如何工作的,它有助于从零开始构建栅格。\n",
"\n",
"这里创建了两个 ndarray 对象,一个 X 跨越经度(longitude) $[-90°,90°]$,另一个 Y 跨越纬度(latitude) $[-90°,90°]$。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-90., -54., -18., 18., 54., 90.],\n",
" [-90., -54., -18., 18., 54., 90.],\n",
" [-90., -54., -18., 18., 54., 90.],\n",
" [-90., -54., -18., 18., 54., 90.],\n",
" [-90., -54., -18., 18., 54., 90.],\n",
" [-90., -54., -18., 18., 54., 90.]])"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"x = np.linspace(-90, 90, 6)\n",
"y = np.linspace(-90, 90, 6)\n",
"X, Y = np.meshgrid(x, y)\n",
"X"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"生成一些表示温度的数据并将其存储在数组 `Z` 中:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"\n",
"Z1 = np.abs(((X - 10) ** 2 + (Y - 10) ** 2) / 1 ** 2)\n",
"Z2 = np.abs(((X + 10) ** 2 + (Y + 10) ** 2) / 2.5 ** 2)\n",
"Z = (Z1 - Z2)\n",
"\n",
"plt.imshow(Z)\n",
"plt.title(\"Temperature\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意,`Z` 不包含关于其位置的数据。它只是数组,存储在 `x` 和 `y` 中的信息与它完全没有关联。这些位置数据通常存储在文件头文件中。为了在地图上“定位”数组,将使用仿射变换。\n",
"\n",
"## 为数组分配空间数据\n",
"\n",
"好的,我们有一个数据数组和每个单元格的一些坐标,但是我们如何从中创建一个空间数据集呢?为了做到这一点,我们需要三个组成部分:\n",
"\n",
"- 数据数组,通常是 xy 坐标\n",
"- 一种坐标参考系统,它定义了我们所使用的坐标空间(例如度或米,本初子午线的位置等)\n",
"- 定义左上角坐标和单元格分辨率(resolution)的变换\n",
"\n",
"一旦有了这些组件,就可以在几行代码中用 python 编写出工作的空间栅格数据集。只需要以 `rasterio` 能够理解的格式提供上面列出的信息。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from rasterio.transform import Affine\n",
"import rasterio as rio\n",
"\n",
"res = (x[-1] - x[0]) / 240.0\n",
"transform = Affine.translation(x[0] - res / 2, y[0] - res / 2) * Affine.scale(res, res)\n",
"\n",
"# open in 'write' mode, unpack profile info to dst\n",
"with rio.open(\n",
" \"./new_raster.tif\",\n",
" \"w\",\n",
" driver=\"GTiff\", # output file type\n",
" height=Z.shape[0], # shape of array\n",
" width=Z.shape[1],\n",
" count=1, # number of bands\n",
" dtype=Z.dtype, # output datatype\n",
" crs=\"+proj=latlong\", # CRS\n",
" transform=transform, # location and resolution of upper left cell\n",
") as dst:\n",
" # check for number of bands\n",
" if dst.count == 1:\n",
" # write single band\n",
" dst.write(Z, 1)\n",
" else:\n",
" # write each band individually\n",
" for band in range(len(Z)):\n",
" # write data, band # (starting from 1)\n",
" dst.write(Z[band], band + 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```{note}\n",
"光栅数据通常是“多波段”(multiband)的(如红、绿、蓝),所以这里提供了多波段和单波段数据都适用的代码。\n",
"\n",
"如果存储的是多波段数据,则维度应该存储为 `(band, y, x )`。\n",
"```"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.10.4 ('tvmx': conda)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.4"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "e579259ee6098e2b9319de590d145b4b096774fe457bdf04260e3ba5c171e887"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
1,055 changes: 1,055 additions & 0 deletions doc/ui/pygis/start/spatial-vector-data.ipynb

Large diffs are not rendered by default.

Loading

0 comments on commit a02acde

Please sign in to comment.