Страница 1 из 1
Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 13 ноя 2013, 10:32
Denis Rykov
Потребовалось создать шестиугольную сетку на территорию Москвы. Требования к создаваемым шестиугольникам такое: радиус описанной около них окружности должен составлять 250 метров. Шестиугольники в QGIS можно построить с использованием плагина MMQGIS, а так как размеры шестиугольника в MMQGIS настраиваются как я понимаю в единицах измерения слоя, то преобразуем наши данные (слой boundary-polygon
отсюда) в систему координат EPSG:28407 - Pulkovo 1942 / Gauss-Kruger zone 7. Далее открываем MMQGIS - Create - Create Grid Layer и задаем настройки шестиугольной сетки H Spacing и V Spacing, после чего строим сетку. После того как сетка построена, используя инструмент "Измерить линию" измеряем параметры получившегося шестиугольника, получаем 500 x 577 вместо заданных 433 x 500. Это глюк плагина или где-то в моих рассуждениях ошибка? Или, возможно, под H Spacing и V Spacing подразумеваются просто не те размеры.
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 13 ноя 2013, 14:03
dab
Попробуйте наоборот
H Spacing = 500
V Spacing = 433
По моему, глюк плагина.
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 14:40
Denis Rykov
При изменении H Spacing в плагине V Spacing пересчитывается автоматически: H Spacing: 500 -> V Spacing 577.350538379. Моим условиям удовлетворили такие настройки: V Spacing: 433.0127018922193 -> H Spacing: 375, хотя по факту ширина (H Spacing) получилась 500. Поправил локально в плагине так:
Код: Выделить всё
--- mmqgis_dialogs.py 2013-11-14 18:56:53.650229826 +0700
+++ mmqgis_dialogs_m.py 2013-11-14 18:56:00.381965672 +0700
@@ -1174,18 +1174,18 @@
# Hexagonal grid must maintain fixed aspect ratio to make sense
if unicode(self.gridtype.currentText()) == "Hexagon (polygon)":
spacing = float(text)
- self.hspacing.setText(unicode(spacing * 0.866025403784439))
+ self.hspacing.setText(unicode(spacing / 0.866025403784439))
def hspacing_changed(self, text):
if unicode(self.gridtype.currentText()) == "Hexagon (polygon)":
spacing = float(text)
- self.vspacing.setText(unicode(spacing / 0.866025403784439))
+ self.vspacing.setText(unicode(spacing * 0.866025403784439))
def gridtype_changed(self, text):
if text == "Hexagon (polygon)":
spacing = float(self.vspacing.displayText())
- self.hspacing.setText(unicode(spacing * 0.866025))
+ self.hspacing.setText(unicode(spacing / 0.866025))
def run(self):
savename = unicode(self.filename.displayText()).strip()
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 16:38
Донецков
И как это заменить в плагине?
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 17:22
Александр Мурый
Донецков писал(а):И как это заменить в плагине?
Найти в директории, куда установлен плагин, файл "mmqgis_dialogs.py", и заменить строки:
Код: Выделить всё
self.hspacing.setText(unicode(spacing * 0.866025403784439))
на
Код: Выделить всё
self.hspacing.setText(unicode(spacing / 0.866025403784439))
И
Код: Выделить всё
self.vspacing.setText(unicode(spacing / 0.866025403784439))
на
Код: Выделить всё
self.vspacing.setText(unicode(spacing * 0.866025403784439))
Я сделал в линуксе такой командой:
Код: Выделить всё
find $HOME/.qgis2/ -name "*mmqgis*.py" -exec sed -i 's/self.hspacing.setText(unicode(spacing \*/self.hspacing.setText(unicode\(spacing \//g' {} \; -exec sed -i 's/self.vspacing.setText(unicode(spacing \//self.vspacing.setText(unicode\(spacing \*/g' {} \;
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 21:21
Denis Rykov
Написал письмо автору плагина с описанием проблемы, он ответил что-то не по теме. Написал еще раз.
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 22:14
Донецков
Код: Выделить всё
self.vspacing.setText(unicode(spacing / 0.866025403784439))
- в текс не находится, есть только
Код: Выделить всё
self.vspacing.setText(unicode(spacing / 0.866025))
думаю, это не принципиально?
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Добавлено: 14 ноя 2013, 23:47
Denis Rykov
Вообщем, ситуация такая, что бага нет, но путаница есть, под "H Spacing" понимается не та величина, которая обозначена как "500" на картинке из первого сообщения. Вот что написал автор MMQGIS:
The confusion is in what is meant by horizontal and vertical spacing.
Vertical spacing is the distance between centers of hexagons on
adjacent rows. Hexagons abut each other on adjacent rows, so the
height of the hexagon is equivalent to the vertical spacing.
Horizontal spacing is the distance between centers of hexagons
in adjacent columns. Note that because of lattice arrangement,
hexagons in adjacent "columns" proceed in a zig-zag arrangement
(up and down) as you move from left to right. This is the
aforementioned overlap, which means that horizontal spacing
is less than the width of the hexagon.
Accordingly, with a vertical spacing of 577, the horizontal
spacing should be the lesser value of 500, so the code is correct.
Because the dialog box is designed for conventional grid shapes,
it does not clearly represent the geometric complexities of
hexagonal lattices. But, again, since hexagonal grids are not
commonly used, there is no clear reason to implement and maintain
a totally separate dialog for them.