2011-09-02 69 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