Создание файлов формы из SQL Server с помощью Ogr2ogr - PullRequest
4 голосов
/ 02 сентября 2011

Я пытаюсь запустить следующий код в командном окне.Код выполняется, но он не дает никаких значений в файлах .SHP.В таблице есть GeographyCollections и Polygons, хранящиеся в поле типа Geography.Я пробовал много вариантов для типа Geography в SQL-выражении - Binary, Text и т. Д., Но не повезло.Выходной файл .DBF содержит данные, поэтому подключение к базе данных работает, но данные в файлах .Shp и .shx формы не имеют данных и имеют размер 17 К и 11 К соответственно.

Есть предложения?

ogr2ogr -f "ESRI Shapefile" -overwrite c:\temp -nln Zip_States -sql "SELECT [ID2],[STATEFP10],[ZCTA5CE10],GEOMETRY::STGeomFromWKB([Geography].STAsBinary(),4326).STAsText() AS [Geography] FROM [GeoSpatial].[dbo].[us_State_Illinois_2010]" ODBC:dbo/GeoSpatial@PPDULCL708504 

Ответы [ 2 ]

7 голосов
/ 11 сентября 2011

Шейп-файлы 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)"
0 голосов
/ 17 февраля 2016

Попробуйте следующую команду

ogr2ogr shapeFileName.shp -overwrite -sql "select top 10 * from schema.table" "MSSQL:Server=serverIP;Database=dbname;Uid=userid;trusted_connection=no;Pwd=password" -s_srs EPSG:4326 -t_srs EPSG:4326
...