// Created by plusminus on 18:22:30 - 05.11.2008 package org.androad.sys.ors.ds.cloudmade; import java.io.BufferedInputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import org.androad.sys.ors.ds.DSRequester; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.tileprovider.util.CloudmadeUtil; import org.androad.osm.util.constants.OSMConstants; import org.androad.sys.ors.adt.ds.ORSPOI; import org.androad.sys.ors.adt.ds.POIType; import org.androad.sys.ors.exceptions.ORSException; import org.androad.sys.ors.util.Util; import org.androad.util.constants.Constants; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import android.content.Context; import android.util.Log; public class CloudmadeDSRequester implements Constants, DSRequester { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== public CloudmadeDSRequester() { } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== /** * @param gp * @param pRadiusMeters * @throws ORSException */ public ArrayList<ORSPOI> request(final Context ctx, final GeoPoint aGeoPoint, final POIType aPOIType, final int pRadiusMeters) throws IOException, SAXException, ORSException { CloudmadeUtil.retrieveCloudmadeKey(ctx.getApplicationContext()); final String cloudmadeurl = "http://geocoding.cloudmade.com/" + CloudmadeUtil.getCloudmadeKey() + "/geocoding/v2/find.plist?" + CloudmadeDSRequestComposer.create(ctx, aGeoPoint, aPOIType, pRadiusMeters); Log.d(OSMConstants.DEBUGTAG, "Cloudmade url " + cloudmadeurl); final URL requestURL = new URL(cloudmadeurl); final HttpURLConnection acon = (HttpURLConnection) requestURL.openConnection(); acon.setAllowUserInteraction(false); acon.setRequestMethod("GET"); acon.setRequestProperty("Content-Type", "application/xml"); acon.setDoOutput(true); acon.setDoInput(true); acon.setUseCaches(false); /* Get a SAXParser from the SAXPArserFactory. */ final SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp; try { sp = spf.newSAXParser(); } catch (final ParserConfigurationException e) { throw new SAXException(e); } /* Get the XMLReader of the SAXParser we created. */ final XMLReader xr = sp.getXMLReader(); /* Create a new ContentHandler and apply it to the XML-Reader*/ final CloudmadeDSParser openDSParser = new CloudmadeDSParser(aGeoPoint, aPOIType); xr.setContentHandler(openDSParser); /* Parse the xml-data from our URL. */ xr.parse(new InputSource(new BufferedInputStream(acon.getInputStream()))); /* The Handler now provides the parsed data to us. */ return openDSParser.getDSResponse(); } // =========================================================== // Inner and Anonymous Classes // =========================================================== }