-
Notifications
You must be signed in to change notification settings - Fork 0
/
GeocoderDemo.java
74 lines (55 loc) · 2.55 KB
/
GeocoderDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.flyingspaniel.xen;
import java.net.URLEncoder;
import java.util.Arrays;
/**
* Geocoder Demo based upon "Making Java Groovy" Geocoder example
* Chapter 2, Page 32
*
* @author Morgan Conrad
* @see <a href="http://opensource.org/licenses/MIT">This software is released under the MIT License</a>
* @since Copyright (c) 2014 by Morgan Conrad
*/
public class GeocoderDemo {
public static final String BASE = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=";
/*
OPTION 1 - Java / W3C XPath style with 1-based indexing we ask for the 1st result, not the 0th
*/
public double[] fillInLatLng_V1(String address) throws Exception {
String url = BASE + URLEncoder.encode(address);
Xen response = new XenParser().parse(url);
double[] latLng = new double[2];
// Various options for getting the result
// 1. cache intermediate result (most efficient if you had to look up a lot within location)
Xen location = response.one("result[1]/geometry/location");
latLng[0] = location.toDouble("lat");
latLng[1] = location.toDouble("lng");
// option 2a and 2b, go there directly
latLng[0] = response.toDouble("result[1]/geometry/location/lat");
latLng[1] = response.one("result[1]/geometry/location/lng").toDouble();
return latLng;
}
/*
OPTION 2 - Groovy XMLSlurper style, with dots and 0-based indexing
*/
public double[] fillInLatLng_V2(String address) throws Exception {
String url = BASE + URLEncoder.encode(address);
Xen response = new XenParser().parse(url);
double[] latLng = new double[2];
// Various options for getting the result
// 1. cache intermediate result (most efficient if you had to look up a lot within location)
Xen location = response.one(".result[0].geometry.location");
latLng[0] = location.toDouble(".lat");
latLng[1] = location.toDouble(".lng");
// option 2a and 2b, go there directly (as in the Making Java Groovy book)
latLng[0] = response.toDouble(".result[0].geometry.location.lat");
latLng[1] = response.one(".result[0].geometry.location.lng").toDouble();
return latLng;
}
public static void main(String[] args) throws Exception {
GeocoderDemo demo = new GeocoderDemo();
double[] latLng = demo.fillInLatLng_V1("24 Willy Mays Plaza San Francisco CA");
System.out.println(Arrays.toString(latLng));
latLng = demo.fillInLatLng_V2("24 Willy Mays Plaza San Francisco CA");
System.out.println(Arrays.toString(latLng));
}
}