// License: WTFPL. For details, see LICENSE file. package iodb; import java.util.Map; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; /** * A calibration geometry data type. It was called an object long ago, * when it contained an information on an OSM object. I decided not to rename * this class. * * @author Zverik * @license WTFPL */ public class CalibrationObject extends ImageryOffsetBase { private LatLon[] geometry; /** * Initialize a calibration object from the array of nodes. */ public CalibrationObject(LatLon[] geometry) { this.geometry = geometry; } /** * Initialize a calibration object from OSM primitive. */ public CalibrationObject(OsmPrimitive p) { if (p instanceof Node) geometry = new LatLon[] {((Node) p).getCoor()}; else if (p instanceof Way) { geometry = new LatLon[((Way) p).getNodesCount()]; for (int i = 0; i < geometry.length; i++) { geometry[i] = ((Way) p).getNode(i).getCoor(); } } else throw new IllegalArgumentException("Calibration Object can be created either from node or a way"); } /** * Get an array of points for this geometry. */ public LatLon[] getGeometry() { return geometry; } @Override public void putServerParams(Map<String, String> map) { super.putServerParams(map); StringBuilder sb = new StringBuilder(); for (int i = 0; i < geometry.length; i++) { if (i > 0) sb.append(','); sb.append(geometry[i].lon()).append(' ').append(geometry[i].lat()); } map.put("geometry", sb.toString()); } @Override public String toString() { return "CalibrationObject{" + geometry.length + "nodes; position=" + position + ", date=" + date + ", author=" + author + ", description=" + description + ", abandonDate=" + abandonDate + '}'; } }