Changeset 15777 in josm


Ignore:
Timestamp:
2020-01-26T19:45:25+01:00 (2 months ago)
Author:
simon04
Message:

fix #13813 - Advanced object info: use consistent coordinates/bbox format

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java

    r15716 r15777  
    55import static org.openstreetmap.josm.tools.I18n.trn;
    66
     7import java.util.Arrays;
    78import java.util.List;
     9import java.util.stream.Collectors;
     10import java.util.stream.Stream;
    811
    912import org.openstreetmap.josm.data.conflict.Conflict;
    10 import org.openstreetmap.josm.data.coor.EastNorth;
    1113import org.openstreetmap.josm.data.coor.ILatLon;
     14import org.openstreetmap.josm.data.coor.LatLon;
     15import org.openstreetmap.josm.data.coor.conversion.AbstractCoordinateFormat;
    1216import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
     17import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
    1318import org.openstreetmap.josm.data.osm.BBox;
    1419import org.openstreetmap.josm.data.osm.DataSet;
     
    168173        } else if (o instanceof IWay) {
    169174            addBbox(o);
    170             add(tr("Centroid: "),
    171                     toStringCSV(", ", ProjectionRegistry.getProjection().eastNorth2latlon(
    172                             Geometry.getCentroid(((IWay<?>) o).getNodes()))));
     175            add(tr("Centroid: "), toStringCSV(false,
     176                    ProjectionRegistry.getProjection().eastNorth2latlon(Geometry.getCentroid(((IWay<?>) o).getNodes()))));
    173177            addWayNodes((IWay<?>) o);
    174178        } else if (o instanceof IRelation) {
     
    200204        BBox bbox = o.getBBox();
    201205        if (bbox != null) {
    202             add(tr("Bounding box: "), bbox.toStringCSV(", "));
    203             EastNorth bottomRigth = bbox.getBottomRight().getEastNorth(ProjectionRegistry.getProjection());
    204             EastNorth topLeft = bbox.getTopLeft().getEastNorth(ProjectionRegistry.getProjection());
    205             add(tr("Bounding box (projected): "),
    206                     Double.toString(topLeft.east()), ", ",
    207                     Double.toString(bottomRigth.north()), ", ",
    208                     Double.toString(bottomRigth.east()), ", ",
    209                     Double.toString(topLeft.north()));
    210             add(tr("Center of bounding box: "), toStringCSV(", ", bbox.getCenter()));
     206            final LatLon bottomRight = bbox.getBottomRight();
     207            final LatLon topLeft = bbox.getTopLeft();
     208            add(tr("Bounding box: "), toStringCSV(false, bottomRight, topLeft));
     209            add(tr("Bounding box (projected): "), toStringCSV(true, bottomRight, topLeft));
     210            add(tr("Center of bounding box: "), toStringCSV(false, bbox.getCenter()));
    211211        }
    212212    }
     
    214214    void addCoordinates(INode n) {
    215215        if (n.isLatLonKnown()) {
    216             add(tr("Coordinates:"), " ",
    217                     Double.toString(n.lat()), ", ",
    218                     Double.toString(n.lon()));
    219             EastNorth en = n.getEastNorth();
    220             add(tr("Coordinates (projected): "),
    221                     Double.toString(en.east()), ", ",
    222                     Double.toString(en.north()));
     216            add(tr("Coordinates:"), " ", toStringCSV(false, n));
     217            add(tr("Coordinates (projected): "), toStringCSV(true, n));
    223218            Pair<Integer, Hemisphere> utmZone = TransverseMercator.locateUtmZone(n.getCoor());
    224219            String utmLabel = tr("UTM Zone");
     
    248243
    249244    /**
    250      * Returns lat/lon coordinate in human-readable format separated by {@code separator}.
    251      * @param separator values separator
    252      * @param ll the lat/lon
    253      * @return String in the format {@code "1.23456[separator]2.34567"}
     245     * Returns the coordinates in human-readable format.
     246     * @param projected whether to use projected coordinates
     247     * @param coordinates the coordinates to format
     248     * @return String in the format {@code "1.23456, 2.34567"}
    254249     */
    255     private static String toStringCSV(String separator, ILatLon ll) {
    256         return String.join(separator,
    257                 DecimalDegreesCoordinateFormat.INSTANCE.latToString(ll),
    258                 DecimalDegreesCoordinateFormat.INSTANCE.lonToString(ll)
    259         );
     250    private static String toStringCSV(boolean projected, ILatLon... coordinates) {
     251        final AbstractCoordinateFormat format = projected
     252                ? ProjectedCoordinateFormat.INSTANCE
     253                : DecimalDegreesCoordinateFormat.INSTANCE;
     254        return Arrays.stream(coordinates)
     255                .flatMap(ll -> Stream.of(format.latToString(ll), format.lonToString(ll)))
     256                .collect(Collectors.joining(", "));
    260257    }
    261258
  • trunk/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java

    r14138 r15777  
    1515import org.openstreetmap.josm.data.osm.Node;
    1616import org.openstreetmap.josm.data.osm.User;
     17import org.openstreetmap.josm.data.osm.Way;
    1718import org.openstreetmap.josm.gui.MainApplication;
    1819import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    4849        DataSet ds = new DataSet();
    4950        assertEquals("", InspectPrimitiveDialog.buildDataText(ds, new ArrayList<>(ds.allPrimitives())));
    50         Node n = new Node(LatLon.ZERO);
    51         n.setOsmId(1, 1);
    52         ds.addPrimitive(n);
     51        final Way way = new Way();
     52        way.addNode(new Node(new LatLon(47.2687921, 11.390525)));
     53        way.addNode(new Node(new LatLon(47.2689194, 11.3907301)));
     54        way.addNode(new Node(new LatLon(47.2684158, 11.3914047)));
     55        way.addNode(new Node(new LatLon(47.2682898, 11.3912034)));
     56        way.setOsmId(1, 1);
     57        int id = 2;
     58        for (Node node : way.getNodes()) {
     59            node.setOsmId(id, id);
     60            id++;
     61        }
     62        way.getNodes().forEach(ds::addPrimitive);
     63        ds.addPrimitive(way);
     64        way.addNode(way.firstNode()); // close way
    5365        assertEquals(
    54                 "Node: 1\n" +
     66            "Way: 1\n" +
    5567                "  Data Set: "+Integer.toHexString(ds.hashCode())+"\n" +
    5668                "  Edited at: <new object>\n" +
     
    5870                "  Version: 1\n" +
    5971                "  In changeset: 0\n" +
    60                 "  Coordinates: 0.0, 0.0\n" +
    61                 "  Coordinates (projected): 0.0, -7.081154551613622E-10\n" +
    62                 "  UTM Zone: 31S\n" +
    63                 "\n", InspectPrimitiveDialog.buildDataText(ds, new ArrayList<>(ds.allPrimitives())));
     72                "  Bounding box: 47.2682898, 11.3914047, 47.2689194, 11.390525\n" +
     73                "  Bounding box (projected): 5985976.274977, 1268085.3706241, 5986079.5621105, 1267987.4428681\n" +
     74                "  Center of bounding box: 47.2686046, 11.3909648\n" +
     75                "  Centroid: 47.2686049, 11.3909649\n" +
     76                "  5 Nodes: \n" +
     77                "    2\n" +
     78                "    3\n" +
     79                "    4\n" +
     80                "    5\n" +
     81                "    2\n" +
     82                "\n", InspectPrimitiveDialog.buildDataText(ds, new ArrayList<>(ds.getWays())));
    6483    }
    6584
Note: See TracChangeset for help on using the changeset viewer.