Главная

Статьи

Перші кроки в програмуванні на Python - QGIS Tutorials and Tips

  1. огляд завдання
  2. Отримання даних
  3. Методика

QGIS має потужний інтерфейс програмування, який дозволяє розширити базову функціональність програмного забезпечення, а також писати скрипти для автоматизації завдань. QGIS підтримує популярний мову сценаріїв Python. Навіть якщо ви новачок, ознайомлення з Python і програмним інтерфейсом QGIS дозволить вам бути набагато більш продуктивним в роботі. Цей урок не вимагає ніяких попередніх знань програмування і призначений для того, щоб дати введення в написання сценаріїв Python в QGIS (PyQGIS).

огляд завдання

Ми завантажимо точковий векторний шар, що представляє всі великі аеропорти і використовуємо сценарій Python для створення текстового файлу з назвою, кодом, широтою і довготою для кожного аеропорту в шарі.

Отримання даних

Ми будемо використовувати набір даних Аеропорти <http://www.naturalearthdata.com/downloads/10m-cultural-vectors/airports/> _ з Natural Earth.

завантажте shape-файл з аеропортами .

Джерело даних: [NATURALEARTH]

Методика

  1. У QGIS, перейдіть в меню. Знайдіть завантажений файл ne_10m_airports.zip і натисніть Open. Виберіть шар ne_10m_airports.shp і натисніть OK.

QGIS має потужний інтерфейс програмування, який дозволяє розширити базову функціональність програмного забезпечення, а також писати скрипти для автоматизації завдань
  1. Ви побачите шар ne_10m_airports, завантажений в QGIS.

  1. Виберіть інструмент Identify і натисніть на будь-яку з точок, щоб вивчити доступні атрибути. Ви побачите, що ім'я аеропорту і його 3-значний код містяться в атрибутах name і data_code відповідно.

  1. QGIS надає вбудовану консоль, де ви можете ввести команди Python і отримати результат. Ця консоль є відмінним способом навчитися писати сценарії, а також виробляти швидку обробку даних. Відкрийте Python Console, перейшовши до меню.

  1. Ви побачите, що в нижній частині вікна QGIS відкрилася нова панель. Ви побачите символи >>> внизу, після яких ви можете вводити команди. Для взаємодії з середовищем QGIS ми повинні використовувати змінну iface. Щоб отримати доступ до поточного активного шару в QGIS, ви можете ввести наступну команду і натиснути Enter. Ця команда отримує посилання на поточний завантажений шар і зберігає її в змінної layer.

layer = iface. activeLayer () layer = iface

  1. There is a handy function called dir () in python that shows you all available methods for any object. This is useful when you are not sure what functions are available for the object. Run the following command to see what operations we can do on the layer variable.
  1. You will see a long list of available functions. For now, we will use a function called getFeatures () which will gets you the reference to all features of a layer. In our case, each feature will be a point representing an airport. You can type the following command to iterate through each of the features in the current layer. Make sure to add 2 spaces before typing the second line.

for f in layer. getFeatures (): print f for f in layer

  1. As you will see in the output, each line contains a reference to a feature within the layer. The reference to the feature is stored in the f variable. We can use the f variable to access the attributes of each feature. Type the following to print the name and iata_code for each airport feature.

for f in layer. getFeatures (): print f [ 'name'], f [ 'iata_code'] for f in layer

  1. So now you know how to programatically access the attribute of each feature in a layer. Now, let's see how we can access the coordinates of the feature. The coordinates of a vector feature can be accessed by calling the geometry () function. This function returns a geometry object that we can store in the variable geom. You can run asPoint () function on the geometry object to get the x and y coordinates of the point. If your feature is a line or a polygon, you can use asPolyline () or asPolygon () functions. Type the following code at the prompt and press Enter to see the x and y coordinates of each feature.

for f in layer. getFeatures (): geom = f. geometry () print geom. asPoint () for f in layer

  1. What if we wanted to get only the x cordinate of the feature? You can call the x () function on the point object and get its x coordinate.

for f in layer. getFeatures (): geom = f. geometry () print geom. asPoint (). x () for f in layer

  1. Now we have all the pieces that we can stitch together to generate our desired output. Type the following code to print the name, iata_code, latitude and longitude of each of the airport features. The% s and% f notations are ways to format a string and number variables.

for f in layer. getFeatures (): geom = f. geometry () print '% s,% s,% f,% f'% (f [ 'name'], f [ 'iata_code'], geom. asPoint (). y (), geom. asPoint (). x ()) for f in layer

  1. You can see the output printed on the console. A more useful way to store the output would be in a file. You can type the following code to create a file and write the output there. Replace the file path with a path on your own system. Note that we add \ n at the end of our line formatting. This is to add a newline after we add the data for each feature. You should also note the unicode_line = line.encode ( 'utf-8') line. Since our layer contains some features with unicode characters, we can not simply write it to a text file. We encode the text using the UTF-8 encoding and then write to the text file.

output_file = open ( 'c: /Users/Ujaval/Desktop/airports.txt', 'w') for f in layer. getFeatures (): geom = f. geometry () line = '% s,% s,% f,% f \ n'% (f [ 'name'], f [ 'iata_code'], geom. asPoint (). y (), geom. asPoint ( ). x ()) unicode_line = line. encode ( 'utf-8') output_file. write (unicode_line) output_file. close () output_file = open ( 'c: /Users/Ujaval/Desktop/airports

  1. You can go to the output file location you specified and open the text file. You will see the data from the airports shapefile that we extracted using python scripting.
comments powered by

Новости