diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java index 8556e21..5210ffe 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java @@ -649,6 +649,58 @@ } } + /* + * + * SELECT id, ( 6371 * acos( cos( radians(37) ) * cos( radians( lat ) ) * + cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * + sin( radians( lat ) ) ) ) AS distance FROM your_table_name HAVING + distance < 25 ORDER BY distance LIMIT 0 , 20; + * */ + public List getPoisAround(double lat, double lon, int limit) { + List poisAround = new ArrayList<>(); + SQLiteDatabase db = this.getReadableDatabase(); + for(int i=0; i getPoiByType(int _type){ List poiList = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java new file mode 100644 index 0000000..4ac7a50 --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java @@ -0,0 +1,63 @@ +package de.apps4ics.mountainnavigation.handlers; + +import android.os.AsyncTask; +import android.util.Log; + +import org.osmdroid.bonuspack.location.NominatimPOIProvider; +import org.osmdroid.bonuspack.location.POI; +import org.osmdroid.util.GeoPoint; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import de.apps4ics.mountainnavigation.MainActivity; +import de.apps4ics.mountainnavigation.pois.Poi; + +/** + * Created by Vinz on 11.03.2016. + */ +public class OsmHandler { + public static final String OSM_TYPE_PATH = "path"; + public static final String OSM_TYPE_SPRING = "spring"; + public static final String OSM_TYPE_STREAM = "stream"; + public static final String OSM_TYPE_PEAK = "peak"; + public static final String OSM_TYPE_WILD_HUT = "wilderness_hut"; + public static final String OSM_TYPE_ALP_HUT = "alpine_hut"; + public static final String OSM_TYPE_WATER = "water"; + public static final String OSM_TYPE_AERIALWAY = "aerialway"; + public static final String[] OSM_TYPES = new String[]{ OSM_TYPE_PATH, OSM_TYPE_SPRING, OSM_TYPE_STREAM, OSM_TYPE_PEAK, OSM_TYPE_WILD_HUT, OSM_TYPE_ALP_HUT, OSM_TYPE_WATER, OSM_TYPE_AERIALWAY }; + + public List getPoisAround(double lat, double lon, int limit) { + List poisAround = new ArrayList<>(); + for(String type : OSM_TYPES) { + try { + poisAround.addAll(new GetPoiFromOsm().execute(type).get()); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + return poisAround; + } +} + +class GetPoiFromOsm extends AsyncTask { + protected ArrayList doInBackground(String... params) { + try { + NominatimPOIProvider poiProvider = new NominatimPOIProvider(""); + ArrayList foundPois = poiProvider.getPOICloseTo(new GeoPoint(MainActivity.getLocation()), params[0], 50, 0.1); + return foundPois; + } catch (Exception e) { + return null; + } + } + + @Override + protected void onPostExecute(ArrayList arrayList) { + for(POI p : (ArrayList) arrayList) { + Log.d(MainActivity.TAG, p.mCategory + ", " + p.mType + ", " + p.mUrl); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java index e30d4d6..a32b781 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -84,6 +84,7 @@ private Resources res; private MapView mapView; private DatabaseHandler dbHandler; + private OsmHandler osmHandler; private Context context; private Activity activity; private FragmentManager fragmentManager; @@ -108,6 +109,7 @@ poiMarkers[i] = new ArrayList<>(); } dbHandler = new DatabaseHandler(context); + osmHandler = new OsmHandler(); this.context = context; this.res = res; this.mapView = mapView; @@ -220,24 +222,25 @@ while(it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); new GetPoiFromOsm().execute(entry.getKey()); + //TODO add to pois } } - public void getPoisAround(double lat, double lon) { - getPoisAround(lat, lon, -1); + public List getPoisAround(double lat, double lon) { + return getPoisAround(lat, lon, -1); } - public void getPoisAround(double lat, double lon, int limit) { - if(MainActivity.hasInternet()) getPoisAroundOnline(lat, lon, limit); - else getPoisAroundCached(lat, lon, limit); + public List getPoisAround(double lat, double lon, int limit) { + if(MainActivity.hasInternet()) return getPoisAroundOnline(lat, lon, limit); + else return getPoisAroundCached(lat, lon, limit); } - private void getPoisAroundOnline(double lat, double lon, int limit) { - + private List getPoisAroundOnline(double lat, double lon, int limit) { + return osmHandler.getPoisAround(lat, lon, limit); } - private void getPoisAroundCached(double lat, double lon, int limit) { - + private List getPoisAroundCached(double lat, double lon, int limit) { + return dbHandler.getPoisAround(lat, lon, limit); } public void getPoisAlong(double lat, double lon) { @@ -648,26 +651,6 @@ cursor.close(); return filePath; } - - class GetPoiFromOsm extends AsyncTask { - protected ArrayList doInBackground(String... params) { - try { - NominatimPOIProvider poiProvider = new NominatimPOIProvider(""); - ArrayList foundPois = poiProvider.getPOICloseTo(new GeoPoint(MainActivity.getLocation()), params[0], 50, 0.1); - pois.put(params[0], foundPois); - return foundPois; - } catch (Exception e) { - return null; - } - } - - @Override - protected void onPostExecute(ArrayList arrayList) { - for(POI p : (ArrayList) arrayList) { - Log.d(MainActivity.TAG, p.mCategory + ", " + p.mType + ", " + p.mUrl); - } - } - } } class UpdatePoiIconsAsyncTask extends AsyncTask, Void, List> {