Шейп-файлы ESRI могут содержать только геометрию одного типа - Point, LineString, Polygon и т. Д.
Ваше описание предполагает, что ваш запрос возвращает несколько типов геометрии, поэтому сначала ограничьте его (например, STGeometryType() == 'POLYGON'
).
Во-вторых, вы в настоящее время возвращаете пространственное поле в виде текстовой строки, используя STAsText (), но вы не говорите OGR, что это пространственное поле, поэтому он, вероятно, просто обрабатывает WKT как обычный текстовый столбец и добавляет его как атрибут файла dbf.
Чтобы указать OGR, в каком столбце содержится ваша пространственная информация, вы можете добавить параметр «Таблицы» в строку подключения. Тем не менее, нет никакой причины делать все приведения из WKT / WKB, если вы используете SQL Server 2008 - OGR2OGR будет нормально загружать собственный двоичный формат SQL Server.
Вы на самом деле используете SQL Server 2008 или Denali? Поскольку формат сериализации изменился, и OGR2OGR не может прочитать новый формат. Поэтому в этом случае безопаснее (но медленнее) сначала конвертировать в WKB.
Для меня дамп таблицы полигонов из SQL Server в Shapefile работает следующим образом:
ogr2ogr -f "ESRI Shapefile" -overwrite c:\temp -nln Zip_States -sql "SELECT ID, geom26986.STAsBinary() FROM [Spatial].[dbo].[OUTLINE25K_POLY]" "MSSQL:server=.\DENALICTP3;database=Spatial;trusted_connection=yes;Tables=dbo.OUTLINE25K_POLY(geom26986)"