ogr2ogr и знак " в mid файле

Ответить
maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

ogr2ogr и знак " в mid файле

Сообщение maks24 » 12 сен 2014, 05:39

Столкнулся с такой проблемой. Не уверен, возможно гдето описаны эти ограничения. При работе с mid/mif файлом выдавалась ошибка (error during reading Record), обработка файла прерывалась на объекте у которого в семантике есть символ " .

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: ogr2ogr и знак " в mid файле

Сообщение Дмитрий Барышников » 13 сен 2014, 22:01

У меня не воспроизводится.
ogrinfo tesst.mid tesst
Had to open data source read-only.
INFO: Open of `tesst.mid'
using driver `MapInfo File' successful.

Layer name: tesst
Geometry: Unknown (any)
Feature Count: 5
Extent: (9489065.570524, 7584043.792144) - (9491797.284040, 7586990.912169)
Layer SRS WKT:
PROJCS["unnamed",
GEOGCS["unnamed",
DATUM["Pulkovo_1942",
SPHEROID["Krassovsky",6378245,298.3],
TOWGS84[24,-123,-94,0.02,-0.25,-0.13,1.1]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",51],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",9500000],
PARAMETER["false_northing",0],
UNIT["Meter",1]]
id: Integer (10.0)
Nametext: String (20.0)
OGRFeature(tesst):1
id (Integer) = 3
Nametext (String) = AbcdefgTEst123456789
Style = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
POLYGON ((9489275.437683489173651 7585278.911983350291848,9491294.979035940021276 7584405.038893880322576,9491095.433212360367179 7584043.792144290171564,9489127.498538419604301 7585017.438145560212433,9489275.437683489173651 7585278.911983350291848))

OGRFeature(tesst):2
id (Integer) = 2
Nametext (String) = TestShapefile1234567
Style = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
POLYGON ((9490782.352696049958467 7585963.560584950260818,9491797.284040119498968 7585574.790273490361869,9491339.704823980107903 7584669.953176910057664,9490255.964575219899416 7585113.770612110383809,9490383.261048890650272 7585340.839997570030391,9490658.496667619794607 7585753.693425670266151,9490782.352696049958467 7585963.560584950260818))

OGRFeature(tesst):3
id (Integer) = 1
Nametext (String) = 01234567890��������
Style = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
POLYGON ((9489588.518199799582362 7586428.020691559650004,9489739.897790100425482 7586342.009560709819198,9489836.230256659910083 7586479.627370069734752,9489922.241387510672212 7586438.342027259990573,9489846.551592359319329 7586304.164663130417466,9490018.573854070156813 7586214.713087039999664,9490118.346765860915184 7586366.092677339911461,9490245.64323952049017 7586324.807334530167282,9490083.942313520237803 7586080.535722910426557,9489702.052892519161105 7586255.998429849743843,9489557.554192690178752 7585963.560584950260818,9489891.277380399405956 7585764.014761369675398,9489805.266249550506473 7585605.75428059976548,9489444.019499970600009 7585770.895651839673519,9489172.224326470866799 7585333.95910710003227,9489120.61764794960618 7585358.042223740369081,9489069.010969439521432 7585426.851128419861197,9489065.570524210110307 7585526.624040209688246,9489289.199464429169893 7585929.156132609583437,9489588.518199799582362 7586428.020691559650004),(9489437.138609500601888 7586042.690825330093503,9489368.329704809933901 7585939.477468309924006,9489413.055492859333754 7585908.513461199589074,9489478.423952309414744 7586004.845927760004997,9489437.138609500601888 7586042.690825330093503),(9489657.327104479074478 7585846.585446990095079,9489622.922652140259743 7585784.657432770356536,9489688.291111590340734 7585753.693425670266151,9489719.255118699744344 7585812.180994650349021,9489657.327104479074478 7585846.585446990095079))

OGRFeature(tesst):4
id (Integer) = 0
Nametext (String) = www'dgdfgd
Style = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
POLYGON ((9491275.658313259482384 7586627.944801930338144,9491775.593301799148321 7586968.672249379567802,9491287.235590180382133 7586132.296139719896019,9491275.658313259482384 7586627.944801930338144))

OGRFeature(tesst):5
id (Integer) = 0
Nametext (String) = qqq"qqsss
Style = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
POLYGON ((9490578.681157149374485 7586990.912168670445681,9491100.56537670083344 7586952.95938660018146,9491100.56537670083344 7586952.95938660018146,9490702.687954779714346 7586359.67389022000134,9490375.653575049713254 7586937.617157699540257,9490578.681157149374485 7586990.912168670445681))
2 последние записи с одинаронй и двойно кавычнокй в атрибутах.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: ogr2ogr и знак " в mid файле

Сообщение Ariki » 14 сен 2014, 00:35

А сам MID/MIF корректный? Получен с помощью MapInfo или другого ПО? Я, к примеру, неоднократно сталкивался с тем, что ГИС Панорама экспортирует в MIF/MID некорректно на 64-битных системах.
В корректном MID там, где в тексте атрибута встречается двойная кавычка, она должна быть экранирована обратным слэшем перед ней удвоением кавычки.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: ogr2ogr и знак " в mid файле

Сообщение Дмитрий Барышников » 14 сен 2014, 13:38

mid получен в qgis - я пересохранил шейп в мид. Qgis использует для создания этих файлов gdal. Экранируется как и написано - удвоением кавычки. Смотрел в блокноте.
Версия gdal какая?
ogr2ogr --version

[ Сообщение с мобильного устройства ]

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: ogr2ogr и знак " в mid файле

Сообщение Ariki » 14 сен 2014, 14:37

Да я имел в виду MID топикстартера. Просто такая проблема обычно возникает с данными, экспортированными из сторонних программных продуктов (не использующих OGR). То кавычка не экранирована, то перевод строки или символ \0 в неожиданном месте.

maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

Re: ogr2ogr и знак " в mid файле

Сообщение maks24 » 15 сен 2014, 14:00

Спасибо за ответы. Ковычка не экранирована. Как она должна быть экранирована? Можете написать пример правильной записи, например для такой строки: 0;Москва";100
mid/mif генерируется своим скриптом из базы данных, поэтому не учли.
Плюс к этому вопросу может кто знает, есть ли простой способ узнать на какой записи(features) в ogr происходит ошибка?

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: ogr2ogr и знак " в mid файле

Сообщение Ariki » 15 сен 2014, 15:17

Если в тексте встречается разделитель (;) или кавычка, то весь текст берём в кавычки. Саму кавычку, встречающуюся в тексте, при этом удваиваем (как в языке Бейсик).
В вашем примере:

Код: Выделить всё

0;"Москва""";100
Что делать, если в тексте встретится перевод строки, я не знаю. Возможно, в MID-файле такой текст представить нельзя.

maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

Re: ogr2ogr и знак " в mid файле

Сообщение maks24 » 17 сен 2014, 08:00

Ariki, спасибо, с двойной ковычкой действительно работает.

Код: Выделить всё

Запись в mid: 934,8,"53-256"""
ogrinfo:
OGRFeature(kolodec):1
  ID (Integer) = 934
  KODATS (Integer) = 8
  NUMBER (String) = 53-256"

Ответить

Вернуться в «GDAL/OGR»

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

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