4

我正在尝试在命令窗口中运行以下代码。代码执行,但它在 .SHP 文件中没有给我任何值。该表将 GeographyCollections 和 Polygons 存储在 Geography 类型的字段中。我在 sql 语句中尝试了 Geography 类型的许多变体——二进制、文本等,但没有运气。输出的 .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 
4

2 回答 2

7

ESRI Shapefile 只能包含单一类型的几何图形- 点、线串、多边形等。

您的描述表明您的查询返回多种类型的几何,因此首先限制它(STGeometryType() == 'POLYGON'例如使用 )。

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

要告诉 OGR 哪一列包含您的空间信息,您可以将“表格”参数添加到连接字符串中。但是,如果您使用的是 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)"
于 2011-09-11T10:18:02.670 回答
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
于 2016-02-17T10:56:37.510 回答