- Point2D.Double pt = pt(state.gps.lat, state.gps.lon);
- for (int x = 0; x < mapTiles.length; x++) {
- mapTiles[x].show(state, crc_errors,
- translatePoint(pt, tileOffset[x]));
+ final Point2D.Double pt = pt(state.gps.lat, state.gps.lon);
+ if (last_pt == pt && last_state == state.state)
+ return;
+
+ if (last_pt == null) {
+ last_pt = pt;
+ }
+ boolean in_any = false;
+ for (Point offset : mapTiles.keySet()) {
+ AltosSiteMapTile tile = mapTiles.get(offset);
+ Point2D.Double ref, lref;
+ ref = translatePoint(pt, tileCoordOffset(offset));
+ lref = translatePoint(last_pt, tileCoordOffset(offset));
+ tile.show(state, crc_errors, lref, ref);
+ if (0 <= ref.x && ref.x < px_size)
+ if (0 <= ref.y && ref.y < px_size)
+ in_any = true;
+ }
+ if (!in_any) {
+ final AltosSiteMapTile tile = new AltosSiteMapTile(px_size);
+ final Point offset = tileOffset(pt);
+ mapTiles.put(offset, tile);
+
+ Point2D.Double ref, lref;
+ ref = translatePoint(pt, tileCoordOffset(offset));
+ lref = translatePoint(last_pt, tileCoordOffset(offset));
+ tile.show(state, crc_errors, lref, ref);
+
+ initMap(tile, offset);
+
+ SwingUtilities.invokeLater( new Runnable() {
+ public void run() {
+ addTileAt(tile, offset);
+ setViewportView(comp);
+ }
+ } );