001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.io.imagery; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.io.BufferedReader; 007 import java.io.InputStreamReader; 008 import java.net.URL; 009 import java.net.URLEncoder; 010 011 import org.openstreetmap.josm.Main; 012 import org.openstreetmap.josm.data.coor.EastNorth; 013 import org.openstreetmap.josm.data.coor.LatLon; 014 import org.openstreetmap.josm.data.imagery.ImageryInfo; 015 import org.openstreetmap.josm.data.preferences.StringProperty; 016 017 public class OsmosnimkiOffsetServer implements OffsetServer { 018 public static final StringProperty PROP_SERVER_URL = new StringProperty("imagery.offsetserver.url","http://offset.osmosnimki.ru/offset/v0?"); 019 private String url; 020 021 public OsmosnimkiOffsetServer(String url) { 022 this.url = url; 023 } 024 025 @Override 026 public boolean isLayerSupported(ImageryInfo info) { 027 try { 028 URL url = new URL(this.url + "action=CheckAvailability&id=" + URLEncoder.encode(info.getUrl(), "UTF-8")); 029 System.out.println(tr("Querying offset availability: {0}", url)); 030 final BufferedReader rdr = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream(), "UTF-8")); 031 String response = rdr.readLine(); 032 System.out.println(tr("Offset server response: {0}", response)); 033 if (response == null) 034 return false; 035 if (response.contains("\"offsets_available\": true")) return true; 036 } catch (Exception e) { 037 e.printStackTrace(); 038 } 039 return false; 040 } 041 042 @Override 043 public EastNorth getOffset(ImageryInfo info, EastNorth en) { 044 LatLon ll = Main.getProjection().eastNorth2latlon(en); 045 try { 046 URL url = new URL(this.url + "action=GetOffsetForPoint&lat=" + ll.lat() + "&lon=" + ll.lon() + "&id=" + URLEncoder.encode(info.getUrl(), "UTF-8")); 047 System.out.println(tr("Querying offset: {0}", url.toString())); 048 final BufferedReader rdr = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream(), "UTF-8")); 049 String s = rdr.readLine(); 050 if (s == null) 051 return null; 052 int i = s.indexOf(','); 053 if (i == -1) return null; 054 String sLon = s.substring(1,i); 055 String sLat = s.substring(i+1,s.length()-1); 056 return Main.getProjection().latlon2eastNorth(new LatLon(Double.valueOf(sLat),Double.valueOf(sLon))).sub(en); 057 } catch (Exception e) { 058 e.printStackTrace(); 059 return null; 060 } 061 } 062 063 }