Ignore:
Timestamp:
2014-09-10T02:29:55+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #10489 - Add additional attributes to GPX Export for nodes + GPX code improvements

Location:
trunk/src/org/openstreetmap/josm/gui/layer
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r7402 r7518  
    6464
    6565    public GpxLayer(GpxData d) {
    66         super((String) d.attr.get("name"));
     66        super(d.getString(GpxConstants.META_NAME));
    6767        data = d;
    6868        drawHelper = new GpxDrawHelper(data);
     
    124124
    125125        if (data.attr.containsKey("name")) {
    126             info.append(tr("Name: {0}", data.attr.get(GpxConstants.META_NAME))).append("<br>");
     126            info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
    127127        }
    128128
    129129        if (data.attr.containsKey("desc")) {
    130             info.append(tr("Description: {0}", data.attr.get(GpxConstants.META_DESC))).append("<br>");
     130            info.append(tr("Description: {0}", data.get(GpxConstants.META_DESC))).append("<br>");
    131131        }
    132132
     
    141141            for (GpxTrack trk : data.tracks) {
    142142                info.append("<tr><td>");
    143                 if (trk.getAttributes().containsKey("name")) {
    144                     info.append(trk.getAttributes().get("name"));
     143                if (trk.getAttributes().containsKey(GpxConstants.GPX_NAME)) {
     144                    info.append(trk.get(GpxConstants.GPX_NAME));
    145145                }
    146146                info.append("</td><td>");
    147                 if (trk.getAttributes().containsKey("desc")) {
    148                     info.append(" ").append(trk.getAttributes().get("desc"));
     147                if (trk.getAttributes().containsKey(GpxConstants.GPX_DESC)) {
     148                    info.append(" ").append(trk.get(GpxConstants.GPX_DESC));
    149149                }
    150150                info.append("</td><td>");
     
    154154                info.append("</td><td>");
    155155                if (trk.getAttributes().containsKey("url")) {
    156                     info.append(trk.getAttributes().get("url"));
     156                    info.append(trk.get("url"));
    157157                }
    158158                info.append("</td></tr>");
     
    215215        StringBuilder info = new StringBuilder().append("<html>");
    216216
    217         if (data.attr.containsKey("name")) {
    218             info.append(tr("Name: {0}", data.attr.get(GpxConstants.META_NAME))).append("<br>");
    219         }
    220 
    221         if (data.attr.containsKey("desc")) {
    222             info.append(tr("Description: {0}", data.attr.get(GpxConstants.META_DESC))).append("<br>");
     217        if (data.attr.containsKey(GpxConstants.META_NAME)) {
     218            info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
     219        }
     220
     221        if (data.attr.containsKey(GpxConstants.META_DESC)) {
     222            info.append(tr("Description: {0}", data.get(GpxConstants.META_DESC))).append("<br>");
    223223        }
    224224
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r7414 r7518  
    5151import org.openstreetmap.josm.data.conflict.ConflictCollection;
    5252import org.openstreetmap.josm.data.coor.LatLon;
     53import org.openstreetmap.josm.data.gpx.GpxConstants;
    5354import org.openstreetmap.josm.data.gpx.GpxData;
     55import org.openstreetmap.josm.data.gpx.GpxLink;
    5456import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
    5557import org.openstreetmap.josm.data.gpx.WayPoint;
     
    581583                WayPoint wpt = new WayPoint(n.getCoor());
    582584                if (!n.isTimestampEmpty()) {
    583                     wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp()));
     585                    wpt.put("time", DateUtils.fromDate(n.getTimestamp()));
    584586                    wpt.setTime();
    585587                }
     
    600602            }
    601603            WayPoint wpt = new WayPoint(n.getCoor());
    602             String name = n.get("name");
    603             if (name != null) {
    604                 wpt.attr.put("name", name);
    605             }
     604
     605            // Position info
     606
     607            addDoubleIfPresent(wpt, n, GpxConstants.PT_ELE);
     608
    606609            if (!n.isTimestampEmpty()) {
    607                 wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp()));
     610                wpt.put("time", DateUtils.fromDate(n.getTimestamp()));
    608611                wpt.setTime();
    609612            }
    610             String desc = n.get("description");
    611             if (desc != null) {
    612                 wpt.attr.put("desc", desc);
    613             }
     613
     614            addDoubleIfPresent(wpt, n, GpxConstants.PT_MAGVAR);
     615            addDoubleIfPresent(wpt, n, GpxConstants.PT_GEOIDHEIGHT);
     616
     617            // Description info
     618
     619            addStringIfPresent(wpt, n, GpxConstants.GPX_NAME);
     620            addStringIfPresent(wpt, n, GpxConstants.GPX_DESC, "description");
     621            addStringIfPresent(wpt, n, GpxConstants.GPX_CMT, "comment");
     622            addStringIfPresent(wpt, n, GpxConstants.GPX_SRC, "source", "source:position");
     623
     624            Collection<GpxLink> links = new ArrayList<>();
     625            for (String key : new String[]{"link", "url", "website", "contact:website"}) {
     626                String value = n.get(key);
     627                if (value != null) {
     628                    links.add(new GpxLink(value));
     629                }
     630            }
     631            wpt.put(GpxConstants.META_LINKS, links);
     632
     633            addStringIfPresent(wpt, n, GpxConstants.PT_SYM, "wpt_symbol");
     634            addStringIfPresent(wpt, n, GpxConstants.PT_TYPE);
     635
     636            // Accuracy info
     637            addStringIfPresent(wpt, n, GpxConstants.PT_FIX, "gps:fix");
     638            addIntegerIfPresent(wpt, n, GpxConstants.PT_SAT, "gps:sat");
     639            addDoubleIfPresent(wpt, n, GpxConstants.PT_HDOP, "gps:hdop");
     640            addDoubleIfPresent(wpt, n, GpxConstants.PT_VDOP, "gps:vdop");
     641            addDoubleIfPresent(wpt, n, GpxConstants.PT_PDOP, "gps:pdop");
     642            addDoubleIfPresent(wpt, n, GpxConstants.PT_AGEOFDGPSDATA, "gps:ageofdgpsdata");
     643            addIntegerIfPresent(wpt, n, GpxConstants.PT_DGPSID, "gps:dgpsid");
    614644
    615645            gpxData.waypoints.add(wpt);
     646        }
     647    }
     648
     649    private static void addIntegerIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
     650        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
     651        possibleKeys.add(0, gpxKey);
     652        for (String key : possibleKeys) {
     653            String value = p.get(key);
     654            if (value != null) {
     655                try {
     656                    int i = Integer.parseInt(value);
     657                    // Sanity checks
     658                    if ((!GpxConstants.PT_SAT.equals(gpxKey) || i >= 0) &&
     659                        (!GpxConstants.PT_DGPSID.equals(gpxKey) || (0 <= i && i <= 1023))) {
     660                        wpt.put(gpxKey, value);
     661                        break;
     662                    }
     663                } catch (NumberFormatException e) {
     664                    if (Main.isTraceEnabled()) {
     665                        Main.trace(e.getMessage());
     666                    }
     667                }
     668            }
     669        }
     670    }
     671
     672    private static void addDoubleIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
     673        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
     674        possibleKeys.add(0, gpxKey);
     675        for (String key : possibleKeys) {
     676            String value = p.get(key);
     677            if (value != null) {
     678                try {
     679                    double d = Double.parseDouble(value);
     680                    // Sanity checks
     681                    if (!GpxConstants.PT_MAGVAR.equals(gpxKey) || (0.0 <= d && d < 360.0)) {
     682                        wpt.put(gpxKey, value);
     683                        break;
     684                    }
     685                } catch (NumberFormatException e) {
     686                    if (Main.isTraceEnabled()) {
     687                        Main.trace(e.getMessage());
     688                    }
     689                }
     690            }
     691        }
     692    }
     693
     694    private static void addStringIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
     695        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
     696        possibleKeys.add(0, gpxKey);
     697        for (String key : possibleKeys) {
     698            String value = p.get(key);
     699            if (value != null) {
     700                // Sanity checks
     701                if (!GpxConstants.PT_FIX.equals(gpxKey) || GpxConstants.FIX_VALUES.contains(value)) {
     702                    wpt.put(gpxKey, value);
     703                    break;
     704                }
     705            }
    616706        }
    617707    }
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    r7320 r7518  
    6363import org.openstreetmap.josm.Main;
    6464import org.openstreetmap.josm.actions.DiskAccessAction;
     65import org.openstreetmap.josm.data.gpx.GpxConstants;
    6566import org.openstreetmap.josm.data.gpx.GpxData;
    6667import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    10121013                for (GpxTrackSegment segment : trk.getSegments()) {
    10131014                    for (WayPoint curWp : segment.getWayPoints()) {
    1014                         String curDateWpStr = (String) curWp.attr.get("time");
     1015                        String curDateWpStr = curWp.getString(GpxConstants.PT_TIME);
    10151016                        if (curDateWpStr == null) {
    10161017                            continue;
     
    11361137                for (WayPoint curWp : segment.getWayPoints()) {
    11371138
    1138                     String curWpTimeStr = (String) curWp.attr.get("time");
     1139                    String curWpTimeStr = curWp.getString(GpxConstants.PT_TIME);
    11391140                    if (curWpTimeStr != null) {
    11401141
     
    11631164
    11641165    private static Double getElevation(WayPoint wp) {
    1165         String value = (String) wp.attr.get("ele");
     1166        String value = wp.getString(GpxConstants.PT_ELE);
    11661167        if (value != null) {
    11671168            try {
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java

    r7005 r7518  
    3232
    3333import org.openstreetmap.josm.Main;
     34import org.openstreetmap.josm.data.gpx.GpxConstants;
    3435import org.openstreetmap.josm.data.gpx.GpxTrack;
    3536import org.openstreetmap.josm.gui.ExtendedDialog;
     
    111112        for (GpxTrack trk : layer.data.tracks) {
    112113            Map<String, Object> attr = trk.getAttributes();
    113             String name = (String) (attr.containsKey("name") ? attr.get("name") : "");
    114             String desc = (String) (attr.containsKey("desc") ? attr.get("desc") : "");
     114            String name = (String) (attr.containsKey(GpxConstants.GPX_NAME) ? attr.get(GpxConstants.GPX_NAME) : "");
     115            String desc = (String) (attr.containsKey(GpxConstants.GPX_DESC) ? attr.get(GpxConstants.GPX_DESC) : "");
    115116            String time = GpxLayer.getTimespanForTrack(trk);
    116117            TrackLength length = new TrackLength(trk.length());
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java

    r7299 r7518  
    1616
    1717import org.openstreetmap.josm.Main;
     18import org.openstreetmap.josm.data.gpx.GpxConstants;
    1819import org.openstreetmap.josm.data.gpx.GpxTrack;
    1920import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
     
    5354                for (WayPoint p : segment.getWayPoints()) {
    5455                    Node n = new Node(p.getCoor());
    55                     String timestr = p.getString("time");
     56                    String timestr = p.getString(GpxConstants.PT_TIME);
    5657                    if (timestr != null) {
    5758                        n.setTimestamp(DateUtils.fromString(timestr));
     
    6869        Main.main.removeLayer(layer);
    6970    }
    70 
    7171}
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java

    r7402 r7518  
    1717import org.openstreetmap.josm.Main;
    1818import org.openstreetmap.josm.data.coor.LatLon;
     19import org.openstreetmap.josm.data.gpx.GpxConstants;
    1920import org.openstreetmap.josm.data.gpx.GpxData;
    2021import org.openstreetmap.josm.data.gpx.WayPoint;
     
    253254                for (Collection<WayPoint> segment : data.getLinesIterable(null)) {
    254255                    for (WayPoint trkPnt : segment) {
    255                         Object val = trkPnt.attr.get("hdop");
     256                        Object val = trkPnt.get(GpxConstants.PT_HDOP);
    256257                        if (val != null) {
    257258                            double hdop = ((Float) val).doubleValue();
     
    304305
    305306                if (colored == ColorMode.HDOP) {
    306                     Float hdop = (Float) trkPnt.attr.get("hdop");
     307                    Float hdop = (Float) trkPnt.get(GpxConstants.PT_HDOP);
    307308                    color = hdopScale.getColor(hdop);
    308309                }
     
    446447
    447448
    448                 if (hdopCircle && trkPnt.attr.get("hdop") != null) {
     449                if (hdopCircle && trkPnt.get(GpxConstants.PT_HDOP) != null) {
    449450                    // hdop value
    450                     float hdop = (Float)trkPnt.attr.get("hdop");
     451                    float hdop = (Float)trkPnt.get(GpxConstants.PT_HDOP);
    451452                    if (hdop < 0) {
    452453                        hdop = 0;
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java

    r7509 r7518  
    2121import org.openstreetmap.josm.Main;
    2222import org.openstreetmap.josm.actions.DiskAccessAction;
     23import org.openstreetmap.josm.data.gpx.GpxConstants;
    2324import org.openstreetmap.josm.data.gpx.GpxData;
    2425import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    184185                    WayPoint wc = new WayPoint(w.getCoor());
    185186                    wc.time = wNear.time;
    186                     if (w.attr.containsKey("name")) {
    187                         wc.attr.put("name", w.getString("name"));
     187                    if (w.attr.containsKey(GpxConstants.GPX_NAME)) {
     188                        wc.put(GpxConstants.GPX_NAME, w.getString(GpxConstants.GPX_NAME));
    188189                    }
    189190                    waypoints.add(wc);
     
    200201                for (GpxTrackSegment seg : track.getSegments()) {
    201202                    for (WayPoint w : seg.getWayPoints()) {
    202                         if (w.attr.containsKey("name") || w.attr.containsKey("desc")) {
     203                        if (w.attr.containsKey(GpxConstants.GPX_NAME) || w.attr.containsKey(GpxConstants.GPX_DESC)) {
    203204                            waypoints.add(w);
    204205                        }
     
    245246                    name = name.substring(0, dot);
    246247                }
    247                 wayPointFromTimeStamp.attr.put("name", name);
     248                wayPointFromTimeStamp.put(GpxConstants.GPX_NAME, name);
    248249                waypoints.add(wayPointFromTimeStamp);
    249250            }
     
    259260                    for (WayPoint w : seg.getWayPoints()) {
    260261                        WayPoint wStart = new WayPoint(w.getCoor());
    261                         wStart.attr.put("name", "start");
     262                        wStart.put(GpxConstants.GPX_NAME, "start");
    262263                        wStart.time = w.time;
    263264                        waypoints.add(wStart);
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java

    r6830 r7518  
    8787        GpxLink link = new GpxLink(audioUrl.toString());
    8888        link.type = "audio";
    89         wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link));
     89        wpt.put(GpxConstants.META_LINKS, Collections.singleton(link));
    9090        wpt.addExtension("offset", Double.toString(offset));
    9191        wpt.addExtension("sync-offset", Double.toString(syncOffset));
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java

    r6830 r7518  
    9393        GpxLink link = new GpxLink(imageUrl.toString());
    9494        link.type = "image";
    95         wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link));
     95        wpt.put(GpxConstants.META_LINKS, Collections.singleton(link));
    9696        return wpt;
    9797    }
    98 
    9998}
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java

    r7049 r7518  
    181181    static {
    182182        Marker.markerProducers.add(new MarkerProducers() {
    183             @SuppressWarnings("unchecked")
    184183            @Override
    185184            public Marker createMarker(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time, double offset) {
     
    187186                // cheapest way to check whether "link" object exists and is a non-empty
    188187                // collection of GpxLink objects...
    189                 Collection<GpxLink> links = (Collection<GpxLink>)wpt.attr.get(GpxConstants.META_LINKS);
     188                Collection<GpxLink> links = wpt.<GpxLink>getCollection(GpxConstants.META_LINKS);
    190189                if (links != null) {
    191190                    for (GpxLink oneLink : links ) {
     
    210209                    String symbolName = wpt.getString("symbol");
    211210                    if (symbolName == null) {
    212                         symbolName = wpt.getString("sym");
     211                        symbolName = wpt.getString(GpxConstants.PT_SYM);
    213212                    }
    214213                    return new Marker(wpt.getCoor(), wpt, symbolName, parentLayer, time, offset);
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java

    r7326 r7518  
    9494            if (firstTime < 0 && wpt_has_link) {
    9595                firstTime = time;
    96                 for (Object oneLink : wpt.getCollection(GpxConstants.META_LINKS)) {
    97                     if (oneLink instanceof GpxLink) {
    98                         lastLinkedFile = ((GpxLink)oneLink).uri;
    99                         break;
     96                for (GpxLink oneLink : wpt.<GpxLink>getCollection(GpxConstants.META_LINKS)) {
     97                    lastLinkedFile = oneLink.uri;
     98                    break;
     99                }
     100            }
     101            if (wpt_has_link) {
     102                for (GpxLink oneLink : wpt.<GpxLink>getCollection(GpxConstants.META_LINKS)) {
     103                    String uri = oneLink.uri;
     104                    if (!uri.equals(lastLinkedFile)) {
     105                        firstTime = time;
    100106                    }
    101                 }
    102             }
    103             if (wpt_has_link) {
    104                 for (Object oneLink : wpt.getCollection(GpxConstants.META_LINKS)) {
    105                     if (oneLink instanceof GpxLink) {
    106                         String uri = ((GpxLink)oneLink).uri;
    107                         if (!uri.equals(lastLinkedFile)) {
    108                             firstTime = time;
    109                         }
    110                         lastLinkedFile = uri;
    111                         break;
    112                     }
     107                    lastLinkedFile = uri;
     108                    break;
    113109                }
    114110            }
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java

    r6830 r7518  
    5656        GpxLink link = new GpxLink(webUrl.toString());
    5757        link.type = "web";
    58         wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link));
     58        wpt.put(GpxConstants.META_LINKS, Collections.singleton(link));
    5959        return wpt;
    6060    }
Note: See TracChangeset for help on using the changeset viewer.