Разбивка полигона на пикеты для изучения площадей
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 20 янв 2017, 20:25
- Репутация: -3
Разбивка полигона на пикеты для изучения площадей
Перед нами стоит задача изучить неправильной формы полигон по равномерно распределенной сети 100мx20м. Расстояние между профилями 100 м, расстояние между точками наблюдения 20 м. Азимут простирания профилей 45 градусов (схема профилей и пикетов вложена к теме).
Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20. Полученные точки необходимо отправить в GPS, для облегчения поиска их на местности.
Другими словами разбить полигон на пикеты, а данные о пикетах залить в GPS.
Чтобы представить объемы работы, я добавил еще один файл из практической жизни (kiy.jpg). На нем видно количество точек, с которыми приходиться иметь дело. Файл весит больше 5 мб, поэтому разбил его через WinRAR на два архива.
Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20. Полученные точки необходимо отправить в GPS, для облегчения поиска их на местности.
Другими словами разбить полигон на пикеты, а данные о пикетах залить в GPS.
Чтобы представить объемы работы, я добавил еще один файл из практической жизни (kiy.jpg). На нем видно количество точек, с которыми приходиться иметь дело. Файл весит больше 5 мб, поэтому разбил его через WinRAR на два архива.
- Вложения
-
- kiy.part2.rar
- (481.45 КБ) 352 скачивания
-
- kiy.part1.rar
- (5 МБ) 368 скачиваний
-
- Схема профилей и пикетов
- 45567.jpg (211.6 КБ) 8731 просмотр
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Разбивка полигона на пикеты для изучения площадей
Вам нужен fishnet с параметрами cell_width = 100, cell_height = 20 и углом наклона оси в 45* и типом геометрии point.Анатолич писал(а): Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20.
Потом точечный слой клипнуть исходным полигоном - получите искомые точки. Если нужно задать им номер - придётся накидать что-то простенькое на питоне в калькуляторе формата [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
https://pro.arcgis.com/ru/pro-app/tool- ... ishnet.htm
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 20 янв 2017, 20:25
- Репутация: -3
Re: Разбивка полигона на пикеты для изучения площадей
Можете отправить фото "скина окна [fishnet]" с нужными параметрами? Мне не понятно, куда вводить угол наклона оси, и тип геометрии point?
Инструмент Fishnet - есть. Не знаю как правильно прописать окна в инструменте.
И как прописать грамотно "номер ячейки равен предыдущий+1"?
Инструмент Fishnet - есть. Не знаю как правильно прописать окна в инструменте.
И как прописать грамотно "номер ячейки равен предыдущий+1"?
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Разбивка полигона на пикеты для изучения площадей
https://pro.arcgis.com/ru/pro-app/tool- ... -works.htm угол поворота в явном виде не задается, он определяется положением противоположного угла сетки.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 20 янв 2017, 20:25
- Репутация: -3
Re: Разбивка полигона на пикеты для изучения площадей
Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона. Файл с результатом работы в формате jpg приложен к сообщению.
Как в калькуляторе прописать подобную формулу - [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона. Файл с результатом работы в формате jpg приложен к сообщению.
Как в калькуляторе прописать подобную формулу - [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
- Вложения
-
- Без названия.rar
- (2.25 МБ) 388 скачиваний
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Разбивка полигона на пикеты для изучения площадей
Даже не глядя на вашу картинку (между прочим, ее можно было вставить в сообщение, а не прикладывать к нему и тем более - не архивировать, т.к. JPEG почти не сжимается), скажу, что у вас ошибки в математике, а не у ArcGIS. Считайте лучше, пока не добьетесь результата без ошибок.
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Разбивка полигона на пикеты для изучения площадей
точные координаты X-origin и Y-origin вам придётся посчитать (особенно если вы хотите, чтобы один из профилей проходил через вашу точку (0,0). На картинке у полигона отрицательная ширина ячейки, для положительной arcgis будет строить сетку "вниз".Анатолич писал(а):Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона.
Вам нужно сдвинуть всю сетку на пол-ячейки вниз и на пол-ячейки влево, чтобы на профиль попал центр ячейки.
Потом просчитать номер ряда и номер колонки для сетки - номер ряда равен остатку от деления на количество рядов, номер ячейки - результату деления без остатка. В питоне первое - это %, второе - //. Получите два атрибута, которые вам понадобятся потом для высчёта правильного номера колонки.
Для подсчета последовательной нумерации вам нужно будет дополнить это ( http://support.esri.com/technical-article/000011137 ), дописав нужные условия. Возможно перед этим слой нужно будет правильно отсортировать (не в таблице атрибутов, а физически с помощью, например, Sort http://pro.arcgis.com/en/pro-app/tool-r ... t/sort.htm
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 20 янв 2017, 20:25
- Репутация: -3
Re: Разбивка полигона на пикеты для изучения площадей
Можете подробнее описать как просчитать номер ряда и номер колонки для сетки. У меня не получается
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Разбивка полигона на пикеты для изучения площадей
Для начала:
сдвиг всей сетки так, чтобы центр левой нижней ячейки был в начале координат (исходя из наклона против часовой на 45 градусов):
dx = +sqrt(20*20 + 100*100)*cos(1/4*pi+arctan(20/100))/2
dy = -sqrt(20*20 + 100*100)*sin(1/4*pi+arctan(20/100))/2
координаты оси y тогда будут:
x = -N + dx
y = N + dy
N - любое число, я вбил 100
Дальше создаёте поля ROW и COLUMN.
Ряды идут с ю-з на с-в
Колонки с ю-в на с-з
В калькуляторе выставить Python
row = (!OID!+1)//50 + 1
column = (!OID!-1)%50 + 1
Эта формула забита исходя из того, что слой новый и лежит в gdb - в разных форматах OBJECTID ведёт себя по-разному, поэтому удостоверьтесь, что это последовательная нумерация от 1 без пробелов.
Дальше обрезаем слой полигоном, создаём поля NEWROW и NEWCOLUMN
В калькуляторе для NEWROW просто приравниваем его ROW
Для NEWCOLUMN:
Codeblock:
lastcolumn = 0
lastrow = 0
def column(row):
..global lastcolumn
..global lastrow
..if row!=lastrow:
....lastrow = row
....column = 1
..else:
....column = lastcolumn + 1
..lastcolumn = column
..return column
*замените точки на пробелы
NEWCOLUMN=
column(!ROW!)
Потом экспортните слой в точки (FeatureToPoints), получите центроиды полигонов с атрибутикой, лежащие на ваших профилях.
сдвиг всей сетки так, чтобы центр левой нижней ячейки был в начале координат (исходя из наклона против часовой на 45 градусов):
dx = +sqrt(20*20 + 100*100)*cos(1/4*pi+arctan(20/100))/2
dy = -sqrt(20*20 + 100*100)*sin(1/4*pi+arctan(20/100))/2
координаты оси y тогда будут:
x = -N + dx
y = N + dy
N - любое число, я вбил 100
Дальше создаёте поля ROW и COLUMN.
Ряды идут с ю-з на с-в
Колонки с ю-в на с-з
В калькуляторе выставить Python
row = (!OID!+1)//50 + 1
column = (!OID!-1)%50 + 1
Эта формула забита исходя из того, что слой новый и лежит в gdb - в разных форматах OBJECTID ведёт себя по-разному, поэтому удостоверьтесь, что это последовательная нумерация от 1 без пробелов.
Дальше обрезаем слой полигоном, создаём поля NEWROW и NEWCOLUMN
В калькуляторе для NEWROW просто приравниваем его ROW
Для NEWCOLUMN:
Codeblock:
lastcolumn = 0
lastrow = 0
def column(row):
..global lastcolumn
..global lastrow
..if row!=lastrow:
....lastrow = row
....column = 1
..else:
....column = lastcolumn + 1
..lastcolumn = column
..return column
*замените точки на пробелы
NEWCOLUMN=
column(!ROW!)
Потом экспортните слой в точки (FeatureToPoints), получите центроиды полигонов с атрибутикой, лежащие на ваших профилях.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 20 янв 2017, 20:25
- Репутация: -3
Re: Разбивка полигона на пикеты для изучения площадей
При создании поля column выходит ошибка:
Указанное имя поля “column” неверно, так как содержит зарезервированное слово. Хотите автоматически заменить имя поля на “column_”?
Согласившись, вычисляю поле по формуле: column = (!OID!-1)%50 + 1
Все пока хорошо!
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
Указанное имя поля “column” неверно, так как содержит зарезервированное слово. Хотите автоматически заменить имя поля на “column_”?
Согласившись, вычисляю поле по формуле: column = (!OID!-1)%50 + 1
Все пока хорошо!
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Разбивка полигона на пикеты для изучения площадей
во-первых, вместо %50 и //50 вам нужно подставить ваше количество столбцов, которое вы указали при создании сетки.Анатолич писал(а):вычисляю поле по формуле: column = (!OID!-1)%50 + 1
...
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
в формуле, где высчитывается номер пикета (newcolumn), ничего менять не нужно, она не зависит от названия COLUMN или COLUMN_. Выложите текст ошибки.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 32 гостя