// License: GPL. See LICENSE file for details. Copyright 2012 by Josh Doe and others.
package org.openstreetmap.josm.plugins.conflation;
import com.vividsolutions.jump.feature.AbstractBasicFeature;
import com.vividsolutions.jump.feature.AttributeType;
import com.vividsolutions.jump.feature.FeatureSchema;
import java.util.Map;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.plugins.jts.JTSConverter;
public class OsmFeature extends AbstractBasicFeature {
private Object[] attributes;
private OsmPrimitive primitive;
private JTSConverter converter;
/**
* Create a copy of the OSM geometry
* TODO: update from underlying primitive
* @param prim
*/
public OsmFeature(OsmPrimitive prim, JTSConverter jtsConverter) {
super(new FeatureSchema());
primitive = prim;
Map<String, String> keys = prim.getKeys();
attributes = new Object[keys.size() + 1];
getSchema().addAttribute("GEOMETRY", AttributeType.GEOMETRY);
for (String key : keys.keySet()) {
getSchema().addAttribute(key, AttributeType.STRING);
setAttribute(key, keys.get(key));
}
if (jtsConverter != null)
converter = jtsConverter;
else
converter = new JTSConverter(true);
setGeometry(converter.convert(prim));
}
@Override
public void setAttributes(Object[] attributes) {
this.attributes = attributes;
}
@Override
public void setAttribute(int attributeIndex, Object newAttribute) {
attributes[attributeIndex] = newAttribute;
}
@Override
public Object getAttribute(int i) {
return attributes[i];
}
@Override
public Object[] getAttributes() {
return attributes;
}
public OsmPrimitive getPrimitive() {
return primitive;
}
@Override
public int getID() {
// FIXME: should work most of the time, GeoAPI more robust, need to
// consider the dataset (e.g. two non-uploaded layers can have different
// objects with the same id
return (int) primitive.getId();
}
}