Так, если Вы не в дружбе с базами данных, то можно все не выходя из АркГИС. Разбить полигоны на вертексы понятно
Data Management Tools - Features - Feature Vertices To Points. В результирующем слое точек будет поле
ORIG_FID - это идентификатор полигона. Получить расстояния от каждой точки до каждой
Analysis Tools - Proximity - Point Distance. На входе два точечных слоя, в качестве входящего и ближайшего назначаем один и тот же слой вертексов. В (
ОГРОМНОЙ) результирующей таблице два поля
INPUT_FID и
NEAR_FID, но это уже идентификаторы точек из таблицы вертексов. Вот теперь самое интересное - объединить таблицу с другой таблицей дважды нельзя - в АркГИС реляционная теория урезана до неузнаваемости (практически до бесплодия). Тогда создаем копию слоя вертексов, и объединяем (
Join) таблицу расстояний с таблицей вертексов по полю
INPUT_FID, а копию вертексов по полю
NEAR_FID. В определяющем запросе (
Definition Query) таблицы расстояний пишем, что
ORIG_FID таблицы вертексов равен
ORIG_FID ее копии. В результате у нас есть только расстояния внутри полигонов. Отсталость открыть таблицу расстояний (там теперь много новых полей появилось), выделить столбец
ORIG_FID, кликнуть на нем правой мышой и выбрать
Summarize, после чего сказать, что на выходе нас интересует только максимум по полю
DISTANCE. Ну а далее объединяем суммарную таблицу с исходным слоем полигонов.
Если же не хочется сохранять таблицу огромного размера, то можно в Аксессе (или в любой СУБД), но с реляционными базами придется подружиться. Записываем в таблицу слоя вертексов координаты
Data Management Tools - Features - Add XY Coordinates. Кидаем на эту таблицу два одинаковых запроса, для простоты
Vert1 и
Vert2 (чтобы не запутаться, хотя можно и без них). А далее вот такой запрос:
Код: Выделить всё
SELECT Vert1.ORIG_FID, Max(([Vert1]![POINT_X]-[Vert2]![POINT_X])^2+([Vert1]![POINT_Y]-[Vert2]![POINT_Y])^2) AS Dist
FROM Vert1 INNER JOIN Vert2 ON Vert1.ORIG_FID = Vert2.ORIG_FID
GROUP BY Vert1.ORIG_FID;
т.е. объединяем
Vert1 и
Vert2 по полю
ORIG_FID, по нему же делаем группировку, считаем квадрат расстояния между точками и берем максимальный. Никаких промежуточных таблиц при этом не сохраняется.
Осталось добавить поле в атрибутивной таблице полигонов и записать туда нужные цифири, не забыв взять корни - Аксесс вполне способен писать прямо в атрибутивную таблицу, а корни сразу не брались, чтобы их не считать в огромном количестве - не самая быстрая функция.
Можно конечно и ручками каждый из 19000 полигонов, тогда проще. Делаете слой вертексов только одного полигона, считаете расстояния и берете максимальное. Но это вопрос, чего сложнее - загрузить машину огромной таблицей, прочитать книжку по СУРБД или 19000 раз нажать одну и ту же последовательность клавиш.