Android Open Source - advanced-tourist-map Geonames Retriever






From Project

Back to project page advanced-tourist-map.

License

The source code is released under:

GNU General Public License

If you think the Android project advanced-tourist-map listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011 mapsforge.org//  w  w w.j a va2 s  . c om
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.muxe.advancedtouristmap.wikipedia;

import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.mapsforge.android.maps.GeoPoint;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.util.Log;

public class GeonamesRetriever implements ArticleRetriever {

  private static final String USERNAME = "muxe";
  private static final String BASEURL = "http://api.geonames.org";
  private String locale;
  private DocumentBuilder dBuilder;

  public GeonamesRetriever(String locale) {
    this.locale = locale;
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    try {
      this.dBuilder = dbFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    }
  }

  @Override
  public ArrayList<WikiArticleInterface> getArticles(GeoPoint geoPoint, int radius,
      int limit, int offset) throws IOException {
    ArrayList<WikiArticleInterface> result = new ArrayList<WikiArticleInterface>();

    String url = BASEURL + "/findNearbyWikipedia?username=" + USERNAME + "&lang="
        + this.locale;

    url += "&lat=" + geoPoint.getLatitude();
    url += "&lng=" + geoPoint.getLongitude();

    // convert meter to km
    int radius_km = radius / 1000;
    if (radius_km > 0 && radius_km <= 20) {
      url += "&radius=" + radius_km;
    }
    if (limit > 0 && limit <= 500) {
      url += "&maxRows=" + limit;
    }
    Log.d("PositionInfo", url);

    try {
      InputStream is = loadXml(url);
      if (is == null) {
        throw new IOException();
      }
      Document doc = this.dBuilder.parse(is);
      doc.getDocumentElement().normalize();

      NodeList articleNodes = doc.getElementsByTagName("entry");
      for (int i = 0; i < articleNodes.getLength(); i++) {
        OnlineWikiArticle wikiArticle = new OnlineWikiArticle(this.locale);
        Node articleNode = articleNodes.item(i);
        NodeList articleNodeDetails = articleNode.getChildNodes();
        for (int j = 0; j < articleNodeDetails.getLength(); j++) {
          try {
            Node articleProperty = articleNodeDetails.item(j);
            String articlePropertyName = articleProperty.getNodeName();
            if (articlePropertyName.equalsIgnoreCase("lat")) {
              wikiArticle.setLat(Double.parseDouble(articleProperty
                  .getFirstChild().getNodeValue()));
            } else if (articlePropertyName.equalsIgnoreCase("lng")) {
              wikiArticle.setLng(Double.parseDouble(articleProperty
                  .getFirstChild().getNodeValue()));
            } else if (articlePropertyName.equalsIgnoreCase("title")) {
              wikiArticle
                  .setTitle(articleProperty.getFirstChild().getNodeValue());
            } else if (articlePropertyName.equalsIgnoreCase("feature")) {
              wikiArticle.setType(articleProperty.getFirstChild().getNodeValue());
            } else if (articlePropertyName.equalsIgnoreCase("wikipediaUrl")) {
              wikiArticle.setUrl(articleProperty.getFirstChild().getNodeValue());
            }
          } catch (NullPointerException e) {
            //expected
          } catch (NumberFormatException e) {
            e.printStackTrace();
          }

        }
        result.add(wikiArticle);
      }

    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

    return result;
  }

  /**
   * Opens a remote/local File and returns a InputStream
   * 
   * @param path
   *            Path of the File as URL (for local files use: file:/path/to/go)
   * @return InputStream for the File
   */
  private InputStream loadXml(String path) {
    try {
      URL url = new URL(path);
      URLConnection ucon = url.openConnection();
      InputStream is = ucon.getInputStream();
      return is;
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
  }

}




Java Source Code List

org.mapsforge.geocoding.Unchecked.java
org.mapsforge.geocoding.widget.CityCompletionAdapter.java
org.mapsforge.geocoding.widget.PlaceCompletionAdapter.java
org.mapsforge.geocoding.widget.RoadCompletionAdapter.java
org.mapsforge.geocoding.widget.RoadListAdapter.java
org.mapsforge.geocoding.widget.SqliteCompletionAdapter.java
org.mapsforge.geocoding.widget.State.java
org.muxe.advancedtouristmap.AdvancedTouristMapApplication.java
org.muxe.advancedtouristmap.AdvancedTouristMap.java
org.muxe.advancedtouristmap.BaseActivity.java
org.muxe.advancedtouristmap.CacheSizePreference.java
org.muxe.advancedtouristmap.EditPreferences.java
org.muxe.advancedtouristmap.FilePickerIconAdapter.java
org.muxe.advancedtouristmap.FilePicker.java
org.muxe.advancedtouristmap.InfoView.java
org.muxe.advancedtouristmap.LocationPicker.java
org.muxe.advancedtouristmap.MoveSpeedPreference.java
org.muxe.advancedtouristmap.PositionInfo.java
org.muxe.advancedtouristmap.Search.java
org.muxe.advancedtouristmap.SeekBarPreference.java
org.muxe.advancedtouristmap.Utility.java
org.muxe.advancedtouristmap.overlay.GenericOverlayItem.java
org.muxe.advancedtouristmap.overlay.GenericOverlay.java
org.muxe.advancedtouristmap.overlay.PoiOverlayItem.java
org.muxe.advancedtouristmap.overlay.PositionOverlayItem.java
org.muxe.advancedtouristmap.overlay.WikiOverlayItem.java
org.muxe.advancedtouristmap.poi.PoiBrowserActivity.java
org.muxe.advancedtouristmap.poi.PoiOrCategory.java
org.muxe.advancedtouristmap.routing.AngleCalc.java
org.muxe.advancedtouristmap.routing.DecisionOverlay.java
org.muxe.advancedtouristmap.routing.DecisionPoint.java
org.muxe.advancedtouristmap.routing.RouteCalculator.java
org.muxe.advancedtouristmap.routing.RouteList.java
org.muxe.advancedtouristmap.routing.Route.java
org.muxe.advancedtouristmap.sourcefiles.AddressFile.java
org.muxe.advancedtouristmap.sourcefiles.FileManagerActivity.java
org.muxe.advancedtouristmap.sourcefiles.FileManager.java
org.muxe.advancedtouristmap.sourcefiles.MapBundle.java
org.muxe.advancedtouristmap.sourcefiles.MapFile.java
org.muxe.advancedtouristmap.sourcefiles.PoiFile.java
org.muxe.advancedtouristmap.sourcefiles.RoutingFile.java
org.muxe.advancedtouristmap.sourcefiles.SourceFile.java
org.muxe.advancedtouristmap.wikipedia.AbstractWikiArticle.java
org.muxe.advancedtouristmap.wikipedia.ArticleRetrieverFactory.java
org.muxe.advancedtouristmap.wikipedia.ArticleRetriever.java
org.muxe.advancedtouristmap.wikipedia.GeonamesRetriever.java
org.muxe.advancedtouristmap.wikipedia.OnlineWikiArticle.java
org.muxe.advancedtouristmap.wikipedia.WikiArticleInterface.java
org.muxe.advancedtouristmap.wikipedia.WikilocationRetriever.java