Разбивка полигона на пикеты для изучения площадей

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Анатолич
Интересующийся
Сообщения: 26
Зарегистрирован: 20 янв 2017, 20:25
Репутация: -3

Разбивка полигона на пикеты для изучения площадей

Сообщение Анатолич » 20 янв 2017, 21:32

Перед нами стоит задача изучить неправильной формы полигон по равномерно распределенной сети 100мx20м. Расстояние между профилями 100 м, расстояние между точками наблюдения 20 м. Азимут простирания профилей 45 градусов (схема профилей и пикетов вложена к теме).
Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20. Полученные точки необходимо отправить в GPS, для облегчения поиска их на местности.
Другими словами разбить полигон на пикеты, а данные о пикетах залить в GPS.

Чтобы представить объемы работы, я добавил еще один файл из практической жизни (kiy.jpg). На нем видно количество точек, с которыми приходиться иметь дело. Файл весит больше 5 мб, поэтому разбил его через WinRAR на два архива.
Вложения
kiy.part2.rar
(481.45 КБ) 352 скачивания
kiy.part1.rar
(5 МБ) 368 скачиваний
45567.jpg
Схема профилей и пикетов
45567.jpg (211.6 КБ) 8727 просмотров

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение 5Nap » 21 янв 2017, 15:38

Анатолич писал(а): Как при помощи ArcGIS покрыть полигон (не выходя за его пределы) сеткой из точек с параметрами 100х20.
Вам нужен fishnet с параметрами cell_width = 100, cell_height = 20 и углом наклона оси в 45* и типом геометрии point.
Потом точечный слой клипнуть исходным полигоном - получите искомые точки. Если нужно задать им номер - придётся накидать что-то простенькое на питоне в калькуляторе формата [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]

https://pro.arcgis.com/ru/pro-app/tool- ... ishnet.htm

Анатолич
Интересующийся
Сообщения: 26
Зарегистрирован: 20 янв 2017, 20:25
Репутация: -3

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение Анатолич » 22 янв 2017, 20:56

Можете отправить фото "скина окна [fishnet]" с нужными параметрами? Мне не понятно, куда вводить угол наклона оси, и тип геометрии point?
Инструмент Fishnet - есть. Не знаю как правильно прописать окна в инструменте.
И как прописать грамотно "номер ячейки равен предыдущий+1"?

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение ericsson » 22 янв 2017, 21:07

https://pro.arcgis.com/ru/pro-app/tool- ... -works.htm угол поворота в явном виде не задается, он определяется положением противоположного угла сетки.

Анатолич
Интересующийся
Сообщения: 26
Зарегистрирован: 20 янв 2017, 20:25
Репутация: -3

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение Анатолич » 23 янв 2017, 05:50

Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона. Файл с результатом работы в формате jpg приложен к сообщению.
Как в калькуляторе прописать подобную формулу - [проверить изменился ли номер ряда, если нет, то номер ячейки равен предыдущий+1, иначе равен 1]
Вложения
Без названия.rar
(2.25 МБ) 388 скачиваний

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение ericsson » 23 янв 2017, 07:59

Даже не глядя на вашу картинку (между прочим, ее можно было вставить в сообщение, а не прикладывать к нему и тем более - не архивировать, т.к. JPEG почти не сжимается), скажу, что у вас ошибки в математике, а не у ArcGIS. Считайте лучше, пока не добьетесь результата без ошибок.

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение 5Nap » 23 янв 2017, 08:49

Анатолич писал(а):Попробовал создать сетку в инструменте [построить сетку].
Он создает сетку, а потом разворачивает - и в итоге нужная нам сетка находиться за пределами полигона.
точные координаты 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: Разбивка полигона на пикеты для изучения площадей

Сообщение Анатолич » 23 янв 2017, 20:31

Можете подробнее описать как просчитать номер ряда и номер колонки для сетки. У меня не получается

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение 5Nap » 24 янв 2017, 10:32

Для начала:
сдвиг всей сетки так, чтобы центр левой нижней ячейки был в начале координат (исходя из наклона против часовой на 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: Разбивка полигона на пикеты для изучения площадей

Сообщение Анатолич » 24 янв 2017, 14:33

При создании поля column выходит ошибка:
Указанное имя поля “column” неверно, так как содержит зарезервированное слово. Хотите автоматически заменить имя поля на “column_”?
Согласившись, вычисляю поле по формуле: column = (!OID!-1)%50 + 1
Все пока хорошо!
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Разбивка полигона на пикеты для изучения площадей

Сообщение 5Nap » 24 янв 2017, 15:54

Анатолич писал(а):вычисляю поле по формуле: column = (!OID!-1)%50 + 1
...
После создания поля Newcolumn, после вода формулы выходит ошибка. Наверное это из-за того что я создал поле “column_”, а не “column”?
В каких местах в формуле надо добавить префикс?
во-первых, вместо %50 и //50 вам нужно подставить ваше количество столбцов, которое вы указали при создании сетки.

в формуле, где высчитывается номер пикета (newcolumn), ничего менять не нужно, она не зависит от названия COLUMN или COLUMN_. Выложите текст ошибки.

Ответить

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

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

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