LoginSignup
0
0

More than 5 years have passed since last update.

iciqlでPostGISのgeometry型を扱う

Posted at

はじめに

iciqlでPostGISのgeometry型を扱う方法についての覚え書きです。

検証環境

以下のバージョンで検証しています。
・JDK ... 8
・PostgreSQL ... 9.6
・PostGIS ... 2.3.1
・iciql ... 2.1.1
・その他依存ライブラリ
 postgresql-9.4.1211.jar
 postgis-jdbc-2.2.0.jar

DataTypeAdapterの実装

DataTypeAdapterを使います。
http://iciql.com/dta/

package sample.iciql;

import org.postgis.PGgeometry;

import com.iciql.Iciql.DataTypeAdapter;
import com.iciql.Iciql.Mode;

public class PgGeometryAdapter implements DataTypeAdapter<PGgeometry> {
    Mode mode;

    /* (non-Javadoc)
     * @see com.iciql.Iciql.DataTypeAdapter#getDataType()
     */
    @Override
    public String getDataType() {
        return "geometry";
    }

    /* (non-Javadoc)
     * @see com.iciql.Iciql.DataTypeAdapter#getJavaType()
     */
    @Override
    public Class<PGgeometry> getJavaType() {
        return PGgeometry.class;
    }

    /* (non-Javadoc)
     * @see com.iciql.Iciql.DataTypeAdapter#setMode(com.iciql.Iciql.Mode)
     */
    @Override
    public void setMode(Mode mode) {
        this.mode = mode;
    }

    /* (non-Javadoc)
     * @see com.iciql.Iciql.DataTypeAdapter#serialize(java.lang.Object)
     */
    @Override
    public Object serialize(PGgeometry value) {
        return value;
    }

    /* (non-Javadoc)
     * @see com.iciql.Iciql.DataTypeAdapter#deserialize(java.lang.Object)
     */
    @Override
    public PGgeometry deserialize(Object value) {
        return (PGgeometry)value;
    }



}

Modelクラスの実装

package sample.iciql;

import java.io.Serializable;
import org.postgis.PGgeometry;
import com.iciql.Iciql.IQColumn;
import com.iciql.Iciql.IQSchema;
import com.iciql.Iciql.IQTable;
import com.iciql.Iciql.TypeAdapter;

@IQSchema("sample")
@IQTable(
        name="sample_table", 
        primaryKey={ "id" })
public class SampleModel implements Serializable {
    private static final long serialVersionUID = 1L;

    @IQColumn(nullable=false)
    public Integer id;

    @IQColumn(nullable=true)
    @TypeAdapter(PgGeometryAdapter.class)
    public PGgeometry geometry;

    public SampleModel() {
    }
}

レコード挿入のサンプル

package sample.iciql;

import org.postgis.PGgeometry;
import com.iciql.Db;

public class IciqlSample {

    public static void main(String[] args) throws Exception {
        String url = "jdbc:postgresql://localhost:5432/sample";
        String user = "sample";
        String password = "xxxx";
        try (Db db = Db.open(url, user, password)) {
            SampleModel rec = new SampleModel();
            rec.id = 1;
            rec.geometry = new PGgeometry("POINT(10 11");
            db.insert(rec);
        }
    }

}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0