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; + } +}