Mã hóa ArcGIS Python

Shahriar Sir đã thực hiện hơn 100 dự án thực tế về Web GIS trong đời. Các công trình và nghiên cứu về Đổi mới hệ thống thông tin địa lý của ông luôn được đăng trên nhiều cổng thông tin quốc tế như tin tức của Cơ quan nghiên cứu khoa học vũ trụ Nga

Shahriar Sir có một kênh youtube về GIS để hướng dẫn về GIS, hướng dẫn nghề nghiệp và giải pháp cho vấn đề miễn phí. Tên Kênh Youtube là "Shahriar GIS"

Shahriar Sir là Nhà nghiên cứu về Web GIS và đã tạo ra nhiều Cải tiến về Web GIS đã xuất bản nhiều Cổng thông tin quốc tế

Ông đã phát triển Hệ thống theo dõi phương tiện dựa trên Web GIS bằng cách sử dụng phân tích dựa trên Kỹ thuật phần mềm để thiết lập mối quan hệ giữa GIS, Web và Công nghệ thông tin

Shahriar Sir là một thành viên của OpenStreetMap Foundation

Ông đã được mời làm Cố vấn GIS quốc tế trong nhiều Hội nghị quốc tế về GIS ở nhiều quốc gia và Bài phát biểu của ông về Web GIS trong các hội nghị đó cũng có thể được tìm thấy trên Youtube

Hướng dẫn này sẽ giới thiệu ngắn gọn về việc sử dụng ngôn ngữ lập trình Python trong ArcGIS Pro

Python là ngôn ngữ lập trình đa nền tảng, mã nguồn mở, được phát triển bởi lập trình viên người Hà Lan Guido van Rossum và được phát hành lần đầu tiên vào năm 1991. So với nhiều ngôn ngữ máy tính khác, Python tương đối dễ sử dụng và thường được sử dụng để tương tác và tùy chỉnh phần mềm

ArcPy là một mô-đun cung cấp các hàm, lớp và phương thức để thực hiện "phân tích dữ liệu địa lý, chuyển đổi dữ liệu, quản lý dữ liệu và tự động hóa bản đồ bằng Python" (ESRI 2022)

Có một số giới hạn đáng kể đối với những gì bạn có thể làm với ArcPy và nó chủ yếu hữu ích để tự động hóa các tác vụ chi tiết, lặp đi lặp lại hoặc tẻ nhạt (Zandbergen 2020, trang 356)

Mã Python có thể được thực thi theo nhiều cách khác nhau trong môi trường ESRI

Lệnh cửa sổ Python

Cửa sổ ArcGIS Pro Python cho phép người dùng nhập và chạy các lệnh Python riêng lẻ

Bạn khởi động cửa sổ Python từ cửa sổ Analysis, Python, Python

trong ví dụ này

  • Hàm ArcGISProject() trả về một tham chiếu đến dự án ArcGIS Pro. Chuyển "hiện tại" khi hàm được gọi trong cửa sổ Python trả về một tham chiếu đến dự án hiện đang được xem trong ArcGIS Pro
  • Phương thức listMaps() trả về danh sách các bản đồ trong dự án. Vì dự án này chỉ có một bản đồ nên chúng tôi chọn phần tử đầu tiên (và duy nhất) của danh sách để lấy tham chiếu đến bản đồ đó
  • Phương thức addDataFromPath() thêm một dịch vụ tính năng dưới dạng một lớp. Lớp cụ thể này được tạo từ một dịch vụ tính năng của các nhà máy điện của Hoa Kỳ từ Bộ Năng lượng Hoa Kỳ đã được xuất bản trong tổ chức ArcGIS Online của Đại học Illinois
aprx = arcpy.mp.ArcGISProject('current')

streetmap = aprx.listMaps()[0]

streetmap.addDataFromPath("https://services.arcgis.com/GL0fWlNkwysZaKeV/arcgis/rest/services/Minn_2020_Power_Plants/FeatureServer")
Trình duyệt của bạn không hỗ trợ thẻ video. Thêm một lớp dịch vụ tính năng từ bảng điều khiển Python

Tập lệnh cửa sổ Python

Các tác vụ trong ArcGIS Pro thường yêu cầu chuỗi thao tác và các thao tác đó có thể được thực hiện bằng cách sử dụng chuỗi biểu thức Python. Tập lệnh là một chuỗi các lệnh được tập hợp thành một tệp văn bản duy nhất mà phần mềm có thể chạy được. Các tập lệnh có thể được sử dụng để tổ chức các chuỗi lệnh (quy trình công việc) phức tạp và tự động hóa các tác vụ tẻ nhạt

Ưu điểm của việc sử dụng tập lệnh thay vì giao diện người dùng đồ họa (GUI) ArcGIS Pro bao gồm

  • tái sử dụng. Nếu bạn cần chạy lại một chuỗi các bước trên dữ liệu mới hoặc dữ liệu được cập nhật, thì việc chạy lại một tập lệnh sẽ dễ dàng hơn nhiều so với việc phải thực hiện nhiều lần các tương tác GUI phức tạp
  • tái sản xuất. Nếu bạn cần gỡ lỗi hoặc xác thực kết quả từ một chuỗi các bước phức tạp, việc chạy lại tập lệnh có thể tái tạo chính xác các bước đó, thay vì tương tác với GUI có thể khó nhớ và dễ bị lỗi
  • có thể mở rộng. Khi nhu cầu thay đổi, các tập lệnh có thể dễ dàng sửa đổi để đáp ứng những nhu cầu mới đó
  • mô tả. Tập lệnh cung cấp tài liệu về các bước cần thiết để thực hiện tác vụ

Tuy nhiên cũng có nhược điểm

  • Kiến thức chuyên ngành. Viết kịch bản yêu cầu kiến ​​thức chuyên môn về cả ngôn ngữ kịch bản và môi trường phần mềm trong đó các tập lệnh đó được sử dụng
  • che giấu. Các kịch bản thường được viết một cách khó hiểu và không hiệu quả, đặc biệt là bởi những người mới viết. Mã có thể che khuất logic cơ bản
  • Sự phụ thuộc vào phần mềm và phiên bản. Các tập lệnh phụ thuộc vào các thư viện mà chúng gọi. Khi phần mềm cơ bản thay đổi, các tập lệnh có thể cần được sửa đổi. Điều này có thể không khuyến khích việc cập nhật phần mềm và có thể tốn kém và mất thời gian nếu người viết kịch bản ban đầu không còn ở trong tổ chức của bạn

Các tệp tập lệnh có thể được thực thi từ bảng điều khiển ArcGIS Pro Python bằng cách nhấp chuột phải vào dòng nhắc của bảng điều khiển và chọn Tải dữ liệu

Trình duyệt của bạn không hỗ trợ thẻ video. Thực thi tập lệnh từ bảng điều khiển ArcGIS Pro Python

Tập lệnh độc lập

Bạn có thể gặp các tình huống mà bạn muốn có thể chạy tập lệnh mà không cần phải nỗ lực khởi động ArcGIS Pro và nhấp vào các nút để chạy tập lệnh của mình. Một ví dụ có thể là tự động hóa cùng một tác vụ trên nhiều tệp

Trình duyệt của bạn không hỗ trợ thẻ video. Chạy tập lệnh ArcPy độc lập bên ngoài giao diện người dùng ArcGIS Pro

Tập lệnh máy tính xách tay

Sổ ghi chép là các ô mã và văn bản mô tả xen kẽ, hữu ích để trình bày kết quả dữ liệu được phân tích bằng mã Python

Sổ ghi chép là nơi tốt để đặt các tập lệnh dành riêng cho các dự án cụ thể, vì sổ ghi chép được lưu cùng với các gói dự án

Mã hóa ArcGIS Python
Một cuốn sổ tay Python

Tập lệnh hộp công cụ

Các tập lệnh đại diện cho các tác vụ có thể khái quát hóa có thể được tích hợp vào các công cụ có tham số cho phép thực thi theo cách giống như các công cụ gốc từ hộp công cụ ArcGIS Pro

Hộp công cụ là nơi tốt để đặt các tập lệnh có thể hữu ích cho nhiều dự án khác nhau

Mã hóa ArcGIS Python
Tập lệnh hộp công cụ Python

API ArcGIS

ArcGIS API cho Python là một "thư viện để thực hiện các tác vụ trực quan hóa, phân tích, quản lý dữ liệu và quản trị hệ thống GIS" (ESRI 2022)

  • Đằng sau hậu trường, các thư viện này sử dụng ArcGIS Rest API để tương tác với các máy chủ ArcGIS Online và ArcGIS Enterprise
  • Theo đó, bạn sử dụng API ArcGIS cho Python khi làm việc với các dịch vụ và ứng dụng dựa trên internet thay vì khi làm việc với phần mềm máy tính để bàn ArcGIS Pro
  • Một thư viện tương tự cho JavaScript là ArcGIS API cho JavaScript
Mã hóa ArcGIS Python
API ArcGIS cho Python

Mã ví dụ

Sau đây là chuỗi mã Python thể hiện việc sử dụng các hàm ArcPy

Kịch bản tưởng tượng là bạn làm việc cho sở giao thông vận tải thành phố. DOT đang có kế hoạch làm lại một con phố và muốn gửi các tờ rơi qua đường bưu điện mà các doanh nghiệp và người quản lý tòa nhà dân cư có thể đăng để khách hàng và cư dân có thể lên kế hoạch cho sự gián đoạn khi tiếp cận. Bạn cần tạo một danh sách địa chỉ của các doanh nghiệp và nhà ở trên hoặc gần dự án xây dựng

Thu thập dữ liệu

Dữ liệu được sử dụng trong ví dụ này sẽ là các điểm địa chỉ và đường trung tâm từ Trung tâm hồ sơ và dữ liệu mở của Quận Lake, Illinois https. //data-lakecountyil. dữ liệu mở. vòng cung. com/

  • Tìm kiếm và tải xuống các điểm địa chỉ. Định dạng này phải là Shapefile để giúp nhập dễ dàng hơn. Lake County sử dụng phép chiếu Web Mercator cho dữ liệu của họ, điều này có thể gây nhầm lẫn với các tệp CSV
  • Tìm kiếm và Tải xuống Street Centerlines. Định dạng phải là Shapefile để thể hiện đầy đủ các tính năng của đường
  • Sử dụng Windows Explorer để tìm thư mục Downloads
  • Mở. zip lưu trữ và giải nén CSV và shapefile
  • Nhấp chuột phải vào thư mục Tải xuống để có đường dẫn tệp đầy đủ. Trong ví dụ này, nó nằm trên ổ đĩa mạng bắt đầu bằng địa chỉ IP
Trình duyệt của bạn không hỗ trợ thẻ video. Đang tải xuống dữ liệu của Quận Lake

Bắt đầu một dự án mới

Tất cả dữ liệu nguồn và dữ liệu đầu ra sẽ được lưu giữ cùng nhau trong một dự án duy nhất

  • Từ màn hình mở bắt đầu một dự án mới với một bản đồ mới
  • Đặt cho dự án một cái tên ý nghĩa
  • Trong Dự án, Tùy chọn tìm thư mục dự án để bạn có thể biết nơi đặt tập lệnh
Trình duyệt của bạn không hỗ trợ thẻ video. Bắt đầu một dự án mới

Bắt đầu tập lệnh

Bắt đầu một kịch bản mới và lưu nó vào thư mục dự án chính

  • Mở trình soạn thảo Python. Ví dụ này sử dụng trình soạn thảo IDLE tiêu chuẩn đi kèm với cài đặt Python
  • Bắt đầu tập lệnh với các dòng nhận xét chứa mục đích của tập lệnh, lập trình viên (bạn) và ngày sửa đổi cuối cùng. Siêu dữ liệu này rất quan trọng để bạn hoặc ai đó kế thừa tập lệnh này sẽ biết nó sẽ làm gì trong tương lai
  • Lưu tập lệnh trong thư mục dự án
  • Dòng mã đầu tiên sẽ tải thư viện ArcPy
  • Tạo một biến cho dự án hiện tại bằng hàm ArcGISProject()
  • Tạo một biến cho bản đồ đầu tiên trong dự án. Nếu bạn có nhiều bản đồ, có thể thêm tham số tên vào lệnh gọi hàm listMaps()
# Example join script
# Michael Minn - 8/31/2022

import arcpy

aprx = arcpy.mp.ArcGISProject('current')

street_map = aprx.listMaps()[0]
Trình duyệt của bạn không hỗ trợ thẻ video. Bắt đầu một kịch bản mới

Nhập các Shapefile

Shapefiles có thể được thêm vào bản đồ bằng cách chuyển tên của. shp trong shapefile vào hàm ánh xạ addDataFromPath()

  • data_path bạn sử dụng sẽ phụ thuộc vào vị trí của tệp hình dạng đã tải xuống của bạn
  • Lưu ý rằng vì Python sử dụng dấu gạch chéo ngược (\) làm ký tự thoát, nên bạn cần sử dụng dấu gạch chéo ngược kép thay cho dấu gạch chéo ngược đơn thông thường trong tên đường dẫn tệp của mình
  • Chúng tôi cũng đặt cho lớp một tên ngắn gọn hơn tên shapefile
data_path = "\\\\192.168.100.3\\DeptUsers\\minn2\\Downloads"

street_path = data_path + "\\Street_Centerlines.shp"

street_layer = street_map.addDataFromPath(street_path)

street_layer.name = "streets"

addr_path = data_path + "\\Address_Points.shp"

addr_layer = street_map.addDataFromPath(addr_path)

addr_layer.name = "addresses"
Trình duyệt của bạn không hỗ trợ thẻ video. Thêm một shapefile

Chọn tính năng tham gia

Truy vấn định nghĩa là "yêu cầu kiểm tra tính năng hoặc thuộc tính dạng bảng dựa trên tiêu chí do người dùng chọn và chỉ hiển thị những tính năng hoặc bản ghi đáp ứng tiêu chí" (ESRI 2022)

Truy vấn định nghĩa này chọn các khối 700 - 900 của Phố North Butrick

Các trường FromAddr_L và ToAddr_L trong tập dữ liệu này cho biết phạm vi số đường ở bên trái của từng tính năng đoạn đường. Tên chính xác của các tham số này có thể khác nhau tùy thuộc vào nguồn dữ liệu của bạn

street_layer.definitionQuery = "(WHOLE_NAME = 'N Butrick St') AND (FromAddr_L >= 700) AND (ToAddr_L <= 999)"
Trình duyệt của bạn không hỗ trợ thẻ video. Đặt truy vấn định nghĩa

Chọn và xuất

Có thể sử dụng công cụ SelectLayerByLocation() để chọn các điểm địa chỉ (addr_layer) trong phạm vi 50 mét tính từ địa điểm xây dựng (các đoạn đường được chọn trong street_layer)

Công cụ ExportFeatures() có thể được sử dụng để xuất các điểm địa chỉ đã chọn sang một lớp đối tượng mới. Theo mặc định, tham số out_features (tham số thứ hai) được đặt trong cơ sở dữ liệu dự án dưới tên đã đặt

Sau đó, hàm listLayers() được sử dụng để tìm lớp điểm địa chỉ ban đầu và ẩn nó để chỉ lớp địa chỉ mới bị ảnh hưởng hiển thị

arcpy.management.SelectLayerByLocation(addr_layer, "WITHIN_A_DISTANCE", street_layer, "50 meters")

arcpy.conversion.ExportFeatures(addr_layer, "affected")

street_map.listLayers("addresses")[0].visible = 0
Trình duyệt của bạn không hỗ trợ thẻ video. Chọn và xuất địa chỉ bị ảnh hưởng bởi việc xây dựng

Xuất thuộc tính

Bạn có thể xuất bảng thuộc tính cho các vị trí bị ảnh hưởng sang một. tệp csv của các địa chỉ có thể được nhập vào Word để tạo thư xin việc hoặc nhãn gửi thư

arcpy.conversion.TableToTable("affected", data_path, "affected.csv")
Trình duyệt của bạn không hỗ trợ thẻ video. Xuất thuộc tính

Chế độ xem phố của Google

Nếu bạn muốn xem khu vực trong chế độ xem phố của Google Maps để biết thông tin thực tế, hãy nhấp chuột phải vào bản đồ và chọn Sao chép tọa độ và sao chép các tọa độ đó vào thanh tìm kiếm của Google Maps

Trình duyệt của bạn không hỗ trợ thẻ video. Xem khu vực trong chế độ xem phố của Google Maps

Nạp Mã

Mặc dù các video ở trên minh họa các tập lệnh đang chạy một cách tương tác từ bảng điều khiển, nhưng mục đích của việc thu thập chúng trong một tập lệnh là có thể chạy chúng trực tiếp từ tệp

Bạn có thể chạy toàn bộ tệp từ cửa sổ Python bằng cách nhấp chuột phải vào dấu nhắc bảng điều khiển, chọn Tải mã và nhấn phím enter khi tải lệnh

Trình duyệt của bạn không hỗ trợ thẻ video. Chạy tập lệnh từ cửa sổ ArcGIS Pro Python

Sổ tay

Mặc dù sổ ghi chép thường được sử dụng để trình bày phân tích dữ liệu, nhưng chúng cũng có thể được sử dụng để lưu trữ các tập lệnh có mục đích đặc biệt để chúng được lưu dưới dạng một phần của gói dự án

  • Bắt đầu sổ ghi chép mới với Chèn, Sổ ghi chép mới
  • Nhập mã vào ô trên cùng
  • Nhấn nút Run để chạy mã
  • Thông báo hoàn thành sẽ hiển thị ở cuối sổ ghi chép khi mã hoàn thành
  • Sổ ghi chép được lưu trong dự án và có thể được truy cập thông qua Ngăn Danh mục
Trình duyệt của bạn không hỗ trợ thẻ video. Chạy tập lệnh từ cửa sổ ArcGIS Pro Python

Tập lệnh độc lập

Có thể đôi khi bạn muốn có thể chạy các tập lệnh mà không cần phải khởi động và theo dõi ArcGIS Pro

Mặc dù tập lệnh đơn giản được sử dụng trong hướng dẫn này không phải là một ví dụ đặc biệt hữu ích, nhưng một vài điều chỉnh đối với mã sẽ cho phép nó chạy dưới dạng tập lệnh "độc lập"

  • Vì tập lệnh đang được chạy bên ngoài ArcGIS Pro nên không có dự án hiện tại. Vì vậy, lệnh gọi ArcGISProject() sẽ cần chỉ định một. tập tin aprx. Dự án chỉ được sử dụng như một không gian làm việc và không được sửa đổi, nhưng ArcPy không thể tạo một dự án tạm thời, vì vậy sẽ cần sử dụng một dự án hiện có
  • Bạn có thể tìm thấy đường dẫn đến. aprx bằng cách nhấp chuột phải vào. aprx và hiển thị Thuộc tính
  • Vì chúng tôi không sửa đổi dự án, nên ExportFeatures() của các địa chỉ đã chọn sẽ cần chuyển đến một tệp hình dạng được chỉ định rõ ràng thay vì cơ sở dữ liệu dự án
  • Tương tự, khi xuất. csv với TableToTable() thì shapefile phải được chỉ định làm bảng nguồn
# Standalone join script
# Michael Minn - 8/31/2022

import arcpy

aprx = arcpy.mp.ArcGISProject('\\\\192.168.100.3\\DeptUsers\\minn2\\Documents\\ArcGIS\\Projects\\Street Work\\Street Work.aprx')
                    
street_map = aprx.listMaps()[0]


data_path = "\\\\192.168.100.3\\DeptUsers\\minn2\\Downloads"

street_path = data_path + "\\Street_Centerlines.shp"

street_layer = street_map.addDataFromPath(street_path)

street_layer.name = "streets"

addr_path = data_path + "\\Address_Points.shp"

addr_layer = street_map.addDataFromPath(addr_path)

addr_layer.name = "addresses"

street_layer.definitionQuery = "(WHOLE_NAME = 'N Butrick St') AND (FromAddr_L >= 700) AND (ToAddr_L <= 999)"

arcpy.management.SelectLayerByLocation(addr_layer, "WITHIN_A_DISTANCE", street_layer, "50 meters")

arcpy.conversion.ExportFeatures(addr_layer, data_path + "\\affected.shp")

arcpy.conversion.TableToTable(data_path + "\\affected.shp", data_path, "affected.csv")

Khi ArcPy được cài đặt, một phiên bản IDLE với môi trường thời gian chạy thích hợp cũng được cài đặt, phiên bản này sẽ cho phép các tập lệnh "độc lập" chạy bên ngoài ArcGIS Pro

Bạn có thể sử dụng Python trong ArcGIS không?

Python đã được giới thiệu với cộng đồng ArcGIS với ArcGIS 9. 0 . Kể từ đó, nó đã được chấp nhận là ngôn ngữ kịch bản được lựa chọn cho người dùng xử lý địa lý và tiếp tục phát triển. Mỗi bản phát hành đã nâng cao trải nghiệm Python, cung cấp nhiều khả năng hơn và trải nghiệm thân thiện với Python phong phú hơn.

ArcGIS sử dụng mã hóa nào?

Python là ngôn ngữ lập trình đa năng, nguồn mở được sử dụng làm ngôn ngữ kịch bản trong xử lý địa lý ArcGIS. Có thể truy cập chức năng xử lý địa lý thông qua Python bằng cách sử dụng gói trang web ArcPy của phần mềm ArcGIS.

ArcGIS Python có miễn phí không?

API ArcGIS dành cho Python cũng miễn phí . Cả Python và API đều có thể được cài đặt trên bất kỳ số lượng máy nào, cho dù là máy tính cục bộ hay máy chủ.

ArcGIS có sử dụng Python 2 hoặc 3 không?

ArcGIS Pro sử dụng Python 3 . Đây là một thay đổi đáng kể so với các sản phẩm ArcGIS khác, bao gồm ArcGIS Desktop, ArcGIS Server và ArcGIS Engine, đã sử dụng (và sẽ tiếp tục sử dụng) các bản phát hành trong dòng Python 2. Bản phát hành Python 3 là một dòng khác không tương thích với dòng Python 2.