# GE分享會 Unit 3
<span style="color:#2dd5c9; font-family: Microsoft JhengHei;"><空間資料處理>
KHCHO@GE, 2019
GitHub: kuan-hsun</span>
---
## Part 0. 前言
* 空間資料處理的範疇
----
### Python基礎
* 2.7/3.x、套件、環境管理、編譯器
* 基本的程式設計概念:型別、迴圈、函式
* Zen of Python
----
### 空間資料處理的範疇
空間資料套件的生態鏈
拿來主義 vs 重複造輪子
重要的是要知道拿什麼
----
### 為何要自動化?
<!-- .slide: data-background="http://i.giphy.com/90F8aUepslB84.gif" -->
----
### 人力有時而窮

----
> <span style="color:#2dd5c9; font-family: Microsoft JhengHei;">“把人力從瑣碎的工作中解放,去做更有價值的事。”</span>
---
## 今天的幾個例子
* 向量資料處理 - 幾何
* 找出線段的角度
* 從坐標寫入幾何
* 向量資料處理 - 屬性
* 網格資料處理
* 常用案例
* geocoding
* 坐標轉換
---
## Part 1. ArcMap與ArcPy
----
### 1. 基礎
* ArcPy (python 2.7)
* 在ArcMap執行
* 在ArcCatalog執行
* code block
* standalone script
* 使用ArcPy取代工具箱click-click
* 如何查詢文件
* 批次操作
* ArcPy的獨有函數(工具箱所沒有的)
* Cursor, etc.
---
#### 暖身時間
```python=
#對MXD裡所有圖層投影
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
arcpy.mapping.ListLayers(mxd)
layers = arcpy.mapping.ListLayers(mxd)
sr = arcpy.SpatialReference("TWD 1997 TM Taiwan")
for fc in layers:
arcpy.DefineProjection_management(fc,sr)
```
----
### 2. 使用
* 向量資料處理 - 幾何
* 找出線段的角度
* 從坐標寫入幾何
* 向量資料處理 - 屬性
* 網格資料處理
* 常用案例
* geocoding
* 坐標轉換
----
### 2.1 向量資料處理 - 找出線段的角度
```python=
import math
def GetGeographicalDegrees(shape):
radian = math.atan2(shape.lastpoint.y - shape.firstpoint.y,
shape.lastpoint.x - shape.firstpoint.x)
radian = radian - (math.pi /2 ) # turn minus 90°
if (radian > 0):
degrees = 360 - ( radian * 360) / ( 2 * math.pi )
else:
degrees = 360 - ((2* math.pi + radian ) * 360) / ( 2 * math.pi )
return degrees
```
----
* 與其他python library共用
* 打開Python的世界
* matplotlib
---
## Part 2. Python的處理鍊
----
### 1. 基礎
* 沒有ArcMap的日子怎麼過 (python 3.x)
* 看到這個就是很不開心 (套件需要license)
* 空間資料套件之間的關係 - open
* GDAL
* Fiona, GeoPandas, etc
----
### 2. 使用
* 向量資料處理 - 幾何
* 找出線段的角度
* 從坐標寫入幾何
* 向量資料處理 - 屬性
* 網格資料處理
* 常用案例
* geocoding
* 坐標轉換
----
### 3. 活用
* multiprocessing
* 爬蟲
---
<!-- .slide: data-background="#1A237E" -->
## Part 3. 空間資料的版本控制
----
## Git & Geogig
> Git的工作流
Geogig
協作的價值
歷程 commit 版本 分支 合併 品質檢查(可套用現有邏輯)
---
## 結語
---
```graphviz
digraph automation {
nodesep=0.2
node [color=Black,fontname=Courier,fontsize = 12, shape=box]
edge[color="#3277e5"]
//內容
收到任務->有沒有人做過
有沒有人做過->"找出規則\n\(而非埋頭苦幹\)" [ label="否" ];
有沒有人做過->"恭喜" [ label="是" ];
"找出規則\n\(而非埋頭苦幹\)"->手動處理[ label="無" ];
"找出規則\n\(而非埋頭苦幹\)"->"估計時間\n\(撰寫難度 vs 時限\)"[ label="有 \(75%以上\)" ];
"估計時間\n\(撰寫難度 vs 時限\)"->未來不會再遇到[ label="不划算" ];
"估計時間\n\(撰寫難度 vs 時限\)"->未來還可能遇到[ label="不划算" ];
"估計時間\n\(撰寫難度 vs 時限\)"->自動化 [ label="划算" ];
未來不會再遇到->"手動處理\n\(埋頭苦幹吧\)"
未來還可能遇到->自動化
}
}
```
---
### 參考資料
* [10-reasons-to-stop-using-arcgis-and-start-using-qgis](https://www.hatarilabs.com/ih-en/10-reasons-to-stop-using-arcgis-and-start-using-qgis)
* [When to use ModelBuilder over Python scripting and vice versa?](https://gis.stackexchange.com/questions/57381/when-to-use-modelbuilder-over-python-scripting-and-vice-versa)
* https://gis.stackexchange.com/questions/44065/calculating-incidence-angle-of-polyline/218148
{"metaMigratedAt":"2023-06-14T18:21:20.064Z","metaMigratedFrom":"YAML","title":"GE分享會 Unit 3","breaks":true,"slideOptions":"{\"transition\":\"slide\"}","contributors":"[{\"id\":\"4167d621-f116-4694-8ad1-a46cf9fccdc8\",\"add\":6067,\"del\":2685}]"}