Шестиугольная сетка в QGIS с использованием MMQGIS
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Шестиугольная сетка в QGIS с использованием MMQGIS
Потребовалось создать шестиугольную сетку на территорию Москвы. Требования к создаваемым шестиугольникам такое: радиус описанной около них окружности должен составлять 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 подразумеваются просто не те размеры.
- Вложения
-
- settings.png (37.9 КБ) 7137 просмотров
-
- hexagon.png (2.63 КБ) 7137 просмотров
Spatial is now, more than ever, just another column- The Geometry Column.
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Попробуйте наоборот
H Spacing = 500
V Spacing = 433
По моему, глюк плагина.

H Spacing = 500
V Spacing = 433
По моему, глюк плагина.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
При изменении 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()
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
И как это заменить в плагине?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Найти в директории, куда установлен плагин, файл "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' {} \;
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Написал письмо автору плагина с описанием проблемы, он ответил что-то не по теме. Написал еще раз.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Код: Выделить всё
self.vspacing.setText(unicode(spacing / 0.866025403784439))
Код: Выделить всё
self.vspacing.setText(unicode(spacing / 0.866025))
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Шестиугольная сетка в QGIS с использованием MMQGIS
Вообщем, ситуация такая, что бага нет, но путаница есть, под "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.
Spatial is now, more than ever, just another column- The Geometry Column.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей