4

コマンド ウィンドウで次のコードを実行しようとしています。コードは実行されますが、.SHP ファイルに値がありません。テーブルには、タイプ Geography の Field に格納された GeographyCollections と Polygons があります。バイナリ、テキストなど、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シェープファイルには、Point、LineString、Polygonなどの単一タイプのジオメトリのみを含めることができます。

あなたの説明は、クエリが複数のタイプのジオメトリを返すことを示唆しているので、最初にそれを制限します(STGeometryType() == 'POLYGON'たとえば、を使用して)。

次に、現在STAsText()を使用して空間フィールドをテキスト文字列として返していますが、それが空間フィールドであることをOGRに通知していないため、おそらくWKTを通常のテキスト列として扱い、属性として追加しているだけです。 dbfファイル。

どの列に空間情報が含まれているかをOGRに伝えるには、接続文字列に「Tables」パラメータを追加します。ただし、SQL Server 2008を使用している場合は、WKT/WKBからすべてのキャストを行う理由はありません。OGR2OGRはSQLServerのネイティブバイナリ形式を正常にロードします。

実際にSQLServer2008を使用していますか、それともデナリを使用していますか?シリアル化形式が変更され、OGR2OGRが新しい形式を読み取ることができないため。したがって、その場合、最初にWKBに変換する方が安全です(ただし低速です)。

以下は、SQLServerからシェープファイルにポリゴンのテーブルをダンプするために機能します。

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 に答える