Шестиугольная сетка в QGIS с использованием MMQGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Шестиугольная сетка в QGIS с использованием MMQGIS

Сообщение Denis Rykov » 13 ноя 2013, 10:32

Потребовалось создать шестиугольную сетку на территорию Москвы. Требования к создаваемым шестиугольникам такое: радиус описанной около них окружности должен составлять 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
settings.png (37.9 КБ) 7144 просмотра
hexagon.png
hexagon.png (2.63 КБ) 7144 просмотра
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Шестиугольная сетка в QGIS с использованием MMQGIS

Сообщение dab » 13 ноя 2013, 14:03

Попробуйте наоборот :)
H Spacing = 500
V Spacing = 433

По моему, глюк плагина.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Шестиугольная сетка в QGIS с использованием MMQGIS

Сообщение Denis Rykov » 14 ноя 2013, 14:40

При изменении 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

Сообщение Донецков » 14 ноя 2013, 16:38

И как это заменить в плагине?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

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' {} \;
Редактор материалов, модератор форума

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Шестиугольная сетка в QGIS с использованием MMQGIS

Сообщение Denis Rykov » 14 ноя 2013, 21:21

Написал письмо автору плагина с описанием проблемы, он ответил что-то не по теме. Написал еще раз.
Spatial is now, more than ever, just another column- The Geometry Column.

Донецков
Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Шестиугольная сетка в QGIS с использованием MMQGIS

Сообщение Донецков » 14 ноя 2013, 22:14

Код: Выделить всё

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

Сообщение Denis Rykov » 14 ноя 2013, 23:47

Вообщем, ситуация такая, что бага нет, но путаница есть, под "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.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей