Как преобразовать 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();