Hướng dẫn viết tool trong arcgis bằng script python – Bài 2

vào lúc 09:09 ,

Ở bài trước gisgpsrs đã giới thiệu từng bước tạo tool trong arcgis bằng script python. Ở bài này gisgpsrs sẽ giới thiệu chi tiết các hàm biến khi viết tool, và cách các bạn tham khảo code thư viện mà arcgis đã cung cấp sẵn cho người dùng rất tiện ích và linh hoạt.


- Bài này gisgpsrs sẽ giới thiệu viết tool cụ thể là làm tròn trường số thực. Ví dụ bạn có một layer điểm độ cao, có trường giá trị độ cao trường này có giá trị lấy sau dấu phẩy 1 chữ số trở lên (Vd: 9,82) -> cần làm tròn trường này không lấy sau dấu phẩy nữa (9,82 ~ 10).

- Bước 1: Tạo tool “Z_Làm tròn trường số thực -> Thực hiện làm tròn” . Nếu bạn chưa biết tạo tool như thế nào thì hãy đọc bài 1



- Bước 2: Tạo các biến đầu vào Parameters gồm:
+ Chọn dữ liệu cần làm tròn (Layer đầu vào)



+ Chọn trường dữ liệu cần làm tròn (Chọn trường cần làm tròn)



+ Chọn nơi lưu kết quả (nơi lưu layer kết quả)

- Bước 3: Viết code vào file script để xử lý, các bạn copy code dưới vào file script

# -*- coding: utf-8 -*-
# Author: Nguyễn Viết Quân
# Web: gisgpsrs.blogspot.com
# Email : vietquan2407@gmail.com
import math
import arcgisscripting
gp = arcgisscripting.create(9.3)

def lamtron(input_fc,input_fd,newfd):
    global gp
    rows = gp.updatecursor(input_fc)
    result = gp.GetCount_management(input_fc)
    count = int(result.GetOutput(0))
    gp.SetProgressor("step", "Reading", 0, count, 1)
    for row in iter(rows.next, None):
        giatri = row.GetValue(input_fd)
        #Trong python k có hàm làm tròn (round) lên ở đây tách phần nguyên và thực
        phanso,phannguyen = math.modf(giatri)
        if (phanso >= 0.5):
            newvalue = phannguyen + 1 #Công thêm 1
            row.SetValue(newfd,newvalue)
            rows.UpdateRow(row)
        elif (phanso != 0):
            newvalue = phannguyen #Ko Công thêm 1
            row.SetValue(newfd,newvalue)
            rows.UpdateRow(row)
        gp.SetProgressorPosition()
    gp.ResetProgressor()      
    del rows
    del row
   
#Input paramaters  
inputShapefile = gp.GetParameterAsText(0)
inputFields = gp.GetParameterAsText(1)
outputShapefile = gp.GetParameterAsText(2)
#Processing block
gp.toolbox = "management"
try:
    #Copy to new shapefile
    gp.CopyFeatures_management(inputShapefile,outputShapefile)
    #Processing conversion of encoding
    inputFL = inputFields.split(";")
    for inputField in inputFL:
        lamtron(outputShapefile,inputField,inputField)
    gp.AddMessage("Finish!")
#Free resources
except:
    gp.GetMessage(2)
del gp

- Vậy là đã hoàn thành tool này
- Bạn có thể download tool này ở đây
- Các bạn có thể tham khảo mã nguồn rất nhiều, và rất chi tiết trong file help của arcgis, bạn tìm bộ help này trong Start -> All Program -> ArcGis -> ArcGis Desktop Help


- Chúc các bạn thành công!
Hãy like nếu bài viết có ích →
Kết bạn với gisgpsrs trên Facebook để nhận bài viết mới nóng hổi

2 nhận xét:

  1. bác thừa giấy vẽ voi quá! python có hàm "round" mà. với lại sao ko dùng Calculate Filed gọn hơn ko nè.

    Trả lờiXóa
    Trả lời
    1. Hàm round mình đã test thấy chưa được theo ý muốn khi giá trị làm tròn số chẵn lẻ. Còn dùng Calculate Field không tùy chỉnh được theo ý mình. Đây là một ví dụ để các bạn tham khảo thôi.

      Xóa