Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Ответить
MichaelK
Новоприбывший
Сообщения: 14
Зарегистрирован: 19 июн 2012, 23:28
Репутация: 5

Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Сообщение MichaelK » 05 июл 2012, 09:44

Хочу получить структуру таблицы mapinfo tab-файла, для дальнейшего сравнения её с другими таблицами.
Для теста сделал таблицу со всеми возможными типами колонок. Когда начал вытаскивать структуру таблицы столкнулся с тем, что на разные поля ogr выдает одинаковый тип.
А именно: Integer и Small Integer полностью идентичны, а колонка Logical похожа на строку из 1 символа.

Кто-нибудь сталкивался с такой проблемой? Как узнать исходный тип?

Python 2.5.1, gdal 1.6
Используемый код для определения структуры

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

from osgeo import ogr
import os
oft_fields = dict((getattr(ogr, x), x) for x in dir(ogr) if x.startswith('OFT'))

def get_columns(tabFile):
	tab = ogr.Open(tabFile, False)
	layer = tab.GetLayer(0)
	fields = layer.GetLayerDefn()

	for i in range( fields.GetFieldCount() ):
		field = fields.GetFieldDefn( i )
	
		print "Field name: \t\t'%s'" % (field.GetNameRef())
		print "Field type: \t\t%s (%s)" % (field.GetType(), oft_fields.get(field.GetType(), 'unknown'))
		print "GetFieldTypeName: \t", field.GetFieldTypeName(field.GetType())
		print "Width,Precision: \t(%s,%s)" % (field.GetWidth(), field.GetPrecision())
		#print "MapInfo type: %s" % ( ??? )
		print "-------------------------------------\n"

	
print get_columns(r'.\TEST_TYPES.TAB')
Вывод

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

Field name:             'Character10' ( исходный тип записан в названии колонки для удобства)
Field type:             4 (OFTString)  (возвращаемый ogr'ом тип)
GetFieldTypeName:       String      (возвращаемое ogr'ом имя типа)
Width,Precision:        (10,0)         (возвращаемая ogr'ом ширина и точность)
-------------------------------------

Field name:             'Integer'
Field type:             0 (OFTInteger)
GetFieldTypeName:       Integer
Width,Precision:        (0,0)
-------------------------------------

Field name:             'Small_Integer'
Field type:             0 (OFTInteger)
GetFieldTypeName:       Integer
Width,Precision:        (0,0)
-------------------------------------

Field name:             'Float'
Field type:             2 (OFTReal)
GetFieldTypeName:       Real
Width,Precision:        (0,0)
-------------------------------------

Field name:             'Decimal_10_0'
Field type:             2 (OFTReal)
GetFieldTypeName:       Real
Width,Precision:        (10,0)
-------------------------------------

Field name:             'Decimal_10_6'
Field type:             2 (OFTReal)
GetFieldTypeName:       Real
Width,Precision:        (10,8)
-------------------------------------

Field name:             'Date'
Field type:             9 (OFTDate)
GetFieldTypeName:       Date
Width,Precision:        (10,0)
-------------------------------------

Field name:             'Time'
Field type:             10 (OFTTime)
GetFieldTypeName:       Time
Width,Precision:        (8,0)
-------------------------------------

Field name:             'DateTime'
Field type:             11 (OFTDateTime)
GetFieldTypeName:       DateTime
Width,Precision:        (19,0)
-------------------------------------

Field name:             'Logical'
Field type:             4 (OFTString)
GetFieldTypeName:       String
Width,Precision:        (1,0)
-------------------------------------

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

Re: Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Сообщение Дмитрий Барышников » 05 июл 2012, 10:32

MichaelK писал(а): Кто-нибудь сталкивался с такой проблемой? Как узнать исходный тип?
Это не проблема. Все возможные типы: http://www.gdal.org/ogr/ogr__core_8h.ht ... 3124a7c9fc

Остальные приводятся к этим типам.

MichaelK
Новоприбывший
Сообщения: 14
Зарегистрирован: 19 июн 2012, 23:28
Репутация: 5

Re: Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Сообщение MichaelK » 05 июл 2012, 13:12

Bishop,
для меня это проблема.
Я понимаю, что это общий интерфейс для работы со структурой, слой абстракции. Нельзя ли как-то напрямую обратиться к драйверу ogr отвечающему за обработку MapInfo tab-ов?

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

Re: Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Сообщение Дмитрий Барышников » 05 июл 2012, 15:25

MichaelK писал(а):Нельзя ли как-то напрямую обратиться к драйверу ogr отвечающему за обработку MapInfo tab-ов?
Можно: http://mitab.maptools.org/
Вот какие типы поддерживаются: http://mitab.maptools.org/mitab-docs/mi ... c35fef325b

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

Re: Python, GDAL/OGR, MapInfo Получить типы колонок таблицы

Сообщение Boris » 01 авг 2012, 23:38

Простите, а какого уровня программирование выполняется в этой задаче, и что означает "для дальнейшего сравнения её с другими таблицами"? Другими таблицами мапифно, или вообще другими таблицами?
Если речь зашла о прямом доступе к драйверу, то видимо простое программирование с обработкой текстовых файлов, не является проблемой в этой задаче. И означает ли вопрос, что на машине принципиально нет мапинфо? Может проще к ней обратиться?

Ответить

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

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

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