Give us a file — get it back in the format you need

We read DWG, DXF, MapInfo TAB, Shapefile, GPKG, GeoJSON — and a ZIP that holds them: we take the file and its sidecars out ourselves, and say exactly what we took. Upload limit — 300 MB.

How much we take on at all is counted from the memory of the container that will READ the file: DWG up to 345 MB, DXF and tables up to 1035 MB. A bigger file is refused right away, with a number — not left to die of memory in half an hour.

And separately — a limit by the NUMBER of features: we take up to 434110 of them. It matters more than size: a 20 MB drawing with a hundred thousand features is heavier than a 200 MB drawing with a thousand. We find out how many you have in the first seconds of reading and, if we cannot take it on, say so as a number — before the work, not after half an hour.

What this format cannot do — known in advance:

nothing to lose: everything we measured for this format, it keeps

based on measurement, not a manual:
круг Roads_CAD (7152 объекта) прошёл без единого расхождения, сверка 2026-09-19; имя поля, дата-время, высота и смешанная геометрия — всё сохраняется, проба 2026-09-19; строка длиной 300 символов доехала целиком

  • does not keep height
  • field names up to 31 characters
  • values longer than 254 characters get cut
  • binary becomes «string»

based on measurement, not a manual:
высота НЕ хранится: Roads_CAD, 3355 объектов из 7152 приехали плоскими, сверка 2026-09-19; смешанная геометрия ДЕРЖИТСЯ: точка, линия и полигон записаны в одну таблицу и прочитаны обратно, проба 2026-09-19; дата-время доезжает дата-временем, проба 2026-09-19; имя поля режется до 31 символа: поле в 32 и в 40 символов вернулось одной и той же строкой в 31 (лишнее просто отброшено, не пронумеровано) — проба 2026-09-25, задача 8.11; строка обрезается до 254 БАЙТ выбранной кодировки, не символов: 200 кириллических символов (UTF-8, 2 байта на символ) вернулись 139 символами, а не 200 — проба 2026-09-25. Предупреждение печатается один раз на набор

  • dimensionality is per dataset: where not everyone has height, we lose it
  • one geometry type per dataset — mixed geometry will be split apart
  • field names up to 10 characters
  • values longer than 254 characters get cut
  • decimal fields with no digits after the point come back as integers
  • binary becomes «string»
  • datetime becomes «date»
  • time becomes «string»

based on measurement, not a manual:
имя поля режется до 10: AnnualMaintenanceCostEuro стало AnnualMain, проба 2026-09-19; имя НАБОРА не ограничено десятью: это предел DBF на имя поля, и однажды мы урезали по нему набор до E_TRN_Roa3, 2026-09-19; размерность — свойство набора: в трёхмерном наборе плоский объект получает Z = 0, то есть выдуманную высоту; на Roads_CAD так вышло у 745 объектов, 2026-09-19; смешанная геометрия НЕ держится: набор привязывается к типу ПЕРВОГО объекта, линия после точки отвергнута с ошибкой, проба 2026-09-19; дата-время становится датой: время суток теряется, проба 2026-09-19; дробное поле без знаков после запятой возвращается целым: значения те же, объявление другое — MERGED_shapes, поля mslink_0..2 и igds_graphic_group, 2026-09-19; высота хранится, проба 2026-09-19; строка обрезается до 254 БАЙТ выбранной кодировки, не символов — та же природа, что у MapInfo, проба 2026-09-25; DBF снимает пробел с ОБОИХ концов строки, не только справа: он же символ дополнения до ширины поля, и на чтении не отличим от настоящего содержимого. Roads_CAD, слой Disclaimer: текст в 303 символа обрезается нами до 254, но 254-й символ — пробел, и сверка честным побайтовым сравнением видела 253 символа против обещанных 254 — «broken» вместо «closed_with_changes». Причина найдена перебором (не байты и не кодировка: значение чистый ASCII), docs/SOURCES.md, 2026-09-25; БЕЗ явной кодировки (LDID/87 по умолчанию) кириллица приезжает строкой из «?», без .cpg — сравнение с моделью честно ловит это как расхождение значений, а не молчит. С явной ENCODING=UTF-8 создаётся .cpg и текст сохраняется, но обрезка по-прежнему в байтах: 254 байта UTF-8. Поэтому нашим умолчанием стало UTF-8, а не «как решит драйвер» — проба 2026-09-25, docs/SOURCES.md

  • dimensionality is file-wide: where not everyone has height, we strip it entirely

based on measurement, not a manual:
размерность — свойство ФАЙЛА, а не набора: общая рамка файла объявляется srsDimension=3, и ВСЕ плоские наборы рядом с трёхмерными перестают читаться — «Did not get at least 3 values», падение на первом же объекте. На Roads_CAD так легли 6 наборов из 9 при трёх целых. То есть смешанный по высоте файл даёт не потерю, а нечитаемый файл. Замерено 2026-09-19; два набора в одном файле, имя поля, дата-время, высота и строка в 300 символов сохраняются, проба 2026-09-19; на обратном чтении появляется добавочное поле gml_id — это идентификатор формата, не наши данные, 2026-09-19; ЦЕЛОЕ и ВЕЩЕСТВЕННОЕ поле НЕ превращаются в строку — проверено отдельно, а не предположено по аналогии с CSV/KML: голый драйвер (Integer/Integer64/Real) и оба реальных файла (Dublin — 16 числовых полей на 6593 объектах, Roads_CAD — 4 поля на 7152) вернули числа числами. `types` у GML остаётся пустым. Задача B3, 2026-10-02; СК хранится ТОЛЬКО вместе с кодом EPSG: прямой прогон на голом драйвере, ДВА набора в ОДНОМ файле — с EPSG:26910 (реальная цель Roads_CAD) и с настоящим кодом-без-EPSG WKT Dublin (ирландская Transverse Mercator из его же стора) — отдал первому `GetSpatialRef()` с верной проекцией, второму `None`. Не тот же механизм, что `stores_crs=false` у CSV/DXF (там хранить СК вообще некуда); здесь место есть, но без кода EPSG формат его не заполняет. Задача B3, 2026-10-02

  • integer becomes «string»
  • real becomes «string»

based on measurement, not a manual:
БЕЗ опции GEOMETRY=AS_WKT геометрия пропадает целиком и молча: объекты на месте, геометрии нет ни у одного. С опцией — геометрия и высота сохраняются, проба 2026-09-19; поэтому опция стоит в матрице, а не в коде условий: формат без неё отдаёт таблицу без карты; формат структурно не хранит СК нигде: нет .prj, нет заголовка — проверено на dublin_planning.zip, прогноз раньше обещал crs_written=yes, задача B2, 2026-10-02; целое И вещественное поле возвращаются СТРОКОЙ: у драйвера CSV нет .csvt и вообще никакой типизированной схемы. На dublin_planning.zip все 16 числовых полей (8 целых, 8 вещественных) вернулись строкой на всех 6593 объектах; на Roads_CAD.dwg — 4 поля (1 целое, 3 вещественных) на 3345 из 7152. Задача B3, 2026-10-02

  • dataset and field names become lowercase

based on measurement, not a manual:
имя НАБОРА тоже приводится к нижнему регистру: девять наборов Roads_CAD вернулись как disclaimer, e_trn_roads_mot и так далее — данные целы, сверка по имени не находила ни одного, 2026-09-19; имя поля приводится к НИЖНЕМУ регистру: AnnualMaintenanceCostEuro стало annualmaintenancecosteuro, проба 2026-09-19; высота, дата-время, строка в 300 символов и несколько наборов в файле сохраняются, 2026-09-19

  • dimensionality is per dataset: where not everyone has height, we lose it
  • returns features in a different order

based on measurement, not a manual:
размерность — свойство НАБОРА, как у Shapefile: в трёхмерном наборе плоский объект возвращается с Z = 0. На Roads_CAD так вышло у 745 объектов — ровно у тех же, что и в Shapefile, 2026-09-19; высота хранится ТОЛЬКО если тип набора объявлен трёхмерным: при wkbUnknown объекты приехали плоскими, при wkbUnknown|25D — с высотой, проба 2026-09-19; объекты возвращаются В ДРУГОМ ПОРЯДКЕ: формат строит пространственный индекс и пишет по нему. Пять точек подряд вернулись 4-0-2-3-1; с SPATIAL_INDEX=NO порядок сохранился, проба 2026-09-19; имя поля, дата-время и строка в 300 символов сохраняются, 2026-09-19

  • one dataset fits per file

based on measurement, not a manual:
имя поля, дата-время, высота, смешанная геометрия и строка в 300 символов сохраняются, проба 2026-09-19; своих типов у формата нет: то, что уедет строкой, вернётся строкой — на приёме это видно; в одном файле помещается ОДИН набор: девять наборов Roads_CAD уехали в один .geojson и прочитались обратно нулём, без единой жалобы, 2026-09-19

  • WGS84 coordinates only: it silently corrupts a projected one
  • integer becomes «string»

based on measurement, not a manual:
ЧЕРЕДОВАТЬ наборы при записи нельзя: «Interleaved feature adding to different layers is not supported». Пишем по проходу на набор, проба 2026-09-19; набор заводится ПЕРЕД своей записью, а не заранее: заведение делает набор текущим, и запись в любой другой отвергается той же жалобой. Девять наборов Roads_CAD, заведённых заранее, оставили в файле 40 объектов из 7152, 2026-09-19; координата хранится ТОЛЬКО градусами WGS84, и проекционная молча заворачивается по кругу: X = 539 640 вернулся как -20.83 (539640 по модулю 360), Y остался как был. Ни одного предупреждения, объекты на месте, форма испорчена. Замерено на Roads_CAD 2026-09-19; схема у формата своя: поле приехало под именем Name, дата-время стало строкой — KML хранит не данные, а подписи, 2026-09-19; целое поле возвращается СТРОКОЙ: пишем integer как OGR Integer64 (наше общее правило для T_INT), а схема KML (<SimpleField type="int">) на чтении отдаёт его только строкой — Disclaimer.color: 220 (int) записано, назад пришло '220' (str), 11 объектов из 11. Минимальной пробой на голом OGR (OFTInteger против OFTInteger64) подтверждено: это ограничение именно 64-битного целого у драйвера KML, не общий для форматов эффект — GML и GPKG тем же полем вернули int. Проба 2026-09-26, задача 9.26; хвостовой пробел в строковом значении не возвращается: '264 DIVER ' записано в XML целиком (видно в файле), назад читается '264 DIVER' — это чтение GDAL/LIBKML обрезает узел текста, а не наша запись. 2 объекта из 3334 на E_TRN_Roads_LABL.text (значения с пробелом перед концом строки). Проба 2026-09-26, задача 9.26

  • one dataset fits per file
  • keeps NO fields at all: the format has its own schema, only geometry and the layer name survive

based on measurement, not a manual:
ЗАВЕДЁН 2026-09-21. В одном файле помещается ОДИН набор OGR: «Unable to have more than one OGR entities layer in a DXF file» — дословный отказ драйвера на Roads_CAD (9 наборов); драйвер ПЕРЕИМЕНОВЫВАЕТ слой в `entities`, а настоящее имя берёт из поля `Layer` — поэтому имя набора пишется в это поле, и круг через наш же читатель имя возвращает: DELCO_StreetCenterlines, 29 636 объектов, набор вернулся как StreetCenterlines, типы LineString и Point совпали, 2026-09-21; высота: не замеряли; НЕ ХРАНИТ НАШИХ ПОЛЕЙ: схема у формата своя (Layer, SubClasses, PaperSpace), и всё заведённое драйвер молча отбрасывает — 14 818 подписей DELCO вернулись без текста, 2026-09-21; сверка по полю `Layer` проходит: 29 636 из 29 636, структура 0, смещение 0.0000 — после того как сверку научили брать имя набора из поля, 2026-09-21; СОЗДАНИЕ ПРОИЗВОЛЬНОГО ПОЛЯ ОТКАЗЫВАЕТ, не молчит: у драйвера фиксированная схема из 14 полей (Layer, Text, SubClasses и другие), CreateField сверх неё даёт 'DXF layer does not support arbitrary field creation' и до задачи B2 ронял ВЕСЬ файл — DELCO_StreetCenterlines.dxf → DXF отказывал целиком на первом же поле вне этого списка ('angle'), 2026-10-02; СК НЕ ХРАНИТ ВООБЩЕ: CreateLayer с заданной EPSG:3734 и чтение того же файла обратно отдают None — проверено прямым прогоном, не только по отсутствию опции, 2026-10-02

On the left, your layers as they are, with their own names. On the right, a rebuild: we work out WHAT is in the layers and assemble only what is needed, under common names. Not sure — take “as is”: nothing will be lost.

A browser notification can fail silently: permission revoked, tab closed, a strict browser setting. Email is the fallback. The address is deleted together with the job, in the same deletion as the file.

The file is not read without consent: this is checked here, on our server, not by a checkbox in the browser.

work plan — stages, queues, jobs and a diagram. Drawn from a file in the repository; there is no other source for it.