- Timestamp:
- 2015-09-10T10:54:08+02:00 (10 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 1 added
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
r8727 r8744 8 8 import java.awt.event.ActionEvent; 9 9 import java.awt.event.KeyEvent; 10 import java.io.UnsupportedEncodingException;11 import java.net.URLEncoder;12 10 import java.util.ArrayList; 13 11 import java.util.Arrays; … … 26 24 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler; 27 25 import org.openstreetmap.josm.data.Bounds; 28 import org.openstreetmap.josm.data.DataSource;29 import org.openstreetmap.josm.data.osm.DataSet;30 26 import org.openstreetmap.josm.data.preferences.CollectionProperty; 31 27 import org.openstreetmap.josm.data.preferences.StringProperty; 32 28 import org.openstreetmap.josm.gui.HelpAwareOptionPane; 33 29 import org.openstreetmap.josm.gui.download.DownloadDialog; 34 import org.openstreetmap.josm.gui.progress.ProgressMonitor;35 30 import org.openstreetmap.josm.gui.util.GuiHelper; 36 31 import org.openstreetmap.josm.gui.widgets.HistoryComboBox; 37 32 import org.openstreetmap.josm.gui.widgets.JosmTextArea; 38 import org.openstreetmap.josm.io.BoundingBoxDownloader; 39 import org.openstreetmap.josm.io.OsmTransferException; 33 import org.openstreetmap.josm.io.OverpassDownloadReader; 40 34 import org.openstreetmap.josm.tools.GBC; 35 import org.openstreetmap.josm.tools.OverpassTurboQueryWizard; 41 36 import org.openstreetmap.josm.tools.Shortcut; 42 37 import org.openstreetmap.josm.tools.Utils; … … 134 129 pnl.add(overpassWizard, GBC.eol().fill(GBC.HORIZONTAL)); 135 130 136 overpassQuery = new JosmTextArea(" [timeout:15];", 8, 80);131 overpassQuery = new JosmTextArea("", 8, 80); 137 132 overpassQuery.setFont(GuiHelper.getMonospacedFont(overpassQuery)); 138 133 JScrollPane scrollPane = new JScrollPane(overpassQuery); … … 175 170 } 176 171 177 static class OverpassDownloadReader extends BoundingBoxDownloader {178 179 final String overpassServer;180 final String overpassQuery;181 182 public OverpassDownloadReader(Bounds downloadArea, String overpassServer, String overpassQuery) {183 super(downloadArea);184 this.overpassServer = overpassServer;185 this.overpassQuery = overpassQuery.trim();186 }187 188 @Override189 protected String getBaseUrl() {190 return overpassServer;191 }192 193 @Override194 protected String getRequestForBbox(double lon1, double lat1, double lon2, double lat2) {195 if (overpassQuery.isEmpty())196 return super.getRequestForBbox(lon1, lat1, lon2, lat2);197 else {198 String realQuery = completeOverpassQuery(overpassQuery);199 try {200 return "interpreter?data=" + URLEncoder.encode(realQuery, "UTF-8")201 + "&bbox=" + lon1 + "," + lat1 + "," + lon2 + "," + lat2;202 } catch (UnsupportedEncodingException e) {203 throw new IllegalStateException();204 }205 }206 }207 208 private String completeOverpassQuery(String query) {209 int firstColon = query.indexOf(";");210 if (firstColon == -1) {211 return "[bbox];" + query;212 }213 int bboxPos = query.indexOf("[bbox");214 if (bboxPos > -1 && bboxPos < firstColon) {215 return query;216 }217 218 int bracketCount = 0;219 int pos = 0;220 for (; pos < firstColon; ++pos) {221 if (query.charAt(pos) == '[')222 ++bracketCount;223 else if (query.charAt(pos) == '[')224 --bracketCount;225 else if (bracketCount == 0) {226 if (!Character.isWhitespace(query.charAt(pos)))227 break;228 }229 }230 231 if (pos < firstColon) {232 // We start with a statement, not with declarations233 return "[bbox];" + query;234 }235 236 // We start with declarations. Add just one more declaration in this case.237 return "[bbox]" + query;238 }239 240 @Override241 public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {242 243 DataSet ds = super.parseOsm(progressMonitor);244 245 // add bounds if necessary (note that Overpass API does not return bounds in the response XML)246 if (ds != null && ds.dataSources.isEmpty()) {247 if (crosses180th) {248 Bounds bounds = new Bounds(lat1, lon1, lat2, 180.0);249 DataSource src = new DataSource(bounds, getBaseUrl());250 ds.dataSources.add(src);251 252 bounds = new Bounds(lat1, -180.0, lat2, lon2);253 src = new DataSource(bounds, getBaseUrl());254 ds.dataSources.add(src);255 } else {256 Bounds bounds = new Bounds(lat1, lon1, lat2, lon2);257 DataSource src = new DataSource(bounds, getBaseUrl());258 ds.dataSources.add(src);259 }260 }261 262 return ds;263 }264 }265 172 } -
trunk/src/org/openstreetmap/josm/tools/OverpassTurboQueryWizard.java
r8743 r8744 1 1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm. actions;2 package org.openstreetmap.josm.tools; 3 3 4 4 import java.io.IOException; … … 18 18 * 19 19 * Requires a JavaScript {@link ScriptEngine}. 20 * @since 8 68420 * @since 8744 21 21 */ 22 22 public final class OverpassTurboQueryWizard {
Note:
See TracChangeset
for help on using the changeset viewer.