4.1 Введение
Цель задания — закрепление навыков загрузки и визуализации данных в QGIS.
Необходимая теоретическая подготовка: модели пространственных данных, модели пространственных объектов, базы пространственных объектов, картографические проекции.
Необходимая практическая подготовка: в объёме упражнения 1.
Исходные данные: база пространственных данных на территорию Российской Федерации
Ожидаемый результат: тематическая карта «Население России» масштаба 1:35 000 000
В этом упражнении вы закрепите базовые навыки визуализации с использованием программных средств ГИС, составив карту населения Российской Федерации в разрезе субъектов фередации и крупных населённых пунктов. На картах населения, как правило, изображается людность городов (способом значков) и плотность населения (способом количественного фона). В рамках упражнения мы не будем пытаться выполнить «объективное» районирование территории по естественным градациям плотности населения; вместо этого воспользуемся обобщённой статистикой по плотности населения субъектов РФ.
Растровые слои¶
For accessing raster files, GDAL library is used. It supports a wide range of
file formats. In case you have troubles with opening some files, check whether
your GDAL has support for the particular format (not all formats are available
by default). To load a raster from a file, specify its file name and base name:
fileName = "/path/to/raster/file.tif" fileInfo = QFileInfo(fileName) baseName = fileInfo.baseName() rlayer = QgsRasterLayer(fileName, baseName) if not rlayer.isValid(): print "Layer failed to load!"
Similarly to vector layers, raster layers can be loaded using the addRasterLayer
function of the QgisInterface:
iface.addRasterLayer("/path/to/raster/file.tif", "layer name you like")
This creates a new layer and adds it to the map layer registry (making it appear
in the layer list) in one step.
Raster layers can also be created from a WCS service:
layer_name = 'modis' uri = QgsDataSourceURI() uri.setParam('url', 'http://demo.mapserver.org/cgi-bin/wcs') uri.setParam("identifier", layer_name) rlayer = QgsRasterLayer(str(uri.encodedUri()), 'my wcs layer', 'wcs')
detailed URI settings can be found in provider
documentation
Alternatively you can load a raster layer from WMS server. However currently
it’s not possible to access GetCapabilities response from API — you have to
know what layers you want:
Метаданные¶
The Metadata menu consists of a Description,
Attribution, MetadataURL and Properties section.
In the Properties section you get general information about the layer,
including specifics about the type and location, number of features, feature type,
and the editing capabilities in the Properties section. The Extents
table provides you with layer extent information, and the Layer Spatial Reference System
information, providing information about the CRS of the layer. This is a quick way
to get information about the layer.
Additionally you can add/edit a title for the layer and some abstract information in the Description.
Also, it’s possible to define a Keyword list here. These keyword lists can be used in a
metadata catalogue. If you want to use a title from an XML metadata file you have to fill in
a link in the DataUrl field.
Use Attribution to get Atrribute data from an XML metadata catalogue.
In MetadataUrl you can define the general path to the XML metadata catalogue.
These information will be saved in the QGIS project file for following sessions
and will be used for QGIS server.
Figure Metadata 1:
Metadata menu in vector layers properties dialog
Векторные слои¶
To load a vector layer, specify layer’s data source identifier, name for the
layer and provider’s name:
layer = QgsVectorLayer(data_source, layer_name, provider_name) if not layer.isValid(): print "Layer failed to load!"
Идентификатор источника данных это строка, специфичная для каждого провайдера векторных данных. Имя слоя используется в виджете списка слоёв. Необходимо проверять успешно ли завершилась загрузка слоя или нет. В случае каких-либо ошибок возвращается неправильный объект.
The quickest way to open and display a vector layer in QGIS is the addVectorLayer function of the QgisInterface:
This creates a new layer and adds it to the map layer registry (making it appear in the layer list) in one step. The function returns the layer instance or None if the layer couldn’t be loaded.
Ниже показано как получить доступ к различным источникам данных используя провайдеры векторных данных:
OGR library (shapefiles and many other file formats) — data source is the
path to the file
vlayer = QgsVectorLayer(«/path/to/shapefile/file.shp», «layer_name_you_like», «ogr»)
PostGIS database — data source is a string with all information needed to
create a connection to PostgreSQL database. QgsDataSourceURI class
can generate this string for you. Note that QGIS has to be compiled with
Postgres support, otherwise this provider isn’t available.
uri = QgsDataSourceURI()
# set host name, port, database name, username and password
uri.setConnection(«localhost», «5432», «dbname», «johny», «xxx»)
# set database schema, table name, geometry column and optionally
# subset (WHERE clause)
uri.setDataSource(«public», «roads», «the_geom», «cityid = 2643»)
vlayer = QgsVectorLayer(uri.uri(), «layer_name_you_like», «postgres»)
CSV or other delimited text files — to open a file with a semicolon as a
delimiter, with field “x” for x-coordinate and field “y” with y-coordinate
you would use something like this
uri = «/some/path/file.csv?delimiter=%s&xField=%s&yField=%s» % («;», «x», «y»)
vlayer = QgsVectorLayer(uri, «layer_name_you_like», «delimitedtext»)
Note: from QGIS version 1.7 the provider string is structured as a URL, so
the path must be prefixed with file://. Also it allows WKT (well known
text) formatted geometries as an alternative to “x” and “y” fields, and allows
the coordinate reference system to be specified. For example
uri = «file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s» % («;», «shape»)
GPX files — the “gpx” data provider reads tracks, routes and waypoints from
gpx files. To open a file, the type (track/route/waypoint) needs to be
specified as part of the url
uri = «path/to/gpx/file.gpx?type=track»
vlayer = QgsVectorLayer(uri, «layer_name_you_like», «gpx»)
SpatiaLite database — supported from QGIS v1.1. Similarly to PostGIS
databases, QgsDataSourceURI can be used for generation of data
source identifier
uri = QgsDataSourceURI()
uri.setDatabase(‘/home/martin/test-2.3.sqlite’)
schema = »
table = ‘Towns’
geom_column = ‘Geometry’
uri.setDataSource(schema, table, geom_column)
display_name = ‘Towns’
vlayer = QgsVectorLayer(uri.uri(), display_name, ‘spatialite’)
MySQL WKB-based geometries, through OGR — data source is the connection
string to the table
uri = «MySQL:dbname,host=localhost,port=3306,user=root,password=xxx|layername=my_table»
vlayer = QgsVectorLayer( uri, «my_table», «ogr» )
Редактирование векторных слоёв с использованием буфера изменений¶
При редактировании векторных данных в QGIS, сначала необходимо перевести соответствущий слой в режим редактирования, затем внести изменения и, наконец, зафиксировать (или отменить) эти изменения. Все сделанные изменения не применяются до тех пор, пока вы их не зафиксируете — они хранятся в буфере изменений слоя. Данную возможность можно использовать и программно — это всего лишь другой способ редактирования векторных слоёв, дополняющий прямой доступ к провайдеру. Использовать этот функционал стоит тогда, когда пользователю предоставляются графические инструменты редактирования, чтобы он мог решить когда фиксировать/отменять изменения, а также мог использовать инструменты повтора/отмены. При фиксации изменений, все имеющиеся в буфере операции будут переданы провайдеру.
To find out whether a layer is in editing mode, use isEditing() — the
editing functions work only when the editing mode is turned on. Usage of
editing functions
# add two features (QgsFeature instances) layer.addFeatures() # delete a feature with specified ID layer.deleteFeature(fid) # set new geometry (QgsGeometry instance) for a feature layer.changeGeometry(fid, geometry) # update an attribute with given field index (int) to given value (QVariant) layer.changeAttributeValue(fid, fieldIndex, value) # add new field layer.addAttribute(QgsField("mytext", QVariant.String)) # remove a field layer.deleteAttribute(fieldIndex)
In order to make undo/redo work properly, the above mentioned calls have to be
wrapped into undo commands. (If you do not care about undo/redo and want to
have the changes stored immediately, then you will have easier work by
.) How to use the undo functionality
layer.beginEditCommand("Feature triangulation") # ... call layer's editing methods ... if problem_occurred: layer.destroyEditCommand() return # ... more editing ... layer.endEditCommand()
The beginEditCommand() will create an internal “active” command and will
record subsequent changes in vector layer. With the call to endEditCommand()
the command is pushed onto the undo stack and the user will be able to undo/redo
it from GUI. In case something went wrong while doing the changes, the
destroyEditCommand() method will remove the command and rollback all
changes done while this command was active.
Топологическое редактирование и прилипание нескольких слоев
Кроме только что рассмотренных настроек, в QGIS имеются дополнительные возможности, позволяющие, помимо всего прочего, настроить параметры прилипания в отдельности для каждого слоя. Рассмотрим дополнительные настройки редактирования и параметры прилипания.
В меню Settings выбираем Project Properties и переходим на вкладку General. Нас будет интересовать группа параметров Digitizing.
Enable topological editing – включение режима топологического редактирования. Если топологическое редактирование включено, то при перемещении вершины, принадлежащей одновременно нескольким объектам (полигонам или линиям), их геометрия изменится в соответствии с новым положением перемещенной вершины. Если же топологическое редактирование отключено, то изменения коснутся только одного объекта.
Avoid intersections of new polygons – предотвращение пересечения новых полигонов. Если активировать этот пункт, то при создании нового полигона в случае наложения его на уже существующий, часть нового полигона, попадающая в наложение, будет исключена.
Нажимаем кнопку Snapping options и переходим к настройке прилипания для отдельных слоев.
В столбце Layer расположены слои текущего проекта. Если слой отмечен крестиком, то настройки прилипания для него включены. В столбце Mode настраивается режим прилипания для каждого слоя, а в столбце Tolerance – порог расстояния прилипания.
ВАЖНО!!! Если нажать OK в окне Snapping options, а затем Apply в окне Project Properties, то настройки Default snap mode и Default snapping tolerance in layer units, которые мы указывали до этого, утрачивают свою силу для текущего проекта навсегда. И поэтому каждый раз, добавляя новый слой, вам необходимо через Snapping options указывать для него настройки прилипания.. На этом процесс настройки параметров редактирования векторного слоя можно считать оконченным.
На этом процесс настройки параметров редактирования векторного слоя можно считать оконченным.
Creating Vector Layers¶
There are several ways to generate a vector layer dataset:
-
the class:
A convenient class for writing vector files to disk, using either a static
call to which saves the whole
vector layer or creating an instance of the class and issue calls to
. This class
supports all the vector formats that OGR supports (GeoPackage, Shapefile,
GeoJSON, KML and others). -
the class: instantiates
a data provider that interprets the supplied path (url) of the data source
to connect to and access the data. It can be used to create temporary,
memory-based layers () and connect to OGR datasets (),
databases (, , , ) and
more (, , …).
# Write to a GeoPackage (default) error = QgsVectorFileWriter.writeAsVectorFormat(layer, "/path/to/folder/my_data", "") if error == QgsVectorFileWriter.NoError print("success!")
# Write to an ESRI Shapefile format dataset using UTF-8 text encoding error = QgsVectorFileWriter.writeAsVectorFormat(layer, "/path/to/folder/my_esridata", "UTF-8", driverName="ESRI Shapefile") if error == QgsVectorFileWriter.NoError print("success again!")
The third (mandatory) parameter specifies output text encoding.
Only some drivers need this for correct operation — Shapefile is one of them
(other drivers will ignore this parameter).
Specifying the correct encoding is important if you are using international
(non US-ASCII) characters.
# Write to an ESRI GDB file opts = QgsVectorFileWriter.SaveVectorOptions() opts.driverName = "FileGDB" # if no geometry opts.overrideGeometryType = QgsWkbTypes.NullGeometry opts.actionOnExistingFile = QgsVectorFileWriter.ActionOnExistingFile.CreateOrOverwriteLayer opts.layerName = 'my_new_layer_name' error = QgsVectorFileWriter.writeAsVectorFormat(layer=vlayer, fileName=gdb_path, options=opts) if error == QgsVectorFileWriter.NoError print("success!") else print(error)
You can also convert fields to make them compatible with different formats by
using the .
For example, to convert array variable types (e.g. in Postgres) to a text type,
you can do the following:
LIST_FIELD_NAME = 'xxxx' class ESRIValueConverter(QgsVectorFileWriter.FieldValueConverter): def __init__(self, layer, list_field): QgsVectorFileWriter.FieldValueConverter.__init__(self) self.layer = layer self.list_field_idx = self.layer.fields().indexFromName(list_field) def convert(self, fieldIdxInLayer, value): if fieldIdxInLayer == self.list_field_idx return QgsListFieldFormatter().representValue(layer=vlayer, fieldIndex=self.list_field_idx, config={}, cache=None, value=value) else return value def fieldDefinition(self, field): idx = self.layer.fields().indexFromName(field.name()) if idx == self.list_field_idx return QgsField(LIST_FIELD_NAME, QVariant.String) else return self.layer.fields()[idx converter = ESRIValueConverter(vlayer, LIST_FIELD_NAME) #opts is a QgsVectorFileWriter.SaveVectorOptions as above opts.fieldValueConverter = converter
A destination CRS may also be specified — if a valid instance of
is passed as the fourth parameter, the layer is transformed to that CRS.
For valid driver names please call the method
or consult the supported formats by OGR — you
should pass the value in the «Code» column as the driver name.
Optionally you can set whether to export only selected features, pass further
driver-specific options for creation or tell the writer not to create attributes…
There are a number of other (optional) parameters; see the documentation for details.
from qgis.PyQt.QtCore import QVariant # define fields for feature attributes. A QgsFields object is needed fields = QgsFields() fields.append(QgsField("first", QVariant.Int)) fields.append(QgsField("second", QVariant.String)) """ create an instance of vector file writer, which will create the vector file. Arguments: 1. path to new file (will fail if exists already) 2. encoding of the attributes 3. field map 4. geometry type - from WKBTYPE enum 5. layer's spatial reference (instance of QgsCoordinateReferenceSystem) - optional 6. driver name for the output file """ writer = QgsVectorFileWriter("my_shapes.shp", "UTF-8", fields, QgsWkbTypes.Point, driverName="ESRI Shapefile") if writer.hasError() != QgsVectorFileWriter.NoError print("Error when creating shapefile: ", w.errorMessage()) # add a feature fet = QgsFeature() fet.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(10,10))) fet.setAttributes() writer.addFeature(fet) # delete the writer to flush features to disk del writer
5.4 Оценка точности привязки
В реальных задачах бывает необходимо не только привязать растр, но и оценить точность привязки. Для этого часть опорных точек переводятся в класс контрольных. Эти точки не участвуют в вычислении параметров преобразования, поэтому по ним можно проверять абсолютную точность привязки.
-
Создайте новый проект QGIS.
-
Начните выполнять привязку растра . Разместите пять опорных точек, как в предыдущем разделе упражнения. Настройте параметры трансформации. Самостоятельно определите, какую систему координат использовать. Укажите, что результирующий файл должен быть записан в каталог .
-
Теперь добавьте ещё четыре опорные точки между «угловыми» и «центральной». Можно воспользоваться подписями вдоль линий сетки на карте.
-
Когда вы добавите дополнительные точки, отключите их: снимите галочки в таблице возле их названий.
- Оцените максимальную величину ошибки по контрольным точкам. Запишите её с точность до второго знака после запятой в отдельный текстовый файл.
Обратите внимание, что величина ошибки измеряется в пикселах. Чтобы получить абсолютное значение, нам нужно умножить эту величину на размер пиксела на местности
-
Запустите привязку растра. Добавьте привязанный растр в проект QGIS, если это не произошло автоматически.
-
Откройте свойства добавленного растра и выясните (на вкладке «Информация»), каков размер его пикселя в целевой системе координат
-
Рассчитайте максимальное значение абсолютной ошибки привязки.
8.8 Вычисление результирующих значений показателя связи
-
Откройте таблицу атрибутов слоя Слияние комбинаций почвы-рельеф, а затем вызовите калькулятор полей.
-
Укажите, что результат вычисления будет сохраняться в новое поле вещественного (real) типа, имя поля —
-
В окне ввода выражения составьте следующее выражение:
Площадь сочетания подтипа почв и типа рельефа / Площадь подтипа почв × 100
-
Запустите расчёт. После окончания расчёта посмотрите получившиеся значения в поле Percent.
-
Удалите соединение таблиц через свойства слоя Слияние комбинаций почвы-рельеф (вкладка «Связи», кнопка с изображением знака «минус» внизу).
-
Отсортируйте таблицу атрибутов по значению поля Percent по убыванию. Выберите объекты, значение показателя связи для которых превышает 75 %.
-
Скройте все столбцы, кроме типа почв, подтипа почв, типа рельефа и поля Percent.. Для того, чтобы скрыть столбец в таблице атрибутов, нажмите на его название правой кнопкой мыши и выберите опцию Hide column.
-
Скомпонуйте окно приложения так, чтобы было видно целиком карту, а также выделенные в таблице строки, а также столбцы, перечисленные в предыдущем пункте.
Скриншот 1: окно карты и результирующая таблица
-
Сохраните документ карты.
8.2 Визуальный анализ векторных слоев
В первую очередь при анализе данных следует провести их визуальную оценку, которая может натолкнуть на отыскание закономерностей во взаимном расположении объектов.
-
Распакуйте архив с материалами упражнения в свою рабочую директорию. Создайте проект QGIS в папке с распакованными материалами.
-
Добавьте на карту слой RelTypes из базы геоданных . Примените к нему стиль из файла .
-
Добавьте на карту слой SoilTypes из той же базы. Изобразите его в виде полигонов без заливки с обводкой красного цвета.
-
Выберите инструмент идентификации и щелкните в пределах карты на любом полигоне. Откроется форма идентификации (отображения) атрибутов объекта
По умолчанию QGIS идентифицирует объекты либо из самого верхнего слоя (Сверху вниз, до первого найденного, в порядке перечисления в панели слоёв), либо из того слоя, который выбран в панели слоёв (Текущий слой). Можно настроить инструмент идентификации таким образом, чтобы отображать атрибуты объектов из всех доступных слоёв. Для этого в нижней части панели идентификации нужно установить режим Сверху вниз.
Пользуясь инструментом идентификации, проанализируйте совмещенное изображение границ типов почв и рельефа.
Вопрос 1: Есть ли какие-то совпадения или подобия рисунков контуров типов рельефа и подтипов почв в пределах речных долин, междуречий, малых эрозионных форм?
Плагин проверки топологии¶
Плагин проверки топологии выводит на экран объекты с невалидной топологией — как настроишь. Это варианты:
-
Слой должен иметь валидную геометрию.
-
Слой не должен иметь дубликатов.
-
Слой не должен иметь щелей между фичами.
-
Слой не должен иметь мультиобъектов
-
Слой не должен иметь накладывающихся фич.
-
Слой не должен иметь накладывающихся фич на другой слой.
-
Слой не должен иметь висящих в воздухе концов линии, не попадающих на точечный слой.
-
Слой не должен иметь dangles
-
Слой не должен иметь pseudos
-
Слой точечного типа не должен иметь висящих в воздухе точек
-
Слой точечного типа не должен иметь точек не покрываемых концами линий
Подведём итоги:
Примечание
Why did the chicken cross the road?
Список слоёв карты¶
Если вы хотите использовать открытые слои при отрисовке карты — не забудьте добавить их к списку слоёв карты. Список слоёв карты станет их владельцем, а получить доступ к ним можно будет из любой части приложения по уникальному
идентификатору. При удалении слоя из списка слоёв карты, происходит его уничтожение.
Adding a layer to the registry:
QgsMapLayerRegistry.instance().addMapLayer(layer)
Layers are destroyed automatically on exit, however if you want to delete the
layer explicitly, use:
QgsMapLayerRegistry.instance().removeMapLayer(layer_id)
For a list of loaded layers and layer ids, use:
QgsMapLayerRegistry.instance().mapLayers()
Обновление слоёв¶
Если символика слоя была изменена и необходимо сделать изменения видимыми
пользователю, вызовите следующие методы:
if hasattr(layer, "setCacheImage"): layer.setCacheImage(None) layer.triggerRepaint()
Первая конструкция нужна для того, чтобы убедиться, что при использовании
кеша отрисовки кешированные изображения обновляемого слоя удалены. Этот
функционал доступен начиная с QGIS 1.4, в более ранних версиях такой
функции нет — поэтому, в начале, чтобы быть уверенными в работоспособности
кода во всех версиях QGIS, выполняется проверка на существование метода.
Вторая конструкция вызывает сигнал, который заставляет все карты, содержащие
слой, выполнить перерисовку.
После изменения символики слоя (о том, как это сделать рассказано в разделах,
посвящённых растровым и векторным слоям), может потребоваться обновить
символику слоя в виджете списка слоёв (легенде). Ниже показано как это
делается (iface это экземпляр QgisInterface):
4.7 Настройка условных знаков географической основы
Мы задали оформление слоям, отвечающим за тематическую нагрузку создаваемой карты. Теперь нам необходимо задать символику для всех остальных слоёв и расположить их в правильном порядке.
-
Переименуйте оставшиеся слои:
- boundaries: государственные границы
- coastline: береговая линия
- lakes: озёра
- neighbouring_countries: соседние страны
-
Расположите слои в следующем порядке:
- Людность городов
- береговая линия
- государственные границы
- озёра
- Плотность населения
- соседние страны
-
Задайте для слоя береговой линии символ simple blue line и толщину 0,36
-
Задайте для слоя государственных границ символ Residental road
-
Задайте для слоя озёр символ topo water
-
Задайте для слоя соседних стран символ gray 2 fill
Результат обновления символики слоёв будет выглядеть приблизительно так:
Одноканальные растры¶
По умолчанию отрисовка идет в оттенках серого. Чтобы изменить стиль отрисовки
на псевдоцвет:
>>> rlayer.setDrawingStyle(QgsRasterLayer.SingleBandPseudoColor) >>> rlayer.setColorShadingAlgorithm(QgsRasterLayer.PseudoColorShader)
The PseudoColorShader is a basic shader that highlighs low values in
blue and high values in red. Another, FreakOutShader uses more fancy
colors and according to the documentation, it will frighten your granny
and make your dogs howl.
There is also ColorRampShader which maps the colors as specified by
its color map. It has three modes of interpolation of values:
- линейный (INTERPOLATED): resulting color is linearly interpolated
from the color map entries above and below the actual pixel value - дискретный (DISCRETE): color is used from the color map entry with
equal or higher value - точный (EXACT): цвета не интерполируются, отображаются только
пиксели со значениями, равными значениям цветовой карты
To set an interpolated color ramp shader ranging from green to yellow
color (for pixel values from 0 to 255):
>>> rlayer.setColorShadingAlgorithm(QgsRasterLayer.ColorRampShader) >>> lst = QgsColorRampShader.ColorRampItem(, QColor(,255,)), QgsColorRampShader.ColorRampItem(255, QColor(255,255,)) >>> fcn = rlayer.rasterShader().rasterShaderFunction() >>> fcn.setColorRampType(QgsColorRampShader.INTERPOLATED) >>> fcn.setColorRampItemList(lst)
Вернуться к стандартному отображению в оттенках серого можно так:
Выбираем перекрытый слой
Иногда случаются ситуации, когда слой полностью перекрыт другим и его невозможно выделить на рабочей области. Остается только копаться в панели слоев. В таком случае достаточно кликнуть правой кнопкой мыши по области, где находится невидимый слой и из выпадающего меню выбрать Select Layer, а потом кликнуть по названию нужного вам слоя.
Еще один вариант: зажмите Ctrl и нажмите правую кнопку мыши в область перекрытия слоя. Вместо контекстного меню сразу появится список слоев, что значительно быстрее предыдущего способа.
Эти способы выделения работают и для заблокированных слоев, но не для невидимых!
7.11.10. Подсчёт длин и площадей геометрии¶
Калькулятор полей
Рис. 7.109. Калькулятор полей
Этот инструмент добавляет к векторному слою новый атрибут, и заполняет его значениями расчитаными по формуле. Запускайте калькулятор полей из таблицы атрибутов слоя.
В окне задайте название добавляемого атрибута, его тип данных, и формулу. Просмотрите список функций — при нажатии по ним открывается описание.
Определение площади фигуры в квадратных километрах
Для вычисления площади фигуры в квадратных километрах необходимо выполнить ряд шагов:
Рис. 7.110. Настройка эллипсоида
-
В свойствах проекта включить Преобразование координат на лету (OTF)`
-
В свойствах проекта «Общие» выставить «Эллипсоид для вычислений» в значение WGS 84,
в поле указать метры, —
квадратные километры (см. ). -
Инструментом идентификации щёлкнуть на площадной объект. В открывшемся диалоге «Результат определения»
в дереве атрибутов раскрыть пункт «Выведенные». Там будет указана площадь в квадратных километрах,
подсчитанная на эллипсоиде WGS 1984.
Расчёт площади фигуры в квадратных метрах
Эта операция добавляет в слой атрибут с расчитаной площадью
-
В свойствах проекта включить Преобразование координат на лету (OTF)`
-
В свойствах проекта «Общие» выставить «Эллипсоид для вычислений» в значение WGS 84,
в поле указать метры, —
квадратные километры (см. ). -
Выделить слой, зайти в калькулятор полей, создать новое поле , тип , размер , точность .
-
Ввести выражение для расчета:
-
Выражение для квадратных метров: $area.
-
Выражение для квадратных километров: $area / 1000000.
-
Выражение для целого значения гектаров: round( $area / 10000 ).
-
Рис. 7.111. Создание поля с площадью в гектарах через калькулятор полей.
-
После завершения работы калькулятора полей в таблице атрибутов будет видна площадь.
Можно создать виртуальное поле — тогда в NextGIS QGIS при создании новой геометрии значение этого поля будет считаться на лету.
Примечание
В настройках подписей можно генерировать подпись выражением на лету,
однако в NextGIS QGIS 17.12 площади считаются только в единицах измерения слоя, а не проекта.
Если правильная площадь не получилась, то используйте следующий метод. Он более низкоуровневый.