public synchronized Set<K> getTouched(final Geopoint tapped) {
        try (ContextLogger cLog = new ContextLogger(Log.LogLevel.DEBUG, "GeoItemLayer.getTouched")) {
            final ToScreenProjector toCoordFct;
            final IProviderGeoItemLayer<?> pl = this.providerLayer;
            if (pl != null) {
                toCoordFct = pl.getScreenCoordCalculator();
                final int[] projCoord = toCoordFct == null ? new int[]{-1, -1} : toCoordFct.project(tapped);
                Log.d("Touched: " + tapped + " at [" + projCoord[0] + ", " + projCoord[1] + "]");
            } else {
                toCoordFct = null;
            }
            cLog.add("scc=" + (toCoordFct != null));

            final Set<K> result = new HashSet<>();
            for (Map.Entry<K, Pair<GeoItem, Boolean>> entry : this.itemMap.entrySet()) {
                if (entry.getValue().second && entry.getValue().first.touches(tapped, toCoordFct)) {
                    result.add(entry.getKey());
                }
            }
            cLog.add("t:" + result.size() + "/" + this, itemMap.size());
            return result;
        }
    }
Gets a list of all objects touched by a given geopoint. Only visible objects are considered
main/src/main/java/cgeo/geocaching/unifiedmap/geoitemlayer/GeoItemLayer.java