Как преобразовать BLOB-данные, хранящиеся в базе данных SQLite, в SharpMap.Geometries.Geometry

У меня есть данные геометрии, хранящиеся в базе данных SQLite, и тип данных столбца BLOB.

Я использовал метод ниже, чтобы преобразовать данные BLOB в четкую геометрию карты

SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse(<массив байтов>);

Но выдает исключение "Порядок байтов не распознан"

Но если я использую базу данных sql server management stud io stud io и сохраняю данные геометрии в таблице, используя тип данных Image, то я получаю геометрию без каких-либо ошибок.

Единственное отличие состоит в типе данных, в SQLite я использовал тип данных "BLOB", а на сервере SQL я использовал тип данных "Изображение".

Я также заметил еще одно различие в размере байтового массива: если я использую базу данных SQLite, то получаю размер байтового массива как "3812", а если я использую базу данных сервера sql, то получаю размер байтового массива как "1902".

Кто-нибудь знает решение?

Я работаю над данными ниже:

3 ответа

Решение

Вопрос решен.

Что происходит, когда я сохраняю данные геометрии сервера SQL в файле CSV, он хранится в шестнадцатеричном формате. И когда я импортирую эти данные в SQLite, он сохраняет геометрию в шестнадцатеричном формате, но не в формате BLOB.

Поэтому я ищу что-то вроде прямого преобразования данных геометрии сервера SQL в BLOB-данные SQLite.

Так что я нашел эту ссылку: https://www.codeproject.com/Articles/26932/Convert-SQL-Server-DB-to-SQLite-DB

Он напрямую преобразует таблицу сервера SQL в таблицу SQLite, так что данные геометрии на сервере SQL автоматически преобразуются в BLOB, и при преобразовании этих данных BLOb в геометрию SharpMap проблем не возникает.

Вы сохранили шестнадцатеричное представление значения в виде текста.

CSV-файлы не могут содержать BLOB-объектов; Вы должны экспортировать данные в другом формате. Попробуйте использовать SQL, а затем преобразовать литерал BLOB-объекта из формата SQL Server, а именно:

INSERT INTO ... VALUES (... 0x0123...)

в формат SQLite, то есть:

INSERT INTO ... VALUES (... x'0123...')

Если CSV является вашим форматом обмена, вы должны преобразовать свою геометрию в текстовое представление, используя, например, .STAsText() функция по геометрии.
Когда вы импортируете текст CSV (путем написания собственного кода) в базу данных SQLite, вы можете использовать синтаксический анализатор Well-Known-Text, преобразующий этот текст в геометрию и оттуда в двоичный BLOB-файл, который может быть обработан с помощью SharpMap, Это можно сделать с помощью (например) считывателя Wkt NetTopologySuite:

var rdr = new NetTopologySuite.IO.WktReader();
var geom = rdr.Read(csvValue);
var blob = geom.AsBinary();
Другие вопросы по тегам