6 import javax.xml.parsers.DocumentBuilder;
\r
7 import javax.xml.parsers.DocumentBuilderFactory;
\r
8 import javax.xml.parsers.ParserConfigurationException;
\r
10 import org.w3c.dom.NamedNodeMap;
\r
11 import org.w3c.dom.Node;
\r
12 import org.w3c.dom.NodeList;
\r
13 import org.xml.sax.SAXException;
\r
16 * Java HTTP クライアントサンプル - HttpURLConnection 版 -
\r
18 * @author 68user http://X68000.q-e-d.net/~68user/
\r
20 public class HttpGET {
\r
21 //public static String host = "http://api06.dev.openstreetmap.org";
\r
22 public static String host = "http://api.openstreetmap.org";
\r
24 public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {
\r
28 <node id="-4131" timestamp="2011-01-21T16:47:41Z" lat="35.4350644157973" lon="139.423684433498">
\r
29 <tag k="name" v="あやせ荘"/>
\r
31 <node id="-4152" timestamp="2011-01-21T16:47:41Z" lat="35.4341675801122" lon="139.418362759267">
\r
32 <tag k="name" v="武者奇橋"/>
\r
34 <node id="-4155" timestamp="2011-01-21T16:47:41Z" lat="35.4369651010672" lon="139.426400070915">
\r
35 <tag k="name" v="綾瀬市役所"/>
\r
39 double minlon = 139.4197591d;
\r
40 double maxlon = 139.4279939d;
\r
41 double minlat = 35.4320438d;
\r
42 double maxlat = 35.4375923d;
\r
43 HttpGET.getMap(minlon, minlat, maxlon, maxlat);
\r
45 HttpGET.getMap(35.4350644157973d, 139.423684433498d, 50); // あやせ荘
\r
46 HttpGET.getMap(35.4341675801122d, 139.418362759267d, 50); // 武者奇橋
\r
47 HttpGET.getMap(35.4369651010672d, 139.426400070915d, 50); // 綾瀬市役所
\r
50 public static void getCapabilities() throws MalformedURLException, ProtocolException, IOException {
\r
51 System.out.println(host + "/api/capabilities");
\r
52 URL url = new URL(host + "/api/capabilities");
\r
54 HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
\r
55 urlconn.setRequestMethod("GET");
\r
56 urlconn.setInstanceFollowRedirects(false);
\r
57 urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
\r
60 System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
\r
61 "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
\r
62 System.out.println("\n---- ボディ ----");
\r
64 BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
\r
67 String line = reader.readLine();
\r
68 if ( line == null ){
\r
71 System.out.println(line);
\r
75 urlconn.disconnect();
\r
79 public static final double BIG_Y = (6378137.0d + 6356752.314d) / 2d; // 地球の平均半径(m)
\r
80 public static final double LAT1 = Math.PI * 2d * BIG_Y / 360d; // 緯度1度の距離(m)
\r
81 public static int getMap(double lat, double lon, int m) throws MalformedURLException, ProtocolException, IOException {
\r
82 double dLat = m / LAT1; // 距離を表す緯度(差分)
\r
83 double minlat = lat - dLat; // 底辺(緯度)
\r
84 double maxlat = lat + dLat; // 上辺(緯度)
\r
86 double y = Math.cos(lat / 180.0d * Math.PI) * BIG_Y; // 緯線上の地球の半径
\r
87 double lon1 = (y * 2.0d * Math.PI) / 360; // 経度1度の距離(m)
\r
88 double dLon = m / lon1; // 距離を表す経度(差分)
\r
89 double minlon = lon - dLon; // 左辺
\r
90 double maxlon = lon + dLon; // 右辺
\r
92 System.out.println("緯線上の地球の半径= "+ y);
\r
93 System.out.println("緯度1秒の長さ(m)= "+ LAT1 / 3600);
\r
94 System.out.println("経度1秒の長さ(m)= "+ lon1 / 3600);
\r
96 return getMap(minlon, minlat, maxlon, maxlat);
\r
99 public static int getMap(RectArea center) throws MalformedURLException, ProtocolException, IOException {
\r
100 return getMap(center.minlon, center.minlat, center.maxlon, center.maxlat);
\r
103 public static int getMap(double minlon, double minlat, double maxlon, double maxlat) throws MalformedURLException, ProtocolException, IOException {
\r
104 String param = host + "/api/0.6/map" + "?bbox="+ Double.toString(minlon) +","+ Double.toString(minlat) +","+ Double.toString(maxlon) +","+ Double.toString(maxlat);
\r
106 System.out.println(param);
\r
107 URL url = new URL(param);
\r
109 HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
\r
110 urlconn.setRequestMethod("GET");
\r
111 urlconn.setInstanceFollowRedirects(false);
\r
112 urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
\r
115 System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
\r
116 "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
\r
117 System.out.println("\n---- ボディ ----");
\r
119 //------------------------------------------
\r
120 DocumentBuilderFactory factory;
\r
121 DocumentBuilder builder;
\r
125 factory = DocumentBuilderFactory.newInstance();
\r
126 builder = factory.newDocumentBuilder();
\r
127 factory.setIgnoringElementContentWhitespace(true);
\r
128 factory.setIgnoringComments(true);
\r
129 factory.setValidating(true);
\r
130 root = builder.parse(urlconn.getInputStream());
\r
134 } catch (ParserConfigurationException e0) {
\r
135 System.out.println(e0.getMessage());
\r
136 } catch (SAXException e1){
\r
137 System.out.println(e1.getMessage());
\r
138 } catch (IOException e2) {
\r
139 System.out.println(e2.getMessage());
\r
142 System.out.println("バス停数["+ counter +"]");
\r
143 urlconn.disconnect();
\r
148 public void sendCMD(String api) throws MalformedURLException, ProtocolException, IOException {
\r
149 System.out.println(host + api);
\r
150 URL url = new URL(host + api);
\r
152 HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
\r
153 urlconn.setRequestMethod("GET");
\r
154 urlconn.setInstanceFollowRedirects(false);
\r
155 urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
\r
158 System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
\r
159 "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
\r
160 System.out.println("\n---- ボディ ----");
\r
162 BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
\r
165 String line = reader.readLine();
\r
166 if ( line == null ){
\r
169 System.out.println(line);
\r
173 urlconn.disconnect();
\r
176 public static int counter;
\r
177 public static void checkNodes(Node node) {
\r
178 if (isBusstop(node)) {
\r
183 NodeList nodes = node.getChildNodes();
\r
184 for (int i=0; i<nodes.getLength(); i++) {
\r
185 Node node2 = nodes.item(i);
\r
193 * @throws IOException
\r
194 * @throws SQLException
\r
196 public static boolean isBusstop(Node node) {
\r
197 NodeList nodes = node.getChildNodes();
\r
198 for (int i=0; i < nodes.getLength(); i++) {
\r
199 Node node2 = nodes.item(i);
\r
200 if (isBusstopTag(node2)) {
\r
212 private static boolean isBusstopTag(Node node) {
\r
213 if (node.getNodeName().equals("tag")) {
\r
214 boolean highway = false;
\r
215 boolean bus_stop = false;
\r
216 boolean public_transport = false;
\r
217 boolean plathome = false;
\r
218 boolean stop_position = false;
\r
219 NamedNodeMap nodeMap = node.getAttributes();
\r
220 if ( null != nodeMap ) {
\r
221 for (int j=0; j < nodeMap.getLength(); j++ ) {
\r
222 String key = nodeMap.item(j).getNodeName();
\r
223 String value = nodeMap.item(j).getNodeValue();
\r
224 if (key.equals("k") && value.equals("highway")){
\r
227 if (key.equals("k") && value.equals("public_transport")){
\r
228 public_transport = true;
\r
230 if (key.equals("v") && value.equals("bus_stop")){
\r
233 if (key.equals("v") && value.equals("plathome")){
\r
236 if (key.equals("v") && value.equals("stop_position")){
\r
237 stop_position = true;
\r
240 if (highway && bus_stop) {
\r
243 if (public_transport && (plathome || stop_position)) {
\r
252 * 指定されたノードを再帰的に表示する。
\r
255 * @throws IOException
\r
256 * @throws SQLException
\r
258 public static void showNode(Node node) {
\r
259 System.out.print("<"+ node.getNodeName());
\r
260 NamedNodeMap nodeMap = node.getAttributes();
\r
261 if ( null != nodeMap ) {
\r
262 for ( int j=0; j < nodeMap.getLength(); j++ ) {
\r
263 System.out.print(" "+ nodeMap.item(j).getNodeName() +"=\""+ nodeMap.item(j).getNodeValue() +"\"");
\r
267 System.out.print(">"+ node.getNodeValue());
\r
269 NodeList nodes = node.getChildNodes();
\r
270 for (int i=0; i<nodes.getLength(); i++) {
\r
271 showNode(nodes.item(i));
\r
273 System.out.println("</"+ node.getNodeName() +">");
\r
277 public double minlon;
\r
278 public double maxlon;
\r
279 public double minlat;
\r
280 public double maxlat;
\r
283 * 矩形領域を中心点と中心点からの距離(メートル)でセットする
\r
285 * @param lat // 中心点の緯度
\r
286 * @param lon // 中心点の経度
\r
287 * @param m // 距離 領域の一辺の長さの半分
\r
289 public RectArea(double lat, double lon, int m) {
\r
290 double BIG_Y = (40000000.0d / 2.0d / Math.PI); // 地球の半径
\r
291 double LAT1 = (10000000.0d / 90.0d); // 緯度1度の距離(m)
\r
292 double dLat = m / LAT1; // 距離を表す緯度(差分)
\r
293 minlat = lat - dLat; // 底辺(緯度)
\r
294 maxlat = lat + dLat; // 上辺(緯度)
\r
295 double y = Math.sin((90.0d - lat) / 180.0d) * BIG_Y; // 緯線上の地球の半径
\r
296 double lon1 = y * 2.0d * Math.PI; // 経度1度の距離(m)
\r
297 double dLon = m / lon1; // 距離を表す経度(差分)
\r
298 minlon = lon - dLon; // 左辺
\r
299 maxlon = lon + dLon; // 右辺
\r