Tor*_*rli 4 spatial shapefile sql-server-2008 ogr
我试图在命令窗口中运行以下代码.代码执行,但它没有给我.SHP文件中的值.该表具有GeographyCollections和多边形,存储在Geography类型的Field中.我在sql语句中尝试了许多Geography类型的变体 - Binary,Text等,但没有运气.输出.DBF文件包含数据,因此与数据库的连接有效,但形状.Shp文件和.shx文件没有数据,大小分别为17K和11K.
有什么建议?
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
Run Code Online (Sandbox Code Playgroud)
ESRI Shapefile只能包含一种类型的几何 - Point,LineString,Polygon等.
您的描述表明您的查询返回多种类型的几何,因此首先限制它(STGeometryType() == 'POLYGON'例如,使用).
其次,您当前正在使用STAsText()将空间字段作为文本字符串返回,但您并没有告诉OGR它是一个空间字段,所以它可能只是将WKT视为常规文本列并将其作为属性添加到dbf文件.
要告诉OGR哪个列包含您的空间信息,您可以将"Tables"参数添加到连接字符串.但是,如果您正在使用SQL Server 2008,则没有理由从WKT/WKB进行所有转换 - 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)"
Run Code Online (Sandbox Code Playgroud)