PostGISのGeometry型を持つテーブルにCOPYする方法

COPYコマンドでGeometry型データを入れたい場合はHEXにしてCOPYを実行すればOK!
psql で geometry型を select 文で表示するとHEXで表示されることが確認できる。

以下ではHEXデータの取得方法がWEB上で記載が見つからなかったため、以下に記載しておく。

0. select文で表示した例

以下のようなHEXでGEOMETRY型は表示される。1と東京○というデータ列は関係は無い。

# select * from geoaddr
id | addr | point | liner | shape
  1 | 東京○ | 01010000A0E61000002D3E05C0AC7DE7C0000000405F3301C10000000000000000 | 0102000020E610000002000000000000000000F03F000000000000004000000000000008400000000000001040 | 0103000020E6100000020000000400000000000000005807410000000068AD0D4100000000005807410000000078AD0D4100000000105807410000000068AD0D4100000000005807410000000068AD0D410400000000000000005807410000000068AD0D4100000000005807410000000078AD0D4100000000105807410000000068AD0D4100000000005807410000000068AD0D41
(1 row)

1. Geometry型のHEXデータを取得

postgis.jarにクラスパスを通してあること。

Geometry geom = (Geometry)new Point(data.getLon(),data.getLat(),0);
geom.setSrid(4326);
BinaryWriter writer = new BinaryWriter();
String str = writer.writeHexed(geom ); // COPYコマンドに使える!!
System.out.println("str = " + str);

出力

str = 01010000A0E61000002D3E05C0AC7DE7C0000000405F3301C10000000000000000