アップデート:
はい、それでした!
mloskot が言ったように、テーブル全体をダンプする必要があります。SQL でフィールドを選択すると、燃料幅に関する情報が失われます。
ありがとう、それはそれを修正しました!
こんにちは、みんな、
ogr2ogrに問題があります。PostgreSQL テーブルをシェープファイルにダンプしようとしています。ogr2ogr は、integer や char などのデータ型のサイズを変更するようです。
Shapefile セットが読み込まれた DB 構造の一部を次に示します。
Table "test"
nd_1 - numeric(8,0)
nd_2 - numeric(2,0)
nd_3 - numeric(2,0)
nd_9 - character varying(60)
そしてそれは正しく見えます。
楽しみはここから始まります:
ogr2ogr air5000.shp "PG: [...]" sql 'select
CAST(nd_1 AS INTEGER),
CAST(nd_2 AS INTEGER),
CAST(nd_3 as INTEGER),
CAST(ND_9 AS CHARACTER VARYING(60))
from test' ;
それから
dbview -e test.dbf
Field Name Type Length Decimal Pos
nd 1 - N - 11 - 0
nd 2 - N - 11 - 0
nd 3 - N - 11 - 0
nd 9 - C - 80 - 0
num-length は8,2,2から11まで、charの長さは10から80までです。
幅(長さ)が指定されていない場合、これらはデフォルトであると読みました。
幅を指定するにはどうすればよいですか?
次のように、キャストの有無にかかわらず、すべてのコンボを試しました。
select
CAST(nd_1 AS NUMERIC),
CAST(nd_2 AS NUMERIC),
CAST(nd_3 as NUMERIC),
CAST(ND_9 AS CHARACTER VARYING(60))
を与えますdbview
:
Field Name Type Length Decimal Pos
nd 1 - N - 24 - 15
nd 2 - N - 24 - 15
nd 3 - N - 24 - 15
nd 9 - C - 80 - 0
キャストなし ( select * from test
) を与える
Field Name Type Length Decimal Pos
nd 1 - N - 24 - 15
nd 2 - N - 24 - 15
nd 3 - N - 24 - 15
nd 9 - C - 80 - 0
どんな場合でも、オリジナルにはほど遠い。
debugfile [--debug on]
特別な私見は何も与えません。これは、私が試した3つのogr2ogrコマンドの出力です。
PG: PQexec(DECLARE executeSQLCursor CURSOR for select CAST(nd_1 AS INTEGER), CAST(nd_2 AS INTEGER), CAST(nd_3 as INTEGER), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select CAST(nd_1 AS INTEGER), CAST(nd_2 AS INTEGER), CAST(nd_3 as INTEGER), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select CAST(nd_1 AS INTEGER), CAST(nd_2 AS INTEGER), CAST(nd_3 as INTEGER), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: 2 features read on layer 'sql_statement'.
PG: PQexec(DECLARE executeSQLCursor CURSOR for select CAST(nd_1 AS NUMERIC), CAST(nd_2 AS NUMERIC), CAST(nd_3 as NUMERIC), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select CAST(nd_1 AS NUMERIC), CAST(nd_2 AS NUMERIC), CAST(nd_3 as NUMERIC), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select CAST(nd_1 AS NUMERIC), CAST(nd_2 AS NUMERIC), CAST(nd_3 as NUMERIC), CAST(ND_9 AS CHARACTER VARYING(60)) from test)
PG: 2 features read on layer 'sql_statement'.
PG: PQexec(DECLARE executeSQLCursor CURSOR for select * from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select * from test)
PG: PQexec(DECLARE OGRPGResultLayerReader CURSOR for select * from test)
PG: 2 features read on layer 'sql_statement'.
私も試し-dsco precision=no
ましたが、どちらも役に立ちませんでした。
dbview
足を引っ張っているのかもしれませんが、Shapefile のソース .dbf のヘッダーが正しく設定されていることがわかりました。
誰でもアイデアはありますか?
EJ
UpDate: こんにちは、mloskot
ご返信と再フォーマットをありがとうございます。
私はGDAL 1.6.3を使用しています。
幅を指定してみましたが、違いはありません。
ogr2ogr test.shp "PG: [...] " -sql 'select CAST(nd_1 AS INTEGER), CAST(nd_2 AS numeric(2,0)), CAST(nd_3 as NUMERIC(2,0)) from test' ;
与えます:
Field Name Type Length Decimal Pos
nd 1 N 11 0
nd 2 N 24 15
nd 3 N 24 15
はい、次のように、キャストせずにフィールドを指定しようとしました:
ogr2ogr air5000.shp "PG: [...] "-sql 'select nd_1, nd_2, nd_3, ND_9 from test'
与える:
Field Name Type Length Decimal Pos
nd 1 N 24 15
nd 2 N 24 15
nd 3 N 24 15
nd 9 C 80 0
しようとしている
integer(field_length)
お気に入り
CAST(nd_2 AS INTEGER(2))
動作しません、エラーが発生します
ERROR 1: ERROR: current transaction is aborted, commands ignored until end of transaction block
Postgresql と PostGIS のバージョンが古くなっているのではないでしょうか? Postgres = 8.3.5、PostGIS = 1.3.3
Shapelib を確認します。今インストールしました。