# 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" --> ---- ### 人力有時而窮 ![automation](https://raw.githubusercontent.com/kuan-hsun/imagesForNotes/master/ithelp2018.JPG) ---- > <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}]"}
    246 views