{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69756178",
   "metadata": {},
   "outputs": [],
   "source": [
    "import arcpy\n",
    "import os\n",
    "\n",
    "source_workspace  = r\"C:\\Users\\johnnychan\\Desktop\\2026年一期作水稻灌水分布0119\"   # 原始檔案所在目錄\n",
    "merge_gdb = r\"C:\\Users\\johnnychan\\Desktop\\gis2\\output_20261_0204.gdb\"         # new geodatabase所建立，用來儲存結果\n",
    "output_name = r\"output\"\n",
    "\n",
    "arcpy.env.overwriteOutput = True\n",
    "\n",
    "# 設定來源工作目錄\n",
    "arcpy.env.workspace = source_workspace\n",
    "\n",
    "shpList = arcpy.ListFeatureClasses(\"*.shp\")\n",
    "print(shpList)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78eab32c",
   "metadata": {},
   "source": [
    "# 合併所有shp檔"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f20f340f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 若 merge_gdb 尚未存在，則自動建立 geodatabase\n",
    "if not arcpy.Exists(merge_gdb):\n",
    "    parent_folder = os.path.dirname(merge_gdb)\n",
    "    gdb_name = os.path.basename(merge_gdb)\n",
    "    arcpy.CreateFileGDB_management(parent_folder, gdb_name)\n",
    "    print(f\"已建立 geodatabase：{merge_gdb}\")\n",
    "\n",
    "# 定義 merge 後輸出圖資的完整路徑\n",
    "merge_fc = os.path.join(merge_gdb, output_name)\n",
    "\n",
    "# 執行 merge\n",
    "arcpy.Merge_management(shpList, merge_fc)\n",
    "print(f\"已將 {len(shpList)} 個圖資 merge 並匯出至 {merge_fc}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31e6e929",
   "metadata": {},
   "source": [
    "# 計算與受益地交集面積占比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2d585fac",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 設定來源工作目錄\n",
    "arcpy.env.workspace = merge_gdb\n",
    "\n",
    "# 受益地shp檔案\n",
    "benefit_fc = r\"Z:\\91_數位發展處\\01_資料專區\\80_GIS圖資\\灌排受益地圖資\\農水署灌排受益地_113年11月版\\農水署灌排受益地_113年11月版.gdb\\彙整資料\\農水署灌排受益地_113年11月版\"\n",
    "intersect_fc = \"parcel_intersect\"\n",
    "\n",
    "# 確保沒有 selection\n",
    "arcpy.management.SelectLayerByAttribute(merge_fc, \"CLEAR_SELECTION\")\n",
    "arcpy.management.SelectLayerByAttribute(benefit_fc, \"CLEAR_SELECTION\")\n",
    "\n",
    "# =========================執行intersect計算=========================\n",
    "arcpy.analysis.Intersect(\n",
    "    in_features=[merge_fc, benefit_fc],\n",
    "    out_feature_class=intersect_fc\n",
    ")\n",
    "\n",
    "# 建新欄位：area_inter，值 = area_inter\n",
    "arcpy.management.AddField(\n",
    "    intersect_fc,\n",
    "    \"area_inter\",\n",
    "    \"DOUBLE\"\n",
    ")\n",
    "arcpy.management.CalculateField(\n",
    "    intersect_fc,\n",
    "    \"area_inter\",\n",
    "    \"!shape.area!\",\n",
    "    \"PYTHON3\"\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "822a2b32",
   "metadata": {},
   "outputs": [],
   "source": [
    "# ==================執行Dissolve分析：同坵塊面積加總====================\n",
    "dissolve_fc = \"parcel_dissolve\"\n",
    "\n",
    "arcpy.management.Dissolve(\n",
    "    in_features=intersect_fc,\n",
    "    out_feature_class=dissolve_fc,\n",
    "    dissolve_field=\"PARCEL_NO\",\n",
    "    statistics_fields=[[\"area_inter\", \"SUM\"]]\n",
    ")\n",
    "\n",
    "# 建立新欄位：PARCEL_TXT，值 = PARCEL_NO\n",
    "arcpy.management.AddField(dissolve_fc, \"PARCEL_TXT\", \"TEXT\", field_length=50)\n",
    "arcpy.management.CalculateField(\n",
    "    dissolve_fc,\n",
    "    \"PARCEL_TXT\",\n",
    "    \"!PARCEL_NO!\",\n",
    "    \"PYTHON3\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1a220685",
   "metadata": {},
   "outputs": [],
   "source": [
    "# =========================判斷是否為受益地===========================\n",
    "merge_lyr = \"merge_lyr\"\n",
    "arcpy.management.MakeFeatureLayer(merge_fc, merge_lyr)\n",
    "\n",
    "# Join _dissolve圖層\n",
    "arcpy.management.AddJoin(\n",
    "    merge_lyr,\n",
    "    \"PARCEL_NO\",\n",
    "    dissolve_fc,\n",
    "    \"PARCEL_TXT\",\n",
    ")\n",
    "\n",
    "# 建新欄位：\"受益地\"\n",
    "arcpy.management.AddField(\n",
    "    merge_lyr,\n",
    "    \"受益地\",\n",
    "    \"TEXT\",\n",
    "    field_length=2\n",
    ")\n",
    "\n",
    "\n",
    "# 函數判斷 \"坵塊與受益地交集面積/原坵塊面積>0.8\" 為受益地\n",
    "code_block = \"\"\"\n",
    "def f(a, b):\n",
    "    if a and b and a / b > 0.8:\n",
    "        return '是'\n",
    "    else:\n",
    "        return '否'\n",
    "\"\"\"\n",
    "expression = 'f(!parcel_dissolve.SUM_area_inter!, !output.area!)'\n",
    "\n",
    "arcpy.management.CalculateField(\n",
    "    in_table=merge_lyr,\n",
    "    field=\"受益地\",\n",
    "    expression=expression,\n",
    "    expression_type=\"PYTHON3\",\n",
    "    code_block=code_block\n",
    ")\n",
    "\n",
    "# 移除 Join\n",
    "arcpy.management.RemoveJoin(merge_lyr)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6274ebe",
   "metadata": {},
   "source": [
    "# Spatial Join對水利小組"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5f004586",
   "metadata": {},
   "outputs": [],
   "source": [
    "# ==================執行Spatial Join對照水利小組編號====================\n",
    "# 讀取水利小組範圍圖層\n",
    "water_group_fc = r\"Z:\\91_數位發展處\\01_資料專區\\80_GIS圖資\\一所\\農水署灌區、圳路圖_112年版.gdb\\_4水利小組範圍\"\n",
    "sj_fc = \"parcel_sj\"\n",
    "\n",
    "# 執行 Spatial Join (中心點在多邊形內)\n",
    "arcpy.analysis.SpatialJoin(\n",
    "    target_features=merge_fc,\n",
    "    join_features=water_group_fc,\n",
    "    out_feature_class=sj_fc,\n",
    "    join_operation=\"JOIN_ONE_TO_ONE\",\n",
    "    join_type=\"KEEP_ALL\",\n",
    "    match_option=\"HAVE_THEIR_CENTER_IN\"\n",
    ")\n",
    "\n",
    "# 將水利小組編號加入原始圖資\n",
    "arcpy.management.JoinField(\n",
    "    in_data=merge_fc,\n",
    "    in_field=\"OBJECTID\",\n",
    "    join_table=sj_fc,\n",
    "    join_field=\"TARGET_FID\",\n",
    "    fields=[\"水利小組編號\"]\n",
    ")\n",
    "\n",
    "# 刪除中繼圖層\n",
    "arcpy.management.Delete(sj_fc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78f76dc2",
   "metadata": {},
   "source": [
    "# 輸出table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d82100b",
   "metadata": {},
   "outputs": [],
   "source": [
    "out_folder = r\"C:\\Users\\johnnychan\\Desktop\\gis2\"\n",
    "out_csv = \"merge_fc_final.csv\"\n",
    "\n",
    "arcpy.conversion.TableToTable(\n",
    "    in_rows=merge_fc,\n",
    "    out_path=out_folder,\n",
    "    out_name=out_csv,\n",
    "    where_clause=\"水利小組編號 IS NOT NULL AND 受益地 = '是'\"\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
