Если есть свой ноутбук или ПК, то можно) вам шашечки или ехать?Елена2026 писал(а): ↑09 апр 2026, 08:41 Спасибо за совет, но с АркГисом, боюсь, не получится, так как у нас в гос.организации нельзя устанавливать "крякнутые" программы и вообще всё проверяется ((( Ку-Гис, по идее, тоже нельзя использовать, но хоть это пока разрешили. Покупать лицензию точно не станут ради экспорта файлов... Вот проявляем изобретательность, как можем, чтобы имеющимися средствами ускорить работу.
Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
-
ustreb
- Интересующийся
- Сообщения: 44
- Зарегистрирован: 06 июл 2023, 04:41
- Репутация: 3
- Откуда: календарь
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
-
AlexRomantsov
- Завсегдатай
- Сообщения: 449
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 168
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
забавный вариант пришел в голову:
таблица атрибутов, калькулятор выражений, создаем виртуальное поле (txt), подставляем выражение типа:
'Version 2
Delimiter ","
CoordSys NonEarth Units "m" Bounds (-3274.9999, 2524.9995) (2224.99976, -5225.0005)
Columns 1
None Char(5)
DATA
Region 1' ||
'
' ||
num_points( $geometry ) ||
'
' ||
replace(
replace(
replace( geom_to_wkt( $geometry), 'Polygon ((', '')
,',','\n')
,'))','')
Выполняем, появляется поле с содержимым mif файла. Затем экспорт слоя например в csv, и поискать как текстовый файл разделить на множество
Значение атрибута:
таблица атрибутов, калькулятор выражений, создаем виртуальное поле (txt), подставляем выражение типа:
'Version 2
Delimiter ","
CoordSys NonEarth Units "m" Bounds (-3274.9999, 2524.9995) (2224.99976, -5225.0005)
Columns 1
None Char(5)
DATA
Region 1' ||
'
' ||
num_points( $geometry ) ||
'
' ||
replace(
replace(
replace( geom_to_wkt( $geometry), 'Polygon ((', '')
,',','\n')
,'))','')
Выполняем, появляется поле с содержимым mif файла. Затем экспорт слоя например в csv, и поискать как текстовый файл разделить на множество
Значение атрибута:
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Интересная идея, спасибо! Это почти mif-файл получается))) Однако при разбивке векторного слоя в экспортируемых файлах только по 3 точки от всего полигона почему-то отображается. Однако, если бы хоть координаты выгружались, проще было бы вручную мифки делать копипастом, чем экспортировать с ку-гиса через привычный "экспорт - сохранить выбранные объекты как..."
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Сначала подумала, что дело в том, что малое количество символов задала, но нет - пробовала и миллион символов задавать. И что интересно: когда я ввожу выражение, сохраняю, то в столбце с новым атрибутом для каждого объекта появляется весь нужный текст со всеми координатами всех точек полигона. После того, как я делаю разбивку векторного слоя, экспортируются в csv уже урезанные координаты (3-4 точки от полигона). И в таблице атрибутов тоже исчезают все необходимые координаты, остаются урезанные. В чём же тут фокус?
-
gamm
- Гуру
- Сообщения: 4187
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: -445565592
- Ваше звание: программист
- Откуда: Казань
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Последняя попытка ...
Железный Мозг говорит, что строку
Код: Выделить всё
err_code, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(Код: Выделить всё
err_code, _, _, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(-
AlexRomantsov
- Завсегдатай
- Сообщения: 449
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 168
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Если Вы сделали физическое поле для расчета (не виртуальное), его возможная длина зависит от формата слоя, и при сохранении текст обрежет.
Например в shp (dbf) максимум - 254 символа.
Либо надо хранить слой в современных форматах или базах данных (таких как GeoPackage), либо это поле делать виртуальным, вычисляемым (не сохраняемым).
Попробовал, виртуальное поле сохранилось в csv не обрезанным, в т.ч. через Разбить векторный слой
-
AlexRomantsov
- Завсегдатай
- Сообщения: 449
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 168
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Да, и в примере моя шапка (Version 2 Delimiter "," ...) - с потолка, заменить на свои
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Спасибо!! Удалось экспортировать весь слой в csv, открыла с помощью блокнота - начинка как раз как у mif. Надо ещё с шапкой поэкспертиментировать и проверить, примет ли их Технокад. Многоконтурные земельные участки и с дырками вырезанными тоже надо ещё попробовать сделать) Благодарю за помощь!!AlexRomantsov писал(а): ↑10 апр 2026, 05:04Если Вы сделали физическое поле для расчета (не виртуальное), его возможная длина зависит от формата слоя, и при сохранении текст обрежет.
Например в shp (dbf) максимум - 254 символа.
Либо надо хранить слой в современных форматах или базах данных (таких как GeoPackage), либо это поле делать виртуальным, вычисляемым (не сохраняемым).
Попробовал, виртуальное поле сохранилось в csv не обрезанным, в т.ч. через Разбить векторный слой
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
[/quote]
Последняя попытка ...
Железный Мозг говорит, что строку
нужно заменить на
[/quote]
Последняя попытка ...
Железный Мозг говорит, что строку
Код: Выделить всё
err_code, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(Код: Выделить всё
err_code, _, _, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(Благодарю! В этот раз Питон ошибку не выдал, сделал экспорт в назначенную папку. Но! Файлы Кугис выгрузил в форматах .tab, .map, .dat, .id, а mif просто включил в название файла (например, 62_12_0010101_4.mif.map). Не любит Кугис формат mif
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Благодарю! В этот раз Питон ошибку не выдал, сделал экспорт в назначенную папку. Но! Файлы Кугис выгрузил в форматах .tab, .map, .dat, .id, а mif просто включил в название файла (например, 62_12_0010101_4.mif.map). Не любит Кугис формат mifПоследняя попытка ...
Железный Мозг говорит, что строкунужно заменить наКод: Выделить всё
err_code, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(Код: Выделить всё
err_code, _, _, err_msg = QgsVectorFileWriter.writeAsVectorFormatV3(
-
gamm
- Гуру
- Сообщения: 4187
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: -445565592
- Ваше звание: программист
- Откуда: Казань
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Мда ... странно и загадочно.
Железный Мозг говорит, что нужно указать другой драйвер
driverName = "MapInfo MIF" вместо driverName = "MapInfo file"
Железный Мозг говорит, что нужно указать другой драйвер
driverName = "MapInfo MIF" вместо driverName = "MapInfo file"
- Игорь Белов
- Гуру
- Сообщения: 2243
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1514
- Откуда: Казань
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
В документации GDAL драйвер называется "MapInfo File"
https://gdal.org/en/stable/drivers/vector/mitab.html
Выбор TAB или MIF/MID решает выбор опции -dsco (Dataset Creation Option) "FORMAT=TAB" либо "FORMAT=MIF"
https://gdal.org/en/stable/drivers/vector/mitab.html#dataset-creation-options
IMHO в код надо добавить строку:
https://gdal.org/en/stable/drivers/vector/mitab.html
Выбор TAB или MIF/MID решает выбор опции -dsco (Dataset Creation Option) "FORMAT=TAB" либо "FORMAT=MIF"
https://gdal.org/en/stable/drivers/vector/mitab.html#dataset-creation-options
IMHO в код надо добавить строку:
Код: Выделить всё
options.datasourceOptions = ["FORMAT=MIF"]The purpose of computing is insight, not numbers
-
Елена2026
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 26 мар 2026, 19:26
- Репутация: 0
- Откуда: Россия
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Благодарю за помощь! А не подскажете, куда эту строку вставить? Я попробовала вставить её после других optionsИгорь Белов писал(а): ↑13 апр 2026, 08:05 В документации GDAL драйвер называется "MapInfo File"
https://gdal.org/en/stable/drivers/vector/mitab.html
Выбор TAB или MIF/MID решает выбор опции -dsco (Dataset Creation Option) "FORMAT=TAB" либо "FORMAT=MIF"
https://gdal.org/en/stable/drivers/vector/mitab.html#dataset-creation-options
IMHO в код надо добавить строку:Код: Выделить всё
options.datasourceOptions = ["FORMAT=MIF"]
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "MapInfo File"
options.fileEncoding = "UTF-8"
options.layerName = base_name
options.datasourceOptions = ["FORMAT=MIF"]
Отступы сохранила, но при выполнении сценария сохранение не происходит. Консоль показывает список ERROR с моими полигонами и внизу "Done. Exported: 0, skipped/errors: 5"
Квадратные скобки не надо убирать? Я попробовала и убирать
-
no87xis9
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 30 июл 2026, 16:17
- Репутация: 0
- Откуда: Брест
Re: Пакетный экспорт отдельных контуров в формате mif из векторного слоя в программе Q-gis
Елена, ваше наблюдение про "62_12_0010101_4.mif.map" — это и есть разгадка, и дело не в отступах и не в квадратных скобках. Я проверил варианты на QGIS 3.40.15 с GDAL 3.8.4, вот что происходит на самом деле.
Для драйвера "MapInfo File" QGIS не считает .mif своим расширением: он берёт ваше имя целиком и дописывает к нему .tab. Поэтому и получается "...mif.tab" рядом с .map/.dat/.id — то есть обычный TAB, у которого буквы "mif" оказались просто частью имени. Технокад такое, конечно, не примет.
А если к этому драйверу добавить строку options.datasourceOptions = ["FORMAT=MIF"], выходит ещё хуже: имя всё равно становится "...mif.tab", и GDAL его отвергает — "Open() failed ... invalid filename extension". Запись падает на каждом объекте, и вы видите ровно свои "Exported: 0, skipped/errors: 5". Эту строку нужно убрать совсем.
Верной оказалась самая первая подсказка про другой драйвер: в QGIS "MapInfo MIF" — это ОТДЕЛЬНЫЙ драйвер (в списке есть оба, и "MapInfo File", и "MapInfo MIF"). С ним всё пишется правильно, и никакие datasourceOptions не нужны:
Поменяйте cad_number на реальное имя поля с кадастровым номером и путь к папке. Обратите внимание: writeAsVectorFormatV3 возвращает четыре значения, поэтому я не распаковываю их в две переменные, а беру res[0] и res[1] — той ошибки "too many values to unpack" тут не будет.
Как проверить, что получилось именно то: рядом с каждым .mif должен лежать парный .mid, а первая строка внутри .mif — Version 300. Если снова появились .dat/.map/.id — значит опять записался TAB.
Если скриптов не хочется, ровно то же делает ogr2ogr из комплекта QGIS (OSGeo4W Shell) — там расширение .mif распознаётся само:
Оба варианта я прогнал на тестовом слое в МСК-зоне — получилась нормальная пара .mif/.mid.
Для драйвера "MapInfo File" QGIS не считает .mif своим расширением: он берёт ваше имя целиком и дописывает к нему .tab. Поэтому и получается "...mif.tab" рядом с .map/.dat/.id — то есть обычный TAB, у которого буквы "mif" оказались просто частью имени. Технокад такое, конечно, не примет.
А если к этому драйверу добавить строку options.datasourceOptions = ["FORMAT=MIF"], выходит ещё хуже: имя всё равно становится "...mif.tab", и GDAL его отвергает — "Open() failed ... invalid filename extension". Запись падает на каждом объекте, и вы видите ровно свои "Exported: 0, skipped/errors: 5". Эту строку нужно убрать совсем.
Верной оказалась самая первая подсказка про другой драйвер: в QGIS "MapInfo MIF" — это ОТДЕЛЬНЫЙ драйвер (в списке есть оба, и "MapInfo File", и "MapInfo MIF"). С ним всё пишется правильно, и никакие datasourceOptions не нужны:
Код: Выделить всё
from qgis.core import (QgsVectorFileWriter, QgsCoordinateTransformContext,
QgsFeatureRequest)
import os, re
layer = iface.activeLayer() # выделите нужный слой в легенде
out_dir = r'C:\export_mif' # папка для результата
os.makedirs(out_dir, exist_ok=True)
ctx = QgsCoordinateTransformContext()
ok = bad = 0
for f in layer.getFeatures():
name = re.sub(r'[:\\/*?"<>|]', '_', str(f['cad_number']))
one = layer.materialize(QgsFeatureRequest().setFilterFids([f.id()]))
opts = QgsVectorFileWriter.SaveVectorOptions()
opts.driverName = 'MapInfo MIF'
res = QgsVectorFileWriter.writeAsVectorFormatV3(
one, os.path.join(out_dir, name + '.mif'), ctx, opts)
if res[0] == QgsVectorFileWriter.NoError:
ok += 1
else:
bad += 1
print(name, res[0], res[1])
print('gotovo: %d, oshibok: %d' % (ok, bad))Как проверить, что получилось именно то: рядом с каждым .mif должен лежать парный .mid, а первая строка внутри .mif — Version 300. Если снова появились .dat/.map/.id — значит опять записался TAB.
Если скриптов не хочется, ровно то же делает ogr2ogr из комплекта QGIS (OSGeo4W Shell) — там расширение .mif распознаётся само:
Код: Выделить всё
ogr2ogr -f "MapInfo File" uchastok.mif sloi.gpkgКто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей