Как по-умному надписать точечные объекты?

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Как по-умному надписать точечные объекты?

Сообщение rumavis »

Как сделать так, чтобы адреса (надписи точечных объектов) располагались относительно улиц под нужным углом?

Картинка, как надо:
Изображение

Картинка, как не надо:
Изображение

В одном случае адреса «повернуты» к улице, в другом, на Гугле, — нет.
Есть точечные объекты — адреса зданий, и линейные объекты — улицы. У каждого слоя есть в таблице общее поле, по которому слои можно связать друг с другом.
Софт: ArcGIS 9.2 sp6. В плагине Maplex и в штатных средствах нашел только поворот на заданный угол, но в таблице слоев нет такого поля. Как быть? Какой софт вообще используют для таких дел, Аркгис недостаточно?
Для печатного проекта надо.
geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение geologic »

Спокон веков использовались скрипты для простановки угла по ближайшей линии, пример для ArcView вот.
Для ArcMap вам надо поискать в коллекциях что-то сходное, вот, например - но именно этот я не тестировал.
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

Мне нужен инструмент именно для ArcMap, в каком направлении копать, понял, спасибо, но пока не могу разобраться, как плагин работает. На первый взгляд маленько не то.
geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение geologic »

Вы же просили, чтобы был угол, на который делать поворот - это он есть. Растиражируйте этот угол всем вашим точкам каким-то образом (по вашему полю), и будет вам щастя ;)
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

Щасти пока нет :)

Как я понял, плагину нужно, чтобы точки были расположены на линиях (snapped), а точки только лишь связаны с линиями по таблице.
TOC выглядит так:
Изображение
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

А Вы уверены что нужен этот самый поворот?

Чем больше карта, тем трудней ее вертеть.

Идеал - все надписи должны размещаться горизонтально.
Исключение - линейные объекты (реки, улицы).

В маплексе кстати есть инструмент, который вписывает метки в полигон. Он достаточно неплохой и его вполне хватит. В любом случае поворот надписи больше чем градусов на 60 не очень целесообразен с точки зрения наглядности и читаемости карты.
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

А Вы уверены что нужен этот самый поворот? Чем больше карта, тем трудней ее вертеть.
Совершенно уверен, иначе как объяснить, что во всех печатных атласах такой поворот — стандарт де-факто. Это нужно для того, чтобы определить принадлежность адреса конкретной улице, — особенно это важно, когда много всего стоит рядом и получается нагромождение, и непонятно, что к чему относится.
Вертеть будет не очень трудно, потому что это не большая карта, а нарезанная на листы. То есть атлас.
В маплексе кстати есть инструмент, который вписывает метки в полигон.
Такое предложение звучало, но здесь не годится. В исходной задаче полигональные объекты не участвуют; есть только линии и точки.
Идеал - все надписи должны размещаться горизонтально.
Исключение - линейные объекты (реки, улицы).
Я специально спрашивал людей, которые этим атласом и будут пользоваться, — таксистов. Говорят, что удобнее — это когда повернуто; причины названы выше — так удобнее ориентироваться.
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

Дело в том что
1) это не удобней, по любым меркам дизайна.
2) есть очень много ситуаций когда такое расположение ничего не даст -
микрорайонная нумерация домов,
дома которые отстоят глубоко,
дома которые находятся на второстепенной улице, но имеют нумерацию главной улицы,
дома на площади
и т.д.

Вы рассматриваете идеальную ситуацию, которая на самом деле в лучшем случае бывает в 50% адресов.
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

Так что если хотите сделать как на верхнем примере, то это возможно только ручным трудом. Подготовка карты к печати - это всегда большой ручной труд.

Единственный вариант, если у Вас есть сеть улиц готовая для геокодирования, то с ее помощью можно создать надписи под нужным углом. Но расставлять их по местоположениям домов все равно придется вручную.
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

Вот это расширение может Вам помочь немного. Но оно для ArcViewGIS. http://arcscripts.esri.com/details.asp?dbid=13323

Если есть правильно построенная сеть улиц с номерами домов (геокодированная), то чуть дописав это расширение, на основании поля связи между адресными точками и улицами, можно проставить углы поворота для надписей.

Только учитывайте, что угол поворота более 90 градусов относительно нормального положения карты не допустим (а лучше не более 60). Карта должна читаться в нормальном положении.
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

Прежде всего, благодарю Вас за участие — проблема моя пока не решена и я рад любой помощи.

С точки зрения, как Вы говорите, дизайна, поворот это, конечно, не слишком хорошо. Но поворот — это иногда единственный способ определить, что к чему относится, так что со вторым Вашим аргументом я не соглашусь. Вот смотрите:
Изображение

Здесь только благодаря повороту понятно, какие дома относятся у улице Большой татарской, а какие — к Озерковскому переулку. Вообще, пример наглядный: чем сложнее карта, тем нужнее поворот. Согласен: все проблемы не решаются поворотом, но тем не менее.
(Надеюсь, разный взгляд на проблему не помешает отыскать способ поворота; задача много легче, чем у Коперника.)

Согласен с Вами в том, что подготовка качественной печатной карты — большой труд. Но! У меня как раз все адреса связаны с улицами (скриншот TOC чуть выше). Я нашел скрипт, который проставляет углы линейным объектам (улицам) — прописывает угол в новое поле в таблице слоя. Правда, это работает, только если улица строго прямая, тогда адреса поворачиваются как надо, — и никакой ручной работы, — а если не прямая, то работает криво.
Поэтому теперь задача такая: найти скрипт, который проставляет углы точечному объекту, анализируя полилинию, к которой этот точечный объект относится.

К сожалению, я никогда не работал с ArcViewGIS и сам не могу не то что дописывать скрипты, но и понимать. Так что пока ищу и жду помощи.
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

У Вас сеть улиц в каком виде? Она подготовленна к геокодированнию?
Она разбивается на перекрестках или улица это линия во всю ее длину?
Поля обозначающие крайние дома угловые есть?

Поле для связи какое? Имя улицы или идентификатор сегмента улицы?
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

1. Улицы — это один слой с линейными объектами, отдельный шейп-файл. Адреса — точечный слой, тоже шейп.
Улицы на перекрестках не разбиваются; каждая улица — это, как правило, линия, состоящая из нескольких отрезков, — полилиния. Иногда одна улица — это несколько (две, три) полилинии: в тех случаях, когда улица прерывается и потом продолжается, — но таких очень мало, пусть это будет исключением, потом можно вручную все поправить.

2. Полей, обозначающих крайние угловые дома, нет. Не вижу, чем они могут помочь…

3. Поле для связи: их сразу два — название улицы и специальный уникальный идентификатор (увы, не сегмента! а то я бы все уже повернул!), который надежнее чем название улицы, потому что, как я сказал выше, некоторые улицы состоят из двух-трех полилиний. То есть идентификатор связывает конкретный адрес с конкретной линией. (Вообще говоря, непринципиально, потому что там исключений раз два и обчелся, можно и по названию связать.)

4. С геокодированием я пока не разбирался, до сих пор для проекта это не требовалось.


Я формулирую задачу так. Скажите, что здесь не так :)

А) Скрипт берет точку и сопоставляет ее с полилинией следующим образом. От точки до линии находится кратчайшее расстояние. Допустим, у нас есть улица XY и точка A. Находим от точки A до улицы XY кратчайшее расстояние AB. То есть анализируем, до какого из отрезков линии кратчайшее расстояние.
Изображение

Б) Теперь строим отрезок АС, перпендикулярный отрезку AB.
Изображение

В) Всё. Осталось измерить угол отрезка AC относительно север-юга. Величину угла вписываем в таблицу адреса. Задача решена. Там, где скрипт будет сбоить, поправить потом вручную.

Я нашел пару скриптов, но они не делают прям как надо.
gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 17
Откуда: Липецк
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение gis »

Не будет работать.

Вы рассматриваете идеальные ситуации. Помимо случаев описанных выше, когда нумерация домов не связана с направлением улицы, Вы не учитываете следующее:
1) не обязательно кратчайшее расстояние получится как на Вашей схеме.
2) XBY - не понятно как на этой линии брать перпендикляр. Вам нужен сегмент, а его как раз и нет.

Если бы был слой геокодирован, то было бы все просто - сопоставить соответствующие сегменты с указанными пределами номеров соответствующим адресам и проставить угол.

Могу посоветовать следующее для ускорения работы. Ставите выборку (отображение слоя) поочередно на улицы. Выделяете поочередно дома которые идут под одним углом (т.е. до смены направления улицей). Проставляете для них угол с помощью инструмента калькулятор поля. В принципе можно поискать скрипты которые то или иное автоматизируют.

Если же Вам хочется специализированное решение, конкретное для Вашей ситуации, в форуме Работа-Подработка предложите viewforum.php?f=6. У кого есть время и желание подработать, я думаю, откликнуться.
rumavis
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 июн 2009, 11:23
Репутация: 0
Контактная информация:

Re: Как по-умному надписать точечные объекты?

Сообщение rumavis »

К сожалению, не все понял из того, что Вы сказали.

1) Кратчайшее расстояние для каждой точки будет свое, стало быть, и отрезок AB у каждой точки будет «свой». Так и должно быть.
2) Я в прошлом ответе усложнил задачу — отрезок AC, то есть перпендикуляр, строить не надо. Нужен просто угол отрезка AB, он и вписывается в таблицу точки, а в Маплексе уже корректируется поправка.
3) Направление улицы по отношению к нумерации домов безразлично, потому что адреса не «следуют» за улицей, а просто перпендикулярны; будет так:
Изображение

По-моему, как раз замечательно будет работать.

За Работу-подработку спасибо.
Ответить

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

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

Сейчас этот форум просматривают: Semrush [Bot] и 7 гостей