"… если кто-то знал формат геометрии [тип данных]…"
Здесь указан двоичный формат сериализации для пространственных типов GEOMETRY
и GEOGRAPHY
SQL Server:
"Указывает двоичный формат структур GEOGRAPHY, GEOMETRY, HIERARCHYID и CLR пользовательского типа (UDT), которые управляются SQL Server."
Эта спецификация хорошо написана, и двоичный формат прост для понимания, поэтому не должно возникнуть особых проблем с реализацией базового синтаксического анализатора для двоичного формата.
"... или любые библиотеки, способные анализировать его в набор [географических координат] в Python ..."
Использование Microsoft.SqlServer.Types
через .NET-взаимодействие для десериализации следующих типов:
Если вы не хотите реализовывать свой собственный десериализатор (который должен быть довольно простым), но вы можете найти способ взаимодействия со сборкой .NET из Python & mdash; возможно через pythonnet ? & mdash ;, тогда могут быть интересны следующие советы:
Два типа T-SQL GEOMETRY
и GEOGRAPHY
реализованы как комбинация сборки .NET (Microsoft.SqlServer.Types
), которая выполняет де-сериализацию из / в двоичный формат, только что упомянутый выше, и неуправляемая DLL (SqlServerSpatial….dll
), которая содержит почти все остальное (то есть процедуры для пространственных операций).
Если вас интересует только десериализация пространственных данных SQL Server, и вы стараетесь не вызывать какие-либо пространственные функции на SqlGeometry
или SqlGeography
, то вы можете использовать Microsoft.SqlServer.Types
для -сериализуйте пространственные двоичные данные для вас, затем , проверяя их с помощью реализации IGeometrySink110
, которую вы должны предоставить, например, SqlGeometry.Populate
метод .
Microsoft.SqlServer.Types
и SqlServerSpatial….dll
доступны либо в виде .NET для всего проекта NuGet , либо в виде общесистемного установочного пакета MSI (SQLSysClrTypes.msi
) . AFAIK DLL также автоматически устанавливаются вместе с SQL Server.
Хорошо известный текст (WKT) и Хорошо известный двоичный файл (WKB):
Еще один вариант - разрешить SQL Server преобразовывать пространственные значения в общеизвестный текст (WKT) или Well-Known Binary
(WKB), используя SELECT geometryColumn.STAsText()
или SELECT geometryColumn.STAsBinary()
, а затем искать библиотеку Python, которая может анализировать эти стандартные форматы обмена.
(Одно слово предостережения: если вы идете по этому маршруту, будьте осторожны, если ваши данные содержат дуги окружности. Существуют разные версии формата данных WKT и WKB. Сначала они были указаны как часть спецификации доступа к простым функциям Open Geospatial Consortium, эта версия не понимает дуг окружности. Поддержка сегментов круговой кривой была добавлена в SQL / MM Часть 3: Пространственный стандарт, который реализует SQL Server.)