Страница 1 из 1

Пакетное объединение .mif

Добавлено: 04 ноя 2012, 16:53
Nule
Здравствуйте!
Пытаюсь написать скрипт на питоне для пакетного склеивания MapInfo файлов .mif на базе скрипта для склеивания шейпов:

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

import sys
import glob
from osgeo import ogr
outfile = "merge.shp"
file_list = glob.glob('C:/1/Wiki/shp/*.shp')
# CREATE OUTPUT FILE
out_driver = ogr.GetDriverByName( 'ESRI Shapefile' )
out_ds = out_driver.CreateDataSource(outfile)
out_srs = None
out_layer = out_ds.CreateLayer(outfile, out_srs, ogr.wkbPolygon)
fd = ogr.FieldDefn('name', ogr.OFTString)
out_layer.CreateField(fd)
fd = ogr.FieldDefn('kV', ogr.OFTInteger)
out_layer.CreateField(fd)
# READ EACH INPUT FILE AND WRITE FIELDS TO NEW FILE
for shapefile in file_list:
	print shapefile
	[filename, extension] = shapefile.split('.')
	in_drv = ogr.GetDriverByName( 'ESRI Shapefile' )
	in_ds = in_drv.Open(shapefile)
	in_layer = in_ds.GetLayer(0)
	in_feature = in_layer.GetNextFeature()
	kV_field = in_feature.GetFieldIndex('kV')
	counter = 1
	while in_feature is not None:
		name = filename + "_" + `counter`
		kV = in_feature.GetField(kV_field)
		out_feat = ogr.Feature(out_layer.GetLayerDefn())
		out_feat.SetField('name', name)
		out_feat.SetField('kV', kV)
		out_feat.SetGeometry(in_feature.GetGeometryRef().Clone())
		out_layer.CreateFeature(out_feat)
		out_layer.SyncToDisk()
		out_feat.Destroy()
		in_feature.Destroy()
		in_feature = in_layer.GetNextFeature()
		counter += 1
out_ds.Destroy()
Не знаю как переделать вот эту строку: out_layer = out_ds.CreateLayer(outfile, out_srs, ogr.wkbPolygon)
С шейпом всё понятно, создаем слой с типом геометрии, как и в исходных файлах. А как быть со смешанным типом геометрии .mif ?
Во всех примерах разбирают только .shp :(
Спасибо!

Re: Пакетное объединение .mif

Добавлено: 04 ноя 2012, 19:39
Дмитрий Барышников
Выберите подходящий тип геометрии здесь: http://www.gdal.org/ogr/ogr__core_8h.ht ... b65610f12a
Скорее всего wkbGeometryCollection

Re: Пакетное объединение .mif

Добавлено: 04 ноя 2012, 20:45
gamm
а зачем все эти сложности при работе с текстовыми файлами? Файлы MID просто скопировать в один, один за другим (например, использовать copy ...), примерно то же то с MIF, копируем убрав у всех файлов, кроме первого, заголовки. В R, например, все можно сделать в несколько строк, не думаю, что на питоне больше ...

Re: Пакетное объединение .mif

Добавлено: 04 ноя 2012, 20:56
Nule
gamm писал(а):а зачем все эти сложности при работе с текстовыми файлами? Файлы MID просто скопировать в один, один за другим (например, использовать copy ...), примерно то же то с MIF, копируем убрав у всех файлов, кроме первого, заголовки. В R, например, все можно сделать в несколько строк, не думаю, что на питоне больше ...
Надо именно на питоне, т.к. это лишь часть большого скрипта.