package io.github.ryanfb.georefine; import java.util.Properties; import org.json.JSONException; import org.json.JSONWriter; import com.google.refine.expr.EvalError; import com.google.refine.grel.ControlFunctionRegistry; import com.google.refine.grel.Function; import org.geotools.geometry.GeometryBuilder; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.geometry.primitive.PrimitiveFactory; import org.geotools.geojson.geom.GeometryJSON; import java.io.Reader; import java.io.StringReader; import org.geotools.geometry.jts.JTSFactoryFinder; import com.vividsolutions.jts.io.WKTReader; import com.vividsolutions.jts.geom.GeometryFactory; public class ParseWKT implements Function { public Object call(Properties bindings, Object[] args) { if(args.length==1){ GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); WKTReader reader = new WKTReader(geometryFactory); try { return reader.read(args[0].toString()); } catch (com.vividsolutions.jts.io.ParseException e) { return new EvalError(ControlFunctionRegistry.getFunctionName(this) + ": " + e.getMessage()); } } return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects 1 argument"); } public void write(JSONWriter writer, Properties options) throws JSONException { writer.object(); writer.key("description"); writer.value("parses WKT geometry string"); writer.key("params"); writer.value("WKT string"); writer.key("returns"); writer.value("geometry object"); writer.endObject(); } }