@Override public void onListItemClick(ListView parent, View v, int position, long id) { final RouteInfoLocation item = ((TransportStopAdapter) getListAdapter()).getItem(position); Builder builder = new AlertDialog.Builder(this); List<String> items = new ArrayList<String>(); final List<TransportStop> stops = item.getDirection() ? item.getRoute().getForwardStops() : item.getRoute().getBackwardStops(); LatLon locationToGo = getLocationToGo(); LatLon locationToStart = getLocationToStart(); builder.setTitle( getString(R.string.transport_stop_to_go_out) + "\n" + getInformation(item, stops, getCurrentRouteLocation(), true)); // $NON-NLS-1$ int ind = 0; for (TransportStop st : stops) { StringBuilder n = new StringBuilder(50); n.append(ind++); if (st == item.getStop()) { n.append("!! "); // $NON-NLS-1$ } else { n.append(". "); // $NON-NLS-1$ } String name = st.getName(settings.usingEnglishNames()); if (locationToGo != null) { n.append(name).append(" - ["); // $NON-NLS-1$ n.append( OsmAndFormatter.getFormattedDistance( (int) MapUtils.getDistance(locationToGo, st.getLocation()), (ClientContext) getApplication())) .append("]"); // $NON-NLS-1$ } else if (locationToStart != null) { n.append("[") .append( OsmAndFormatter.getFormattedDistance( (int) MapUtils.getDistance(locationToStart, st.getLocation()), (ClientContext) getApplication())) .append("] - "); // $NON-NLS-1$ //$NON-NLS-2$ n.append(name); } else { n.append(name); } items.add(n.toString()); } builder.setItems( items.toArray(new String[items.size()]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int i = which; if (i >= 0) { TransportStop stop = stops.get(i); showContextMenuOnStop(stop, item, i); } } }); builder.show(); }
public String getInformation( RouteInfoLocation route, List<TransportStop> stops, int position, boolean part) { StringBuilder text = new StringBuilder(200); double dist = 0; int ind = 0; int stInd = stops.size(); int eInd = stops.size(); for (TransportStop s : stops) { if (s == route.getStart()) { stInd = ind; } if (s == route.getStop()) { eInd = ind; } if (ind > stInd && ind <= eInd) { dist += MapUtils.getDistance(stops.get(ind - 1).getLocation(), s.getLocation()); } ind++; } text.append(getString(R.string.transport_route_distance)) .append(" ") .append( OsmAndFormatter.getFormattedDistance( (int) dist, (ClientContext) getApplication())); // $NON-NLS-1$/ if (!part) { text.append(", ") .append(getString(R.string.transport_stops_to_pass)) .append(" ") .append(eInd - stInd); // $NON-NLS-1$ //$NON-NLS-2$ LatLon endStop = getEndStop(position - 1); if (endStop != null) { String before = OsmAndFormatter.getFormattedDistance( (int) MapUtils.getDistance(endStop, route.getStart().getLocation()), (ClientContext) getApplication()); text.append(", ") .append(getString(R.string.transport_to_go_before)) .append(" ") .append(before); // $NON-NLS-2$//$NON-NLS-1$ } LatLon stStop = getStartStop(position + 1); if (stStop != null) { String after = OsmAndFormatter.getFormattedDistance( (int) MapUtils.getDistance(stStop, route.getStop().getLocation()), (ClientContext) getApplication()); text.append(", ") .append(getString(R.string.transport_to_go_after)) .append(" ") .append(after); // $NON-NLS-1$ //$NON-NLS-2$ } } return text.toString(); }
@Override public int compare(GeocodingResult o1, GeocodingResult o2) { LatLon l1 = o1.getLocation(); LatLon l2 = o2.getLocation(); if (l1 == null || l2 == null) { return l2 == l1 ? 0 : (l1 == null ? -1 : 1); } return Double.compare( MapUtils.getDistance(l1, o1.searchPoint), MapUtils.getDistance(l2, o2.searchPoint)); }
@Override public void onZoomEnded(double relativeToStart, float angleRelative) { // 1.5 works better even on dm.density=1 devices float dz = (float) (Math.log(relativeToStart) / Math.log(2)) * 1.5f; setIntZoom(Math.round(dz) + initialViewport.getZoom()); if (Math.abs(angleRelative) < ANGLE_THRESHOLD) { angleRelative = 0; } rotateToAnimate(initialViewport.getRotate() + angleRelative); final int newZoom = getZoom(); if (application.getInternalAPI().accessibilityEnabled()) { if (newZoom != initialViewport.getZoom()) { showMessage(getContext().getString(R.string.zoomIs) + " " + newZoom); // $NON-NLS-1$ } else { final LatLon p1 = initialViewport.getLatLonFromPixel(x1, y1); final LatLon p2 = initialViewport.getLatLonFromPixel(x2, y2); showMessage( OsmAndFormatter.getFormattedDistance( (float) MapUtils.getDistance( p1.getLatitude(), p1.getLongitude(), p2.getLatitude(), p2.getLongitude()), application)); } } }
@Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; if (row == null) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.search_transport_list_item, parent, false); } LatLon locationToGo = getLocationToGo(); LatLon locationToStart = getLocationToStart(); TextView label = (TextView) row.findViewById(R.id.label); ImageView icon = (ImageView) row.findViewById(R.id.search_icon); RouteInfoLocation stop = getItem(position); TransportRoute route = stop.getRoute(); StringBuilder labelW = new StringBuilder(150); labelW.append(route.getType()).append(" ").append(route.getRef()); // $NON-NLS-1$ labelW.append(" - ["); // $NON-NLS-1$ if (locationToGo != null) { labelW.append( OsmAndFormatter.getFormattedDistance( stop.getDistToLocation(), (ClientContext) getApplication())); } else { labelW.append(getString(R.string.transport_search_none)); } labelW.append("]\n").append(route.getName(settings.usingEnglishNames())); // $NON-NLS-1$ // TODO icons if (locationToGo != null && stop.getDistToLocation() < 400) { icon.setImageResource(R.drawable.opened_poi); } else { icon.setImageResource(R.drawable.poi); } int dist = locationToStart == null ? 0 : (int) (MapUtils.getDistance(stop.getStart().getLocation(), locationToStart)); String distance = OsmAndFormatter.getFormattedDistance(dist, (ClientContext) getApplication()) + " "; //$NON-NLS-1$ label.setText(distance + labelW.toString(), TextView.BufferType.SPANNABLE); ((Spannable) label.getText()) .setSpan( new ForegroundColorSpan(getResources().getColor(R.color.color_distance)), 0, distance.length() - 1, 0); return (row); }
@Override public Node loadNode(Amenity n) { if (n.getId() % 2 == 1) { // that's way id return null; } long nodeId = n.getId() >> 1; try { String res = sendRequest( SITE_API + "api/0.6/node/" + nodeId, "GET", null, ctx.getString(R.string.loading_poi_obj) + nodeId, false); //$NON-NLS-1$ //$NON-NLS-2$ if (res != null) { OsmBaseStorage st = new OsmBaseStorage(); st.parseOSM( new ByteArrayInputStream(res.getBytes("UTF-8")), null, null, true); // $NON-NLS-1$ EntityId id = new Entity.EntityId(EntityType.NODE, nodeId); Node entity = (Node) st.getRegisteredEntities().get(id); entityInfo = st.getRegisteredEntityInfo().get(id); // check whether this is node (because id of node could be the same as relation) if (entity != null && MapUtils.getDistance(entity.getLatLon(), n.getLocation()) < 50) { return entity; } return null; } } catch (IOException e) { log.error("Loading node failed " + nodeId, e); // $NON-NLS-1$ AccessibleToast.makeText( ctx, ctx.getResources().getString(R.string.error_io_error), Toast.LENGTH_LONG) .show(); } catch (SAXException e) { log.error("Loading node failed " + nodeId, e); // $NON-NLS-1$ AccessibleToast.makeText( ctx, ctx.getResources().getString(R.string.error_io_error), Toast.LENGTH_LONG) .show(); } return null; }
public String getDistance(RoutePoint rp) { double d = MapUtils.getDistance(rp.getPoint(), getPoint()); String distance = OsmAndFormatter.getFormattedDistance((float) d, app); return distance; }
public void announceVisibleLocations() { Location lastKnownLocation = app.getRoutingHelper().getLastProjection(); if (lastKnownLocation != null && app.getRoutingHelper().isFollowingMode()) { for (int type = 0; type < locationPoints.size(); type++) { int currentRoute = route.getCurrentRoute(); List<LocationPointWrapper> approachPoints = new ArrayList<LocationPointWrapper>(); List<LocationPointWrapper> announcePoints = new ArrayList<LocationPointWrapper>(); List<LocationPointWrapper> lp = locationPoints.get(type); if (lp != null) { int kIterator = pointsProgress.get(type); while (kIterator < lp.size() && lp.get(kIterator).routeIndex < currentRoute) { kIterator++; } pointsProgress.set(type, kIterator); while (kIterator < lp.size()) { LocationPointWrapper lwp = lp.get(kIterator); if (route.getDistanceToPoint(lwp.routeIndex) > LONG_ANNOUNCE_RADIUS * 2) { break; } LocationPoint point = lwp.point; double d1 = Math.max( 0.0, MapUtils.getDistance( lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude(), point.getLatitude(), point.getLongitude()) - lwp.getDeviationDistance()); Integer state = locationPointsStates.get(point); if (state != null && state.intValue() == ANNOUNCED_ONCE && getVoiceRouter() .isDistanceLess(lastKnownLocation.getSpeed(), d1, SHORT_ANNOUNCE_RADIUS, 0f)) { locationPointsStates.put(point, ANNOUNCED_DONE); announcePoints.add(lwp); } else if (type != ALARMS && (state == null || state == NOT_ANNOUNCED) && getVoiceRouter() .isDistanceLess(lastKnownLocation.getSpeed(), d1, LONG_ANNOUNCE_RADIUS, 0f)) { locationPointsStates.put(point, ANNOUNCED_ONCE); approachPoints.add(lwp); } else if (type == ALARMS && (state == null || state == NOT_ANNOUNCED) && getVoiceRouter() .isDistanceLess(lastKnownLocation.getSpeed(), d1, ALARMS_ANNOUNCE_RADIUS, 0f)) { locationPointsStates.put(point, ANNOUNCED_ONCE); approachPoints.add(lwp); } kIterator++; } if (!announcePoints.isEmpty()) { if (announcePoints.size() > ANNOUNCE_POI_LIMIT) { announcePoints = announcePoints.subList(0, ANNOUNCE_POI_LIMIT); } if (type == WAYPOINTS) { getVoiceRouter().announceWaypoint(announcePoints); } else if (type == POI) { getVoiceRouter().announcePoi(announcePoints); } else if (type == ALARMS) { // nothing to announce } else if (type == FAVORITES) { getVoiceRouter().announceFavorite(announcePoints); } } if (!approachPoints.isEmpty()) { if (approachPoints.size() > APPROACH_POI_LIMIT) { approachPoints = approachPoints.subList(0, APPROACH_POI_LIMIT); } if (type == WAYPOINTS) { getVoiceRouter().approachWaypoint(lastKnownLocation, approachPoints); } else if (type == POI) { getVoiceRouter().approachPoi(lastKnownLocation, approachPoints); } else if (type == ALARMS) { EnumSet<AlarmInfoType> ait = EnumSet.noneOf(AlarmInfoType.class); for (LocationPointWrapper pw : approachPoints) { ait.add(((AlarmInfo) pw.point).getType()); } for (AlarmInfoType t : ait) { app.getRoutingHelper().getVoiceRouter().announceAlarm(t); } } else if (type == FAVORITES) { getVoiceRouter().approachFavorite(lastKnownLocation, approachPoints); } } } } } }
private List<GeocodingResult> loadStreetBuildings( final GeocodingResult road, BinaryMapIndexReader reader, GeocodingResult street) throws IOException { final List<GeocodingResult> streetBuildings = new ArrayList<GeocodingResult>(); reader.preloadBuildings(street.street, null); log.info( "Preload buildings " + street.street.getName() + " " + street.city.getName() + " " + street.street.getId()); for (Building b : street.street.getBuildings()) { if (b.getLatLon2() != null) { double slat = b.getLocation().getLatitude(); double slon = b.getLocation().getLongitude(); double tolat = b.getLatLon2().getLatitude(); double tolon = b.getLatLon2().getLongitude(); double coeff = MapUtils.getProjectionCoeff( road.searchPoint.getLatitude(), road.searchPoint.getLongitude(), slat, slon, tolat, tolon); double plat = slat + (tolat - slat) * coeff; double plon = slon + (tolon - slon) * coeff; if (MapUtils.getDistance(road.searchPoint, plat, plon) < DISTANCE_BUILDING_PROXIMITY) { GeocodingResult bld = new GeocodingResult(street); bld.building = b; bld.connectionPoint = b.getLocation(); streetBuildings.add(bld); if (!Algorithms.isEmpty(b.getName2())) { int fi = Algorithms.extractFirstIntegerNumber(b.getName()); int si = Algorithms.extractFirstIntegerNumber(b.getName2()); if (si != 0 && fi != 0) { int num = (int) (fi + (si - fi) * coeff); BuildingInterpolation type = b.getInterpolationType(); if (type == BuildingInterpolation.EVEN || type == BuildingInterpolation.ODD) { if (num % 2 == (type == BuildingInterpolation.EVEN ? 1 : 0)) { num--; } } else if (b.getInterpolationInterval() > 0) { int intv = b.getInterpolationInterval(); if ((num - fi) % intv != 0) { num = ((num - fi) / intv) * intv + fi; } } bld.buildingInterpolation = num + ""; } } } } else if (MapUtils.getDistance(b.getLocation(), road.searchPoint) < DISTANCE_BUILDING_PROXIMITY) { GeocodingResult bld = new GeocodingResult(street); bld.building = b; bld.connectionPoint = b.getLocation(); streetBuildings.add(bld); } } return streetBuildings; }
public double getDistance() { if (dist == -1 && connectionPoint != null && searchPoint != null) { dist = MapUtils.getDistance(connectionPoint, searchPoint); } return dist; }
@Override public View getView(final int position, View convertView, ViewGroup parent) { View row = convertView; final RouteInfoLocation info = getItem(position); if (info == null) { TextView text = new TextView(getContext()); LatLon st = getStartStop(position + 1); LatLon end = getEndStop(position - 1); if (st != null && end != null) { int dist = (int) MapUtils.getDistance(st, end); text.setText( MessageFormat.format( getString(R.string.transport_searching_route), OsmAndFormatter.getFormattedDistance(dist, (ClientContext) getApplication()))); } else { text.setText(getString(R.string.transport_searching_transport)); } text.setTextSize(21); text.setTypeface(null, Typeface.ITALIC); text.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (intermediateListAdapater.getCount() > 1) { intermediateListAdapater.remove(null); searchTransport(); } else { if (selectedDestinationLocation == null) { selectedDestinationLocation = destinationLocation; } else { selectedDestinationLocation = null; } searchTransport(); } } }); return text; } int currentRouteLocation = getCurrentRouteLocation(); if (row == null || row instanceof TextView) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.search_transport_route_item, parent, false); } TextView label = (TextView) row.findViewById(R.id.label); ImageButton icon = (ImageButton) row.findViewById(R.id.remove); TransportRoute route = info.getRoute(); icon.setVisibility(View.VISIBLE); StringBuilder labelW = new StringBuilder(150); labelW.append(route.getType()).append(" ").append(route.getRef()); // $NON-NLS-1$ boolean en = settings.usingEnglishNames(); labelW .append(" : ") .append(info.getStart().getName(en)) .append(" - ") .append(info.getStop().getName(en)); // $NON-NLS-1$ //$NON-NLS-2$ // additional information if route is calculated if (currentRouteLocation == -1) { labelW.append(" ("); // $NON-NLS-1$ labelW .append(info.getStopNumbers()) .append(" ") .append(getString(R.string.transport_stops)) .append(", "); // $NON-NLS-1$ //$NON-NLS-2$ int startDist = (int) MapUtils.getDistance(getEndStop(position - 1), info.getStart().getLocation()); labelW .append(getString(R.string.transport_to_go_before)) .append(" ") .append( OsmAndFormatter.getFormattedDistance( startDist, (ClientContext) getApplication())); // $NON-NLS-1$ if (position == getCount() - 1) { LatLon stop = getStartStop(position + 1); if (stop != null) { int endDist = (int) MapUtils.getDistance(stop, info.getStop().getLocation()); labelW .append(", ") .append(getString(R.string.transport_to_go_after)) .append(" ") .append( OsmAndFormatter.getFormattedDistance( endDist, (ClientContext) getApplication())); // $NON-NLS-1$ //$NON-NLS-2$ } } labelW.append(")"); // $NON-NLS-1$ } label.setText(labelW.toString()); icon.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { int p = position; intermediateListAdapater.remove(null); if (!isRouteCalculated() && getCurrentRouteLocation() < p) { p--; } intermediateListAdapater.insert(null, p); intermediateListAdapater.remove(info); intermediateListAdapater.notifyDataSetChanged(); zoom = initialZoom; searchTransport(); } }); View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { showContextMenuOnRoute(info, position); } }; label.setOnClickListener(clickListener); return row; }