/** * Queries the plan.epfl.ch website and return the results * * @param text the query. * @param max the maximum number of results. */ public static List<MapItem> searchTextOnEpflWebsite(String text, int max) { List<MapItem> list = new LinkedList<MapItem>(); URL searchUrl; try { searchUrl = new URL("http://plan.epfl.ch/search?keyword=" + URLEncoder.encode(text, "UTF-8")); } catch (MalformedURLException e) { e.printStackTrace(); return list; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return list; } Gson gson = new Gson(); try { InputStreamReader reader = new InputStreamReader(searchUrl.openStream()); BasicSearchResponse response = gson.fromJson(reader, BasicSearchResponse.class); if (response != null && response.features != null) { for (int i = 0; i < response.features.length && i < max; i++) { GeometryR geometry = response.features[i].geometry; SearchProperties properties = response.features[i].properties; if (geometry != null && properties != null) { String description = null; if (properties.room != null && properties.room.length() > 0) { description = properties.room; } double longitude = CoordinateConverter.convertEPSG4326ToLon(geometry.coordinates[0]); double latitude = CoordinateConverter.convertEPSG4326ToLat(geometry.coordinates[1]); MapItem mapItem = new MapItem(properties.text, latitude, longitude, -1, -1); if (description != null) { mapItem.setDescription(description); } try { int floor = Integer.parseInt(properties.floor); mapItem.setFloor(floor); } catch (Exception e) { } mapItem.setCategory(properties.category); list.add(mapItem); } } } } catch (Exception e) { e.printStackTrace(); return list; } return list; }
/** * Launch the map with the map element to be displayed * * @param mapItem a map element to be displayed. */ private void startMapActivity(MapItem mapItem) { trackEvent("SelectResult", mapItem.getTitle()); Intent startMapActivity = new Intent(this, MapMainView.class); startMapActivity.putExtra("MapElement", mapItem); startMapActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(startMapActivity); }
@Override public void searchResultsUpdated() { List<MapItem> results = mModel.getSearchResults(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.map_list); if (results.size() > 0) { for (MapItem meb : results) { adapter.add(meb.getTitle()); } parseAndDisplayResult(adapter, results); } else { mLayout.setText(getString(R.string.map_search_no_results)); } }