Страница 1 из 1
Разбивка полигона на пикеты для изучения площадей
Добавлено: 20 янв 2017, 21:32
Анатолич
Перед нами стоит задача изучить неправильной формы полигон по равномерно распределенной сети 100мx20м. Расстояние между профилями 100 м, расстояние между точками наблюдения 20 м. Азимут простирания профилей 45 градусов (схема профилей и пикетов вложена к теме).
Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20. Полученные точки необходимо отправить в GPS, для облегчения поиска их на местности.
Другими словами разбить полигон на пикеты, а данные о пикетах залить в GPS.
Чтобы представить объемы работы, я добавил еще один файл из практической жизни (kiy.jpg). На нем видно количество точек, с которыми приходиться иметь дело. Файл весит больше 5 мб, поэтому разбил его через WinRAR на два архива.
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 21 янв 2017, 15:38
5Nap
Анатолич писал(а):
Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20.
Вам нужен fishnet с параметрами cell_width = 100, cell_height = 20 и углом наклона оси в 45* и типом геометрии point.
Потом точечный слой клипнуть исходным полигоном - получите искомые точки. Если нужно задать им номер - придётся накидать что-то простенькое на питоне в калькуляторе формата [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
https://pro.arcgis.com/ru/pro-app/tool- ... ishnet.htm
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 22 янв 2017, 20:56
Анатолич
Можете отправить фото "скина окна [fishnet]" с нужными параметрами? Мне не понятно, куда вводить угол наклона оси, и тип геометрии point?
Инструмент Fishnet - есть. Не знаю как правильно прописать окна в инструменте.
И как прописать грамотно "номер ячейки равен предыдущий+1"?
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 22 янв 2017, 21:07
ericsson
https://pro.arcgis.com/ru/pro-app/tool- ... -works.htm угол поворота в явном виде не задается, он определяется положением противоположного угла сетки.
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 23 янв 2017, 05:50
Анатолич
Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона. Файл с результатом работы в формате jpg приложен к сообщению.
Как в калькуляторе прописать подобную формулу - [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 23 янв 2017, 07:59
ericsson
Даже не глядя на вашу картинку (между прочим, ее можно было вставить в сообщение, а не прикладывать к нему и тем более - не архивировать, т.к. JPEG почти не сжимается), скажу, что у вас ошибки в математике, а не у ArcGIS. Считайте лучше, пока не добьетесь результата без ошибок.
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 23 янв 2017, 08:49
5Nap
Анатолич писал(а):Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона.
точные координаты 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

Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 23 янв 2017, 20:31
Анатолич
Можете подробнее описать как просчитать номер ряда и номер колонки для сетки. У меня не получается
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 24 янв 2017, 10:32
5Nap
Для начала:
сдвиг всей сетки так, чтобы центр левой нижней ячейки был в начале координат (исходя из наклона против часовой на 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), получите центроиды полигонов с атрибутикой, лежащие на ваших профилях.
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 24 янв 2017, 14:33
Анатолич
При создании поля column выходит ошибка:
Указанное имя поля “column” неверно, так как содержит зарезервированное слово. Хотите автоматически заменить имя поля на “column_”?
Согласившись, вычисляю поле по формуле: column = (!OID!-1)%50 + 1
Все пока хорошо!
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
Re: Разбивка полигона на пикеты для изучения площадей
Добавлено: 24 янв 2017, 15:54
5Nap
Анатолич писал(а):вычисляю поле по формуле: column = (!OID!-1)%50 + 1
...
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
во-первых, вместо %50 и //50 вам нужно подставить ваше количество столбцов, которое вы указали при создании сетки.
в формуле, где высчитывается номер пикета (newcolumn), ничего менять не нужно, она не зависит от названия COLUMN или COLUMN_. Выложите текст ошибки.