2011-09-02 22 views
3

我试图在命令窗口中运行以下代码。代码执行,但在.SHP文件中没有赋值。该表具有GeographyCollections和Polygons存储在地理类型的字段中。我已经在sql语句中尝试了很多变体 - 地理类型 - 二进制,文本等,但没有运气。输出.DBF文件具有数据,因此与数据库的连接工作,但形状.Shp文件和.shx文件没有数据,大小分别为17K和11 K.使用Ogr2ogr从SQL Server创建形状文件

有什么建议吗?

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/[email protected] 

回答

6

ESRI形状文件只能包含一个单一类型的几何的 - 点,线段形式,多边形等

你的描述建议你查询返回多个类型的几何体,所以限制第一(使用STGeometryType() == 'POLYGON' , 例如)。

其次,您目前使用STAsText()函数将空间字段作为文本字符串返回,但您不告诉OGR它是空间字段,因此可能只是将WKT视为常规文本列并添加它作为dbf文件的一个属性。

要告诉O​​GR哪一列包含您的空间信息,您可以将“Tables”参数添加到连接字符串中。但是,如果您使用的是SQL Server 2008,没有理由从WKT/WKB进行所有投射 - OGR2OGR将加载SQL Server的本机二进制格式。

你实际使用SQL Server 2008或Denali吗?由于序列化格式已更改,并且OGR2OGR无法读取新格式。因此,在这种情况下,首先转换为WKB更安全(但速度更慢)。

以下工作对我来说,倾倒从SQL Server多边形的表Shape文件:

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

尝试通过以下命令

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