Графика есть - записей нет

MapInfo, MapBasic
nikomuro
Активный участник
Сообщения: 220
Зарегистрирован: 10 мар 2012, 07:59
Репутация: 4
Откуда: Новосибирск

Графика есть - записей нет

Сообщение nikomuro » 24 мар 2015, 14:32

Прошу помощи, как можно срочнее. имеется слой реки, в котором в виде записей числится около 53 объектов, в графике же содержится намного больше. Часть графических объектов не содержит сопоставленной семантики (записи в таблице). То есть существует на птичъих правах. Упакуем таблицу и все пропадет. Копировать бесхозные объекты нельзя, операции пространственные проводить с ними нельзя, только редактировать и все. Как их можно восстановить в нормальные объекты.
Вложения
реки.rar
(132.13 КБ) 89 скачиваний

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 1811
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1134
Откуда: Казань

Re: Графика есть - записей нет

Сообщение Игорь Белов » 24 мар 2015, 16:08

Посмотрите, может, устроит.
Вложения
реки_2.zip
(111.96 КБ) 70 скачиваний

Slinger
Гуру
Сообщения: 830
Зарегистрирован: 17 июн 2010, 23:14
Статьи: 2
Репутация: 189
Откуда: Москва

Re: Графика есть - записей нет

Сообщение Slinger » 24 мар 2015, 16:46

Пофиксил, попробуйте.
Вложения
реки_fixed.rar
(131.99 КБ) 68 скачиваний

nikomuro
Активный участник
Сообщения: 220
Зарегистрирован: 10 мар 2012, 07:59
Репутация: 4
Откуда: Новосибирск

Re: Графика есть - записей нет

Сообщение nikomuro » 24 мар 2015, 20:48

ErnieBoyd, Slinger огромное спасибо! Прошу описать как решался данный вопрос. В какую сторону копать?

nikomuro
Активный участник
Сообщения: 220
Зарегистрирован: 10 мар 2012, 07:59
Репутация: 4
Откуда: Новосибирск

Re: Графика есть - записей нет

Сообщение nikomuro » 24 мар 2015, 21:31

ErnieBoyd - почему графика стала отличаться от исходной?

Sibit
Активный участник
Сообщения: 206
Зарегистрирован: 21 окт 2009, 13:29
Проекты: 1
Репутация: 27
Откуда: Новосибирск

Re: Графика есть - записей нет

Сообщение Sibit » 25 мар 2015, 06:42

Попробовал пофиксить, результат такой же как у Slinger - 441 запись. (в окне списка просто добавил записей до 1000, а потом удалил объекты без графики).

ErnieBoyd, как вы делали?

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 1811
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1134
Откуда: Казань

Re: Графика есть - записей нет

Сообщение Игорь Белов » 25 мар 2015, 09:17

Спасибо, Sibit! Не думал, что простое добавление пустых записей сработает.

А мы не умеем идти лёгким путём :?

Я превратил слой в векторную картинку, а потом импортировал обратно.
В итоге моё кунг-фу привело к потере всего - мелких объектов, семантики, географии, геометрии, стилей.
  • В остатке 463 разгруппированные линии из исходных 476.
  • Семантика потеряна безвозвратно.
  • Для восстановления геопривязки использовались кресты, появившиеся в углах.
  • Искажение геометрии отлично видно при зумировании.
  • Из стилей сохранился только цвет тех линий, что были истинными Blue.
Такая вот "генерализация" :oops:

Sibit
Активный участник
Сообщения: 206
Зарегистрирован: 21 окт 2009, 13:29
Проекты: 1
Репутация: 27
Откуда: Новосибирск

Re: Графика есть - записей нет

Сообщение Sibit » 25 мар 2015, 09:35

ErnieBoyd писал(а): Я превратил слой в векторную картинку, а потом импортировал обратно.
А можно этот момент подробнее? А то, я совсем не понимаю, что было сделано(сам попробовал импорт в шейп, но не вышло).

Там скорей всего как-то грохнули часть файла с данными, индекс и Map сохранился как есть(или подсунули DAT от другой таблицы). Отсюда такой эффект. Соответственно семантику восстановить невозможно.

nikomuro
Активный участник
Сообщения: 220
Зарегистрирован: 10 мар 2012, 07:59
Репутация: 4
Откуда: Новосибирск

Re: Графика есть - записей нет

Сообщение nikomuro » 25 мар 2015, 09:45

Да, видимо так и случилось. пользователи ко мне уже пришли с проблемой, стал разбираться а тут такое, полез в файлы вижу что висят временные файлы tma, tin tda а никто их не редактирует. Смотрю файл графика есть а связка в индексе отсутствует. Добавлял записи через таблицу но пораскинув умишком решил что у них и индекс будет свой и не привязан к графике и не смог пока больше ничего придумать, решил обратится сюда.
Векторизацию же заново (хоть и по векторной картинке) я даже и не рассматривал, однако тоже как вариант решения проблемы.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 1811
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1134
Откуда: Казань

Re: Графика есть - записей нет

Сообщение Игорь Белов » 25 мар 2015, 10:45

Sibit писал(а):
ErnieBoyd писал(а): Я превратил слой в векторную картинку, а потом импортировал обратно.
А можно этот момент подробнее? А то, я совсем не понимаю, что было сделано
В моих словах "превратил в картинку" нет преувеличения, я низко пал, встав на путь изврата. Если действительно интересно, вот этот б-гомерзкий способ.
  1. Положил окно карты на лист отчёта. Если бы были пунктирные или ещё какие хитрые линии, сначала отобразил бы слой единообразно.
  2. Распечатал отчёт на виртуальный PDF-принтер.
  3. Экспорировал PDF в DXF.
  4. Импортировал DXF в MapInfo TAB с трансформированием координат.

Slinger
Гуру
Сообщения: 830
Зарегистрирован: 17 июн 2010, 23:14
Статьи: 2
Репутация: 189
Откуда: Москва

Re: Графика есть - записей нет

Сообщение Slinger » 25 мар 2015, 10:58

Я поступил так же, как и описывал в трёх предыдущих темах по MI, у авторов которых были аналогичные ошибки:

1) Определил количество объектов в таблице MI. Так как файл id содержит в себе адреса (оффсеты/смещения) указателей связи семантики .dat и графики .map, а каждый указатель состоит из 4-х байт, то чтобы определить количество объектов, нужно разделить размер файла .id в байтах на 4. Получим количество объектов.

2) Открываем файл .dat в любом hex-редакторе. В .dat файле в смещениях 0x04-0x07 прописано количество объектов.
image1.jpg
image1.jpg (62.04 КБ) 4495 просмотров
В исходном dat файле было прописано 36 объектов (36 в шестнадцатеричной системе счисления = 54 в десятеричной). Мне нужно было прописать 441 объект, то есть 01B9 в hex системе счисления. А поскольку в 95% процентах любого файла на ПК используется метод записи байт little endian, то есть старший бит должен быть справа, то я записываю это число справа налево, то есть "B9 01". Тем самым я сказал MI, чтобы он отобразил мне 441 запись в списке таблицы. Если я задам число, большее чем 441, то первые 441 объект будут связаны с графикой, а остальные будут просто пустые строки.

Собсна всё. MI добавил недостающие строчки, заполнил их какой-то неведомой семантикой, непонятно откуда взявшейся (её в dat нет), автоматически связал её с графикой из .map через указатели в id. И всё :)
Последний раз редактировалось Slinger 25 мар 2015, 12:10, всего редактировалось 1 раз.

Донецков
Гуру
Сообщения: 3056
Зарегистрирован: 19 май 2010, 19:44
Репутация: 188

Re: Графика есть - записей нет

Сообщение Донецков » 25 мар 2015, 11:58

Последнее сообщение автору можно оформить в виде статьи :) Кому-то может быть очень полезной информация...

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 786
Ваше звание: званий не имею
Откуда: Москва

Re: Графика есть - записей нет

Сообщение Александр Мурый » 25 мар 2015, 13:03

Slinger, присоединяюсь к просьбе накидать короткую статью по теме. Очень полезная информация и не для всех очевидная.
Редактор материалов, модератор форума

Slinger
Гуру
Сообщения: 830
Зарегистрирован: 17 июн 2010, 23:14
Статьи: 2
Репутация: 189
Откуда: Москва

Re: Графика есть - записей нет

Сообщение Slinger » 26 мар 2015, 00:03

Писать по сути не о чем. В идеале необходимо разобрать побайтово ещё и .map файл, но поскольку формат бинарный и закрытый, и Pitney Bowes никакого объяснения файлу не давали, то разбирать руками данный формат - задача долгая и неблагодарная.

Но, думаю, что-нибудь накатаю :)

Boris
Гуру
Сообщения: 4115
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 405
Откуда: Париж

Re: Графика есть - записей нет

Сообщение Boris » 27 мар 2015, 04:40

Хм.. Я не и не знал, что это так актуально и востребовано.
Для "пострадавших" прилагаю программу на VB 6.0, которая расковыривает битый файл Mapinfo. Вернее два файла - DAT и MAP. Каждый из них сохраняет в отдельный файл, связанный по уникальному номеру (RowID) - графика отдельно, атрибутика отдельно. Связано с тем, что в сбойном файле теряется однозначность связей - образуются связи многие-к-многим. Автоматически разобраться какие данные правильные, а какие нет - невозможно. От того и две таблицы.
myfolder.ru/files/43313356
Утилита предоставляется "как есть" в самом худшем проявлении :mrgreen: этого принципа - сделал и забыл, а описание не создал или потерял.
Я ее создал по нужде в 2011 году, по результатам анализа всего, что нашел в интернете - утилиты RECOVERY 1999 года(?), неофициального описания форматов MAP и DAT(он же DBF) + ID (он образует связи MAP <-> DAT), утилиты MITAB и еще чего то.
Для работы инсталляция не нужна, нужен только файл Recover2011.exe и стандартные библиотеки для запуска приложений на VB 6.0. Если их нет на компьютере, то инсталляция их установит, хотя где то на сайте в статьях (?) я видел набор файлов для запуска VB 6.
PS Файл положил на первый попавшийся сервер. Могу переложить куда укажите.

Ответить

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

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

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