乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用Python創(chuàng)建你第一個GIS程序[3]:前后端搭建

       GIS薈 2021-09-19
      前言:為了區(qū)分說明,我們這里也用前端后端這個概念來闡述。本章節(jié)使用簡單的案例,分別展示前后端的代碼,包括一個簡單前端 GUI 界面的搭建流程和代碼。


      后端

      為了區(qū)分說明,我們這里也用前端后端這個概念來闡述。
      后端在這里就是我們的核心運行代碼,是我們程序功能的實現(xiàn)。
      而在這里我們要實現(xiàn)一個怎樣的功能呢?
      由于是制作一個簡單的程序,所以我們也選了一個較為簡單的功能,所以選了下面這個文章
      《Python和ArcGIS自動化制圖完全指南》第一節(jié)中展示的功能:把線矢量轉換成面,然后給面添加4個新字段。
       
      因為之前的文章講過,所以這里就多說。普普通通的源代碼如下:


      # -*- coding:utf-8 -*-

      # ---------------------------------------------------------------------------

      # Author: LiaoChenchen

      # Created on: 2021/1/17 14:53

      # arcpy自動化制圖完全指南(一):使用arcpy完成工作流

      import arcpy

      import os

      class InitPath(object):

         """初始化工作空間,創(chuàng)建gdb數(shù)據(jù)庫(如果沒有的話)"""

         def __new__(cls, *args, **kwargs):

             if not hasattr(cls, "_instance"):

                 # if not cls._instance:

                 cls._instance = object.__new__(cls)

             return cls._instance

         def __init__(self):

             """_________________________create folder____________________________"""

             scratch_path = "D:\doc\Scratch"

             try:

                 if not os.path.isdir(scratch_path):

                     os.makedirs(scratch_path)

             except:

                 scratch_path = "E:\doc\Scratch"

                 if not os.path.isdir(scratch_path):

                     os.makedirs(scratch_path)

             """_________________________create folder____________________________"""

             # make gdb

             scratch_gdb = os.path.join(scratch_path, "Scratch.gdb")

             if not arcpy.Exists(scratch_gdb):

                 arcpy.CreateFileGDB_management(scratch_path, "Scratch")

             arcpy.env.workspace = scratch_path

             arcpy.env.overwriteOutput = True

             

             self.scratch_path = scratch_path

             self.scratch_gdb = scratch_gdb

         

         def __iter__(self):

             return (i for i in (self.scratch_path, self.scratch_gdb))

      folder_path, gdb_path = InitPath()

      arcpy.env.workspace = gdb_path

      arcpy.env.overwriteOutput = True

      """********************************流程代碼**********************************"""

      line = "data/line_data.shp"

      # 線要素轉面,生成的面矢量名稱為 polygon

      arcpy.FeatureToPolygon_management (line, "polygon")

      # 給 polygon 圖層添加字段

      for name in ["CJQYMC", "CJQYDM", "XJQYMC", "XJQYDM"]:

         arcpy.AddField_management("polygon", name, "TEXT", field_length = 100)

       
      可是只是目前這種狀況的話,還是這能在黑乎乎的命令行窗口運行。完全沒有達到我們之前的預期,所以接下來,就需要編寫 GUI 程序了(圖形用戶界面程序)。
       

      前端

      《用Python創(chuàng)建你第一個GIS程序》第二章講解過不同的 GUI 庫的選擇。所以這里的 GUI 界面我們使用 Python 自帶的 Tkinter庫 來編寫。
      Note: 在 Python2 中叫 Tkinter,而在 Python3 中叫 tkinter。
       

      1.創(chuàng)建基本界面

      GUI 圖形界面本質上就是一個無限循環(huán)程序,只有系統(tǒng)崩潰和人為干預才會退出。先完成一個基本的 GUI,代碼如下:

      # -*- coding:utf-8 -*-

      import Tkinter as tk

      class MyGUI(object):

         def __init__(self):

             self.root = tk.Tk()

             self.root.mainloop() # 執(zhí)行循環(huán)

      if __name__ == '__main__':

         MyGUI()

      self.root 是這個 GUI 程序的根基,或者說母體,后續(xù)的按鈕、輸入框都是創(chuàng)建在 self.root 的基礎上。他的創(chuàng)建方式是固定化的,不需要理解。
       
      生成的圖形界面如下,是一個空白的界面。但這是重要的一步

       

      2.添加輸入框和按鈕

      按鈕和輸入框無處不在,是人類和現(xiàn)代計算機程序發(fā)生交互的重要單位之一。
      下面講解如何創(chuàng)建你的第一個按鈕和輸入框。
      先創(chuàng)建出第一個按鈕

      # -*- coding:utf-8 -*-

      import Tkinter as tk

      class MyGUI(object):

         def __init__(self):

             self.root = tk.Tk()

             self.root.geometry("450x600+800+200") # 設置程序窗口大小和打開位置

             self.root.title("GIS") # 設置程序名稱

             self.create_widget()

             self.root.mainloop() # 執(zhí)行循環(huán)

         def create_widget(self):

             self.but = tk.Button(self.root, text=u"輸入線要素", relief="groove") # <<<注釋1>>>

             self.but.pack() # <<<注釋2>>>

         

      if __name__ == '__main__':

         MyGUI()

      方式 create_widget 用于生成各種小部件,并將它們“安裝”到 self.root 上。
       
      <<<注釋1>>>:生成代碼按鈕,Button類,正如名字所示,該類是用于生成按鈕。
      <<<注釋2>>>:擺放按鈕。
      運行效果如下:

       
      增加了一些細節(jié)

      # -*- coding:utf-8 -*-

      import Tkinter as tk

      class MyGUI(object):

         def __init__(self):

             self.root = tk.Tk()

             self.root.geometry("450x600+800+200") # 設置程序窗口大小和打開位置

             self.root.title("GIS") # 設置程序名稱

             self.create_widget()

             self.create_run_button()

             self.root.mainloop() # 執(zhí)行循環(huán)

         def create_widget(self):

             self.frame1 = tk.Frame(self.root, relief="raised", bd=3) #<<<注釋1>>>

             self.frame1.pack(fill="x")

             self.entry = tk.Entry(self.frame1) #<<<注釋2>>>

             self.entry.pack(side="left",expand=True, fill="x", pady=8, padx=10)

             self.but = tk.Button(

                 self.frame1, text=u"輸入線要素", relief="groove", width=10)

             self.but.pack(side="right", pady=8)

             

         def create_run_button(self): #<<<注釋3>>>

             # 生成下方的“運行”按鈕

             self.bottom_frame = tk.Frame(self.root,relief="raised",bd=3)

             self.bottom_frame.pack(side="bottom",fill="x",anchor="s")

             self.ok_button=tk.Button(

                 self.bottom_frame,text=u"運行",relief="groove", width=10)

             self.ok_button.pack(side="right", pady=8)

             

             

      if __name__ == '__main__':

         MyGUI()

      <<<注釋1>>>:使用 tk.Frame 類創(chuàng)建了一個”框“,將按鈕和輸入庫裝了進去,方便排列。
      <<<注釋2>>>:使用 tk.Entry類創(chuàng)建輸入框,就下方圖片中的白色長條。
      <<<注釋3>>>:在界面的最低端創(chuàng)建了一個“運行”組件:使用"框"將按鈕包住放最小面。該按鈕最后調用后端的核心功能來運行程序。
       
      運行結果如下:

       
      那么我們的簡單前端就搭建完畢了,非常簡單把。
       

      結束語

      該指南的一個中心思想不是做的大而全、盡善盡美,而是帶領帶領大家了解一個簡單 GIS 程序的構建過程,了解基本的概念、了解如何把 GUI 和 核心的功能代碼連接起來、了解運行程序后前端卡死怎么解決。
      這才是這一指南的目的。
      那么下一章就是講解如何把前端的 GUI 界面和后端功能代碼連接起來。
       

      分享GIS,不止于Python。
      薈GIS精粹,關注我,帶你飛!
      我叫 GIS薈
      (長按掃碼也行)

      歡迎交流點擊留言

        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多