diff --git a/lib/mapfish-geo-lib-1.2-SNAPSHOT.jar b/lib/mapfish-geo-lib-1.2-SNAPSHOT.jar
deleted file mode 100644
index 11de66c..0000000
Binary files a/lib/mapfish-geo-lib-1.2-SNAPSHOT.jar and /dev/null differ
diff --git a/lib/mapfish-geo-lib-1.3-SNAPSHOT.jar b/lib/mapfish-geo-lib-1.3-SNAPSHOT.jar
new file mode 100644
index 0000000..1afc4e4
Binary files /dev/null and b/lib/mapfish-geo-lib-1.3-SNAPSHOT.jar differ
diff --git a/pom.xml b/pom.xml
index a7fcef6..a1ba1b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,9 +62,9 @@
org.mapfish
geo
- 1.2-SNAPSHOT
+ 1.3-SNAPSHOT
system
- ${project.basedir}/lib/mapfish-geo-lib-1.2-SNAPSHOT.jar
+ ${project.basedir}/lib/mapfish-geo-lib-1.3-SNAPSHOT.jar
diff --git a/src/main/java/com/infochimps/hadoop/pig/geo/GeoFeature.java b/src/main/java/com/infochimps/hadoop/pig/geo/GeoFeature.java
index 04b522a..b89d5b1 100644
--- a/src/main/java/com/infochimps/hadoop/pig/geo/GeoFeature.java
+++ b/src/main/java/com/infochimps/hadoop/pig/geo/GeoFeature.java
@@ -35,6 +35,33 @@ public String serialize() {
return stringer.toString();
}
+ // If this looks disgusting to you, thats because it is.
+ public String toIcssThing() {
+ JSONStringer stringer = new JSONStringer();
+ MfGeoJSONWriter builder = new MfGeoJSONWriter(stringer);
+ try {
+ stringer.object();
+ toJSON(stringer);
+ if (getFeatureId() != null) {
+ // Add md5id
+ stringer.key("md5id").value(getFeatureId());
+ }
+
+ // add weird 'geo_geometry_type' key
+ stringer.key("geo_geometry_type");
+ stringer.value(geometry.getInternalGeometry().getGeometryType());
+
+ // Add coordinates
+ builder.encodeGeometryCoordinates(geometry.getInternalGeometry());
+
+ stringer.endObject();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ return stringer.toString();
+ }
+
public String getFeatureId() {
return id;
}
diff --git a/src/main/java/com/infochimps/hadoop/pig/geo/GeoJSONToThing.java b/src/main/java/com/infochimps/hadoop/pig/geo/GeoJSONToThing.java
new file mode 100644
index 0000000..5cdfc50
--- /dev/null
+++ b/src/main/java/com/infochimps/hadoop/pig/geo/GeoJSONToThing.java
@@ -0,0 +1,56 @@
+package com.infochimps.hadoop.pig.geo;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import org.apache.pig.EvalFunc;
+import org.apache.pig.data.Tuple;
+import org.apache.pig.data.DataBag;
+import org.apache.pig.data.TupleFactory;
+
+import org.mapfish.geo.MfGeo;
+import org.mapfish.geo.MfGeoFactory;
+import org.mapfish.geo.MfGeoJSONReader;
+import org.mapfish.geo.MfGeometry;
+import org.mapfish.geo.MfFeature;
+
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ Given a geoJSON feature, mangles it into an ICSS 'Thing'.
+ */
+public class GeoJSONToThing extends EvalFunc {
+ private final MfGeoFactory mfFactory = new MfGeoFactory() {
+ public MfFeature createFeature(String id, MfGeometry geometry, JSONObject properties) {
+ return new GeoFeature(id, geometry, properties);
+ }
+ };
+
+ private final MfGeoJSONReader reader = new MfGeoJSONReader(mfFactory);
+
+ private static final String PERIOD = "\\.";
+ private static final String GEOJSON_ID = "id";
+ private static final String GEOJSON_TYPE = "type";
+ private static final String GEOJSON_FEATURE = "Feature";
+ private static final String GEOJSON_GEOM = "geometry";
+ private static final String GEOJSON_PROP = "properties";
+
+ public String exec(Tuple input) throws IOException {
+ if (input == null || input.size() < 1 || input.isNull(0))
+ return null;
+
+ String json = input.get(0).toString();
+ String result = null;
+ try {
+ GeoFeature feature = (GeoFeature)reader.decode(json);
+ result = feature.toIcssThing();
+ } catch (JSONException e) {}
+ return result;
+ }
+}