protected Object convertGeography(Column column, Field fieldDefn, Object data) { final PostgisGeometry empty = PostgisGeometry.createEmpty(); return convertValue(column, fieldDefn, data, io.debezium.data.geometry.Geography.createValue(fieldDefn.schema(), empty.getWkb(), empty.getSrid()), (r) -> { final Schema schema = fieldDefn.schema(); try { if (data instanceof byte[]) { PostgisGeometry geom = PostgisGeometry.fromHexEwkb(new String((byte[])data, "ASCII")); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } else if (data instanceof PGobject) { PGobject pgo = (PGobject)data; PostgisGeometry geom = PostgisGeometry.fromHexEwkb(pgo.getValue()); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } else if (data instanceof String) { PostgisGeometry geom = PostgisGeometry.fromHexEwkb((String)data); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } } catch (IllegalArgumentException | UnsupportedEncodingException e) { logger.warn("Error converting to a Geography type", column); } }); }
protected List<SchemaAndValueField> schemaAndValuesForPostgisTypes() { Schema geomSchema = Geometry.builder().optional().build(); Schema geogSchema = Geography.builder().optional().build(); return Arrays.asList( // geometries are encoded here as HexEWKB new SchemaAndValueField("p", geomSchema, // 'SRID=3187;POINT(174.9479 -36.7208)'::postgis.geometry Geometry.createValue(geomSchema, DatatypeConverter.parseHexBinary("0101000020730C00001C7C613255DE6540787AA52C435C42C0"), 3187)), new SchemaAndValueField("ml", geogSchema, // 'MULTILINESTRING((169.1321 -44.7032, 167.8974 -44.6414))'::postgis.geography Geography.createValue(geogSchema, DatatypeConverter.parseHexBinary("0105000020E610000001000000010200000002000000A779C7293A2465400B462575025A46C0C66D3480B7FC6440C3D32B65195246C0"), 4326)) ); }
protected Object convertGeography(Column column, Field fieldDefn, Object data) { final PostgisGeometry empty = PostgisGeometry.createEmpty(); return convertValue(column, fieldDefn, data, io.debezium.data.geometry.Geography.createValue(fieldDefn.schema(), empty.getWkb(), empty.getSrid()), (r) -> { final Schema schema = fieldDefn.schema(); try { if (data instanceof byte[]) { PostgisGeometry geom = PostgisGeometry.fromHexEwkb(new String((byte[])data, "ASCII")); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } else if (data instanceof PGobject) { PGobject pgo = (PGobject)data; PostgisGeometry geom = PostgisGeometry.fromHexEwkb(pgo.getValue()); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } else if (data instanceof String) { PostgisGeometry geom = PostgisGeometry.fromHexEwkb((String)data); r.deliver(io.debezium.data.geometry.Geography.createValue(schema, geom.getWkb(), geom.getSrid())); } } catch (IllegalArgumentException | UnsupportedEncodingException e) { logger.warn("Error converting to a Geography type", column); } }); }
protected List<SchemaAndValueField> schemaAndValuesForPostgisTypes() { Schema geomSchema = Geometry.builder().optional().build(); Schema geogSchema = Geography.builder().optional().build(); return Arrays.asList( // geometries are encoded here as HexEWKB new SchemaAndValueField("p", geomSchema, // 'SRID=3187;POINT(174.9479 -36.7208)'::postgis.geometry Geometry.createValue(geomSchema, DatatypeConverter.parseHexBinary("0101000020730C00001C7C613255DE6540787AA52C435C42C0"), 3187)), new SchemaAndValueField("ml", geogSchema, // 'MULTILINESTRING((169.1321 -44.7032, 167.8974 -44.6414))'::postgis.geography Geography.createValue(geogSchema, DatatypeConverter.parseHexBinary("0105000020E610000001000000010200000002000000A779C7293A2465400B462575025A46C0C66D3480B7FC6440C3D32B65195246C0"), 4326)) ); }