рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Google рдорд╛рдирдЪрд┐рддреНрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг

рд╢реБрдн рджреЛрдкрд╣рд░, рдЦрд╛рдмрд░реЛрд╡рд╕реНрдХ рдирд┐рд╡рд╛рд╕реАред

рдореИрдВ Google рдорд╛рдирдЪрд┐рддреНрд░ API рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдереЛрдбрд╝рд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рд╣реВрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ, рдЬрд┐рдпреЛрдбреЗрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдЕрдВрдХ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реВрдВрдЧрд╛ "рдЬрд╣рд╛рдВ рдпрд╛ рд╡рд╣рд╛рдВ рдХрд░реАрдм рдЬрд╛рдирд╛ рд╣реИред"

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЙрдкрдХрд░рдг


Google рдореИрдкреНрд╕ API рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ json рдФрд░ xml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИрдВред Google json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред Json рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо org.json рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдорд░реВрдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЦреИрд░ рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, jdk 1.6ред

рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдФрд░ json рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо JsonReader рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

public class JsonReader { private static String readAll(final Reader rd) throws IOException { final StringBuilder sb = new StringBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return sb.toString(); } public static JSONObject read(final String url) throws IOException, JSONException { final InputStream is = new URL(url).openStream(); try { final BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); final String jsonText = readAll(rd); final JSONObject json = new JSONObject(jsonText); return json; } finally { is.close(); } } } 


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрдВрддрддрдГ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдлрд╛рд░реНрдо рдХреА 1 рдХрд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП = value1 & key2 = value2 ... , рд╣рдо рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВрдЧреЗред

 private static String encodeParams(final Map<String, String> params) { final String paramsUrl = Joiner.on('&').join(//    key1=value1&key2=value2... Iterables.transform(params.entrySet(), new Function<Entry<String, String>, String>() { @Override public String apply(final Entry<String, String> input) { try { final StringBuffer buffer = new StringBuffer(); buffer.append(input.getKey());//    key=value buffer.append('='); buffer.append(URLEncoder.encode(input.getValue(), "utf-8"));//       HTML 4.01 return buffer.toString(); } catch (final UnsupportedEncodingException e) { throw new RuntimeException(e); } } })); return paramsUrl; } 


рд╣рдордиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЪрд▓реЛ рдмрд┐рдВрджреБ рдкрд░ рдЖрддреЗ рд╣реИрдВред

рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдЬрд┐рдпреЛрдбреЗрдХреЛрдбрд┐рдВрдЧ


рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рднреМрдЧреЛрд▓рд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдЬреИрд╕реЗ рдЕрдХреНрд╖рд╛рдВрд╢ 37.423021 рдФрд░ рджреЗрд╢рд╛рдВрддрд░ -122.0883739) рдХреЗ рдкрддреЗ (рдЬреИрд╕реЗ рдХрд┐ 1600 рдПрдореНрдлреАрдерд┐рдПрдЯрд░ рдкрд╛рд░реНрдХрд╡реЗ, рдорд╛рдЙрдВрдЯреЗрди рд╡реНрдпреВ, рд╕реАрдП) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рд░рдЦрдиреЗ рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Google рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд┐рдпреЛрдХреЛрдбрд░ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рд╕реЗрд╡рд╛ рдЖрдкрдХреЛ рд╡рд┐рдкрд░реАрдд рдХреНрд░рд┐рдпрд╛ (рдкрддреЛрдВ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж) рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рд░реВрд╕, рдореЙрд╕реНрдХреЛ, рдкреЛрдХрд▓реЛрдирд╛рдпрд╛ рд╕реНрдЯреНрд░реАрдЯ 12 рдХреЗ рдкрддреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ maps.googleapis.com/maps/api/geocode/output?parameters рд╕реЗрд╡рд╛ рдХрд╛ рдкрде, рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ред

 public static void main(final String[] args) throws IOException, JSONException { final String baseUrl = "http://maps.googleapis.com/maps/api/geocode/json";//   Geocoding API  HTTP final Map<String, String> params = Maps.newHashMap(); params.put("sensor", "false");//           params.put("address", ", ,  , 12");// ,    final String url = baseUrl + '?' + encodeParams(params);//     System.out.println(url);// ,          final JSONObject response = JsonReader.read(url);//          //               // //results[0]/geometry/location/lng  //results[0]/geometry/location/lat JSONObject location = response.getJSONArray("results").getJSONObject(0); location = location.getJSONObject("geometry"); location = location.getJSONObject("location"); final double lng = location.getDouble("lng");//  final double lat = location.getDouble("lat");//  System.out.println(String.format("%f,%f", lat, lng));//     } 


рдХрдВрд╕реЛрд▓:
 http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C+%D0 % 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 83% D0% BB% D0% B8% D1% 86% D0% 9% D0% 9%% D0% % BE% D0% BA% D0% BB% D0% BE% D0% BD% D0% BD% D0% B0% D1% 8F% 2C + 12
 55.735893,37.527420


рдЕрдм рд╣рдо рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдЕрдХреНрд╖рд╛рдВрд╢ рдХреЗ рд╕рд╛рде рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдкрддреЗ рдХреА рдЬрдЧрд╣ рд╣реЛрдЧреА

 public static void main(final String[] args) throws IOException, JSONException { final String baseUrl = "http://maps.googleapis.com/maps/api/geocode/json";//   Geocoding API  HTTP final Map<String, String> params = Maps.newHashMap(); params.put("language", "ru");//  ,      params.put("sensor", "false");//           //   /,        ,   //   ,     params.put("latlng", "55.735893,37.527420"); final String url = baseUrl + '?' + encodeParams(params);//     System.out.println(url);// ,          final JSONObject response = JsonReader.read(url);//          //  ,             // //results[0]/formatted_address final JSONObject location = response.getJSONArray("results").getJSONObject(0); final String formattedAddress = location.getString("formatted_address"); System.out.println(formattedAddress);//   } 


рдХрдВрд╕реЛрд▓:
 http://maps.googleapis.com/maps/api/geocode/json?sensor=false&latlng=55.735893%2C37.527420&language=ru
 рдкреЛрдХрд▓реЛрдирд╛рдпрд╛ рд╕реЗрдВрдЯ, 12, рдореЙрд╕реНрдХреЛ, рд░реВрд╕, 121170


рдЕрдВрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛


рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

 private static final double EARTH_RADIUS = 6371.; //   public static void main(final String[] args) throws IOException, JSONException { final Point subwayStationPoint = getPoint(", ,  , 12"); final Point addressPoint = getPoint(", ,    "); //     final double dlng = deg2rad(subwayStationPoint.lng - addressPoint.lng); final double dlat = deg2rad(subwayStationPoint.lat - addressPoint.lat); final double a = sin(dlat / 2) * sin(dlat / 2) + cos(deg2rad(addressPoint.lat)) * cos(deg2rad(subwayStationPoint.lat)) * sin(dlng / 2) * sin(dlng / 2); final double c = 2 * atan2(sqrt(a), sqrt(1 - a)); System.out.println("distance: " + c * EARTH_RADIUS); //     } /** *  ,     * */ private static class Point { public double lat; public double lng; public Point(final double lng, final double lat) { this.lng = lng; this.lat = lat; } @Override public String toString() { return lat + "," + lng; } } /** *   * * @param address * @return * @throws IOException * @throws JSONException */ private static Point getPoint(final String address) throws IOException, JSONException { final String baseUrl = "http://maps.googleapis.com/maps/api/geocode/json";//   Geocoding API  HTTP final Map<String, String> params = Maps.newHashMap(); params.put("sensor", "false");// ,          //  params.put("address", address);// ,    final String url = baseUrl + '?' + encodeParams(params);//     System.out.println(url);//         final JSONObject response = JsonReader.read(url);//          //               // //results[0]/geometry/location/lng  //results[0]/geometry/location/lat JSONObject location = response.getJSONArray("results").getJSONObject(0); location = location.getJSONObject("geometry"); location = location.getJSONObject("location"); final double lng = location.getDouble("lng");//  final double lat = location.getDouble("lat");//  final Point point = new Point(lng, lat); System.out.println(address + " " + point); //       return point; } /** *       * * @param degree * @return */ private static double deg2rad(final double degree) { return degree * (Math.PI / 180); } 


рдХрдВрд╕реЛрд▓:
 http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C+%D0 % 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 83% D0% BB% D0% B8% D1% 86% D0% 9% D0% 9%% D0% % BE% D0% BA% D0% BB% D0% BE% D0% BD% D0% BD% D0% B0% D1% 8F% 2C + 12
 рд░реВрд╕, рдорд╛рд╕реНрдХреЛ, рдкреЛрдХрд▓реЛрдиреНрдирдпрд╛ рд╕рдбрд╝рдХ, 12 55.7358925,37.5274195
 http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C+%D0 % 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 81% D1% 82% D0% B0% D0% B0% 86% D0% B8% D1% % 8F +% D0% BC% D0% B5% D1% 82% D1% 80% D0% BE +% D0% 9F% D0% B0% D1% 80% D0% BA +% D0% 9F% D0% B0% B1% % D0% B5% D0% B4% D1% 8B
 рд░реВрд╕, рдорд╛рд╕реНрдХреЛ, рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рди рд╡рд┐рдЬрдп рдкрд╛рд░реНрдХ 55.736217,37.516838
 рджреВрд░реА: 0.6634200825814502


рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Google рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛


Google Directions API рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ HTTP рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдорд╛рд░реНрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИред рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ, рдкреНрд░рд╕реНрдерд╛рди рдФрд░ рдЧрдВрддрд╡реНрдп рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд┐рдХрд╛рдЧреЛ, рдЗрд▓рд┐рдиреЛрдЗрд╕ рдпрд╛ рдбрд╛рд░реНрд╡рд┐рди, рдиреНрдпреВ рд╕рд╛рдЙрде рд╡реЗрд▓реНрд╕, рдСрд╕реНрдЯреНрд░реЗрд▓рд┐рдпрд╛) рдпрд╛ рдЕрдХреНрд╖рд╛рдВрд╢ рдФрд░ рджреЗрд╢рд╛рдВрддрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Directions API рдХрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред


рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ maps.googleapis.com/maps/api/directions/output?parameters рд╕реЗрд╡рд╛ рдХрд╛ рдкрде, рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреЛрдХрд▓реЛрдирд╛рдпрд╛ рд╕реНрдЯреНрд░реАрдЯ рд╕реЗ 12, рд╡рд┐рдХреНрдЯреНрд░реА рдкрд╛рд░реНрдХ рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рди рддрдХ рдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ:

 public static void main(final String[] args) throws IOException, JSONException { final String baseUrl = "http://maps.googleapis.com/maps/api/directions/json";//   Geocoding API  // HTTP final Map<String, String> params = Maps.newHashMap(); params.put("sensor", "false");// ,          params.put("language", "ru");//        params.put("mode", "walking");//  ,   driving, walking, bicycling params.put("origin", ", ,  , 12");//       //    params.put("destination", ", ,    ");//       //  //     final String url = baseUrl + '?' + encodeParams(params);//     System.out.println(url); //         final JSONObject response = JsonReader.read(url);//          //               // //results[0]/geometry/location/lng  //results[0]/geometry/location/lat JSONObject location = response.getJSONArray("routes").getJSONObject(0); location = location.getJSONArray("legs").getJSONObject(0); final String distance = location.getJSONObject("distance").getString("text"); final String duration = location.getJSONObject("duration").getString("text"); System.out.println(distance + "\n" + duration); } 


рдХрдВрд╕реЛрд▓
 http://anonymouse.org/cgi-bin/anon-www.cgi/http://maps.googleapis.com/maps/api/directions/json?sensor=false&origin=%D0%A0%D0%BE%D1 % 81% D1% 81% D0% B8% D1% 8F% 2C +% D0% 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 83% D0% BB % D0% B8% D1% 86% D0% B0 +% D0% 94% D0% B5% D0% B%% D0% B8% D1% 81% D0% B0 +% D0% 94% D0% B0% D0% B2% D1% % 8B% D0% B4% D0% BE% D0% B2% D0% B0% 2C + 7 рдФрд░ рднрд╛рд╖рд╛ = рдЦрдВрдб рдФрд░ рдЧрдВрддрд╡реНрдп =% D0% A0% D0% BE% D1% 81% D1% 81% D0% B8% D1% 8F% 2C +% D0% 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 83% D0% BB0 D0% B8% 1% 86% D0% B0% +% D0% 9A% D1% 83% D0% BB% D1% 8C% D0% BD% D0% B5% D0% B2% D0% B0 + 3 рдФрд░ рдореЛрдб = рдЪрд▓рдирд╛
 0.9 рдХрд┐рдореА
 10 рдорд┐рдирдЯ


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рди рд╡рд┐рдХреНрдЯреНрд░реА рдкрд╛рд░реНрдХ рдпрд╛ рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рди рдХреБрддреБрдЬрд╝реЛрд╡рд╕реНрдХрд╛рдпрд╛, 12 рд╕реЗ рдкреЛрдХрд▓реЛрдирд╛рдпрд╛ рдЧрд▓реА рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Google рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ API рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред

рдЖрд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдФрд░ рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рдордп рдХреА рдЧрдгрдирд╛


Google рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдкреАрдЖрдИ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдФрд░ рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред Google рдореИрдкреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рд╢реБрд░реВ рдФрд░ рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдорд╛рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдЕрд╡рдзрд┐ рдФрд░ рджреВрд░реА рдорд╛рди рдпреБрдХреНрдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред


Maps.googleapis.com/maps/api/distancematrix/output?parameters рд╕реЗрд╡рд╛, рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдорд╛рд░реНрдЧ, рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ред

 public static void main(final String[] args) throws IOException, JSONException { final String baseUrl = "http://maps.googleapis.com/maps/api/distancematrix/json";//   Geocoding API  HTTP final Map<String, String> params = Maps.newHashMap(); params.put("sensor", "false");// ,          params.put("language", "ru");//   params.put("mode", "walking");//  ,   driving, walking, bicycling //      final String[] origins = { ", ,  , 12" }; params.put("origins", Joiner.on('|').join(origins)); //      final String[] destionations = { // ", ,    ", // ", ,   " // }; //       '|' params.put("destinations", Joiner.on('|').join(destionations)); final String url = baseUrl + '?' + encodeParams(params);//     System.out.println(url); //         final JSONObject response = JsonReader.read(url);//          final JSONObject location = response.getJSONArray("rows").getJSONObject(0); final JSONArray arrays = location.getJSONArray("elements");//      //         final JSONObject result = Ordering.from(new Comparator<JSONObject>() { @Override public int compare(final JSONObject o1, final JSONObject o2) { final Integer duration1 = getDurationValue(o1); final Integer duration2 = getDurationValue(o2); return duration1.compareTo(duration2);//      } /** *     * * @param obj * @return */ private int getDurationValue(final JSONObject obj) { try { return obj.getJSONObject("duration").getInt("value"); } catch (final JSONException e) { throw new RuntimeException(e); } } }).min(new AbstractIterator<JSONObject>() {//   JSONArray  ,     private int index = 0; @Override protected JSONObject computeNext() { try { JSONObject result; if (index < arrays.length()) { final String destionation = destionations[index]; result = arrays.getJSONObject(index++); result.put("address", destionation);//      ,      //   } else { result = endOfData(); } return result; } catch (final JSONException e) { throw new RuntimeException(e); } } }); final String distance = result.getJSONObject("distance").getString("text");//    final String duration = result.getJSONObject("duration").getString("text");//    final String address = result.getString("address");//  System.out.println(address + "\n" + distance + "\n" + duration); } 


рдХрдВрд╕реЛрд▓
 http://maps.googleapis.com/maps/api/distancematrix/json?sensor=false&destinations=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C+%D0 % 9C% D0% BE% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 81% D1% 82% D0% B0% D0% B0% 86% D0% B8% D1% % 8F +% D0% BC% D0% B5% D1% 82% D1% 80% D0% BE +% D0% 9F% D0% B0% D1% 80% D0% BA +% D0% 9F% D0% B0% B1% % D0% B5% D0% B4% D1% 8B% 7C% D0% A0% D0% BE% D1% 81% D1% 81% D0% B8% D1% 8F% 2% +% D0% 9C% D0% BE1% D1% % 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 81% D1% 82% D0% B0% D0% BD% D1% 86% D0% B8% 8% +% D0% BC% D0% % B5% D1% 82% D1% 80% D0% BE +% D0% 9A% D1% 83% D1% 82% D1% 83% D0% B7% D7% BE% D0% B2A D1% 81% D0% BA % D0% B0% D1% 8F рдФрд░ рдЙрддреНрдкрддреНрддрд┐ =% D0% A0% D0% BE% D1% 81% D1% 81% D0% B8% D1% 8F% 2C +% D0% 9C% D0% BE1% 81% D1% 81% D0% BA% D0% B2% D0% B0% 2C +% D1% 83% D0% BB% D0% B8% D1% 86% D0% B0 +% D0% 9F% D0% BE% 0%% B0% B0% B0% D0% BE% D0% BD% D0% BD% D0% B0% D1% 8F% 2C + 12 рдФрд░ рднрд╛рд╖рд╛ = en & рдореЛрдб = рдЪрд▓рдирд╛
 рд░реВрд╕, рдорд╛рд╕реНрдХреЛ, рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рди рдХреБрддреБрдЬрд╝реЛрд╡рд╕реНрдХрд╛рдпрд╛
 0.8 рдХрд┐рдореА
 9 рдорд┐рдирдЯ

рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкрддрд┐-рдкрддреНрдиреА рдмреИрдВрдХ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдЬрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред

рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдмрдВрдз


рдЕрдХреЗрд▓реЗ Google, рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдпреЗ рд╕реЗрд╡рд╛рдПрдВ рд╣рд░ рджрд┐рди рдХрд┐рддрдиреЗ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИрдВред рд▓реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫрд╛ рдирд┐рдЧрдо рдиреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛ рджрд┐рдпрд╛ред
рдЖрдЬ, рдЖрдк рдкреНрд░рддрд┐ рджрд┐рди рдПрдХ рдЖрдИрдкреА рд╕реЗ 2500 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 10 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо OVER_QUERY_LIMIT рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд░рд┐рдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, URL рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 2048 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕рд╛рдЬрд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн


developers.google.com/maps/documentation/geocoding/?hl=ru
developers.google.com/maps/documentation/directions/?hl=ru
developers.google.com/maps/documentation/distancematrix/?hl=ru


UPD: рдореИрдВрдиреЗ github.com/nestor-by/map-api-samples рдХреЗ рд╕реНрд░реЛрдд рдкреЛрд╕реНрдЯ рдХрд┐рдП рд╣реИрдВ

Source: https://habr.com/ru/post/In148986/


All Articles