Android Open Source - geoar-app Data Sources Overlay






From Project

Back to project page geoar-app.

License

The source code is released under:

Apache License

If you think the Android project geoar-app 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 2012 52North Initiative for Geospatial Open Source Software GmbH
 */* w w w  .ja  va2  s  .  c o m*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.n52.geoar.map.view.overlay;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.mapsforge.android.maps.MapView;
import org.mapsforge.android.maps.Projection;
import org.mapsforge.android.maps.overlay.Overlay;
import org.mapsforge.core.GeoPoint;

import android.graphics.Canvas;
import android.graphics.Point;

import com.vividsolutions.jts.geom.Geometry;

/**
 * 
 * @author Arne de Wall <a.dewall@52North.org>
 * 
 */
public class DataSourcesOverlay extends Overlay {

    private static final Map<Class<? extends OverlayType<?>>, Class<? extends DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>> overlayClasses = new HashMap<Class<? extends OverlayType<?>>, Class<? extends DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>>() {
        private static final long serialVersionUID = 1L;
        {
            put(PointOverlayType.class, DataSourcePointOverlay.class);
            put(PolylineOverlayType.class, DataSourcePolylineOverlay.class);
            put(PolygonOverlayType.class, DataSourcePolygonOverlay.class);
        }
    };

    public interface OnOverlayItemTapListener {
        boolean onOverlayItemTap(OverlayType<? extends Geometry> item);
    }

    private Map<Object, Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>> overlayMap = Collections
            .synchronizedMap(new HashMap<Object, Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>>());

    private OnOverlayItemTapListener overlayItemTapListener;

    @Override
    protected void drawOverlayBitmap(Canvas canvas, Point drawPosition,
            Projection projection, byte zoomLevel) {

        for (Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMaps : overlayMap
                .values()) {
            for (DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dataSourceOverlay : classMaps
                    .values()) {
                dataSourceOverlay.drawOverlayBitmap(canvas, drawPosition,
                        projection, zoomLevel);
            }
        }
    }

    public void setOverlayItemTapListener(OnOverlayItemTapListener listener) {
        for (Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMaps : overlayMap
                .values()) {
            for (DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dataSourceOverlay : classMaps
                    .values()) {
                dataSourceOverlay.overlayItemTapListener = listener;
            }
        }
        overlayItemTapListener = listener;
    }

    /**
     * Removes all items from the overlay.
     */
    public void clear() {

        for (Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMaps : overlayMap
                .values()) {
            for (DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dataSourceOverlay : classMaps
                    .values()) {
                dataSourceOverlay.clear();
            }
            classMaps.clear();
        }

        overlayMap.clear();
    }

    public void clear(Object key) {
        overlayMap.remove(key);
        populate();
    }

    /**
     * Removes the given item from the overlay.
     * 
     * @param overlayItem
     *            the item that should be removed from the overlay.
     */
    public void removeItem(OverlayType<? extends Geometry> overlayItem) {

        for (Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMaps : overlayMap
                .values()) {
            for (DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dataSourceOverlay : classMaps
                    .values()) {
                dataSourceOverlay.removeOverlayType(overlayItem);
            }
        }

        populate();
    }

    @SuppressWarnings("unchecked")
    public void setOverlayItems(
            List<OverlayType<? extends Geometry>> overlayItems, Object key) {
        if (overlayItems == null || overlayItems.size() == 0)
            return;


        // Map
        Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMap = getClassMap(key);
        if (classMap == null) {
            classMap = createMap(
                    key,
                    (Class<? extends OverlayType<? extends Geometry>>) overlayItems //
                            .get(0).getClass()); //
        }

        DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dsOverlay = classMap
                .get(overlayItems.get(0).getClass());
        if (dsOverlay == null) {
            try {
                dsOverlay = overlayClasses.get(overlayItems.get(0).getClass())
                        .newInstance();
                dsOverlay.overlayItemTapListener = overlayItemTapListener;
                classMap.put((Class<? extends OverlayType<?>>) overlayItems
                        .get(0).getClass(), dsOverlay);
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        dsOverlay.addOverlayTypes(overlayItems);
        populate();
    }

    protected Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> getClassMap(
            Object key) {
        return overlayMap.get(key);
    }

    @SuppressWarnings("unchecked")
    protected Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> createMap(
            Object key, Class<? extends OverlayType<? extends Geometry>> class1) {
        if (overlayMap.get(key) == null) {
            Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> overlayTypeMap = new HashMap<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>();
            overlayMap.put(key, overlayTypeMap);
            return overlayTypeMap;
        }
        return overlayMap.get(key);
    }

    public void addOverlayItems(
            List<OverlayType<? extends Geometry>> overlayItems, Object key) {

        synchronized (this.overlayMap) {
            Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> classMap = overlayMap
                    .get(key);
            if (classMap == null) {
                classMap = new HashMap<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>>();
                this.overlayMap.put(key, classMap);
            }

            @SuppressWarnings("unchecked")
            Class<? extends OverlayType<?>> clazz = (Class<? extends OverlayType<?>>) overlayItems
                    .get(0).getClass();
            DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> dataSourceOverlay = classMap
                    .get(clazz);
            if (dataSourceOverlay == null) {
                try {
                    dataSourceOverlay = overlayClasses.get(clazz).newInstance();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }

            dataSourceOverlay.addOverlayTypes(overlayItems);
        }

        populate();
    }

    @Override
    public boolean onTap(GeoPoint geoPoint, MapView mapView) {
        for (Map<Class<? extends OverlayType<?>>, DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>>> map : overlayMap
                .values()) {
            for (DataSourceOverlay<? extends Geometry, ? extends OverlayType<?>> overlay : map
                    .values()) {
                if (overlayItemTapListener != null
                        && overlay.onTap(geoPoint, mapView)) {
                    return true;
                }
            }
        }

        return super.onTap(geoPoint, mapView);
    }

    protected void populate() {
        super.requestRedraw();
    }

}




Java Source Code List

.DataSourcesOverlay.java
.VisualizationOverlayItem.java
org.n52.geoar.AboutDialog.java
org.n52.geoar.DataSourceListAdapter.java
org.n52.geoar.GeoARActivity.java
org.n52.geoar.GeoARApplication.java
org.n52.geoar.ar.view.ARFragment.java
org.n52.geoar.ar.view.ARObject.java
org.n52.geoar.ar.view.ARView.java
org.n52.geoar.ar.view.DataSourceVisualizationHandler.java
org.n52.geoar.ar.view.IntroController.java
org.n52.geoar.ar.view.IntroViewer.java
org.n52.geoar.ar.view.gl.ARSurfaceViewRenderer.java
org.n52.geoar.ar.view.gl.ARSurfaceView.java
org.n52.geoar.ar.view.gl.GLESCamera.java
org.n52.geoar.ar.view.gl.MultisampleConfigs.java
org.n52.geoar.ar.view.gl.SurfaceTopology.java
org.n52.geoar.ar.view.overlay.ARCanvasSurfaceView.java
org.n52.geoar.ar.view.overlay.GUIDrawable.java
org.n52.geoar.ar.view.overlay.Radar.java
org.n52.geoar.exception.UnsupportedGeometryType.java
org.n52.geoar.map.view.DataSourceOverlayHandler.java
org.n52.geoar.map.view.GeoARMapView.java
org.n52.geoar.map.view.MapActivityContext.java
org.n52.geoar.map.view.MapFragment.java
org.n52.geoar.map.view.overlay.DataSourceOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePointOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolygonOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolylineOverlay.java
org.n52.geoar.map.view.overlay.DataSourcesOverlay.java
org.n52.geoar.map.view.overlay.OverlayType.java
org.n52.geoar.map.view.overlay.PointOverlayType.java
org.n52.geoar.map.view.overlay.PolygonOverlayType.java
org.n52.geoar.map.view.overlay.PolylineOverlayType.java
org.n52.geoar.newdata.CheckList.java
org.n52.geoar.newdata.DataCache.java
org.n52.geoar.newdata.DataSourceHolder.java
org.n52.geoar.newdata.DataSourceInstanceHolder.java
org.n52.geoar.newdata.DataSourceInstanceSettingsDialogActivity.java
org.n52.geoar.newdata.InstalledPluginHolder.java
org.n52.geoar.newdata.PluginActivityContext.java
org.n52.geoar.newdata.PluginContext.java
org.n52.geoar.newdata.PluginDialogFragment.java
org.n52.geoar.newdata.PluginDownloadHolder.java
org.n52.geoar.newdata.PluginDownloader.java
org.n52.geoar.newdata.PluginFragment.java
org.n52.geoar.newdata.PluginGridAdapter.java
org.n52.geoar.newdata.PluginHolder.java
org.n52.geoar.newdata.PluginLoader.java
org.n52.geoar.newdata.PluginLogger.java
org.n52.geoar.newdata.PluginStateInputStream.java
org.n52.geoar.newdata.Tile.java
org.n52.geoar.settings.DateTimeSettingsViewField.java
org.n52.geoar.settings.DateUtils.java
org.n52.geoar.settings.NumberSettingsViewField.java
org.n52.geoar.settings.SettingsException.java
org.n52.geoar.settings.SettingsHelper.java
org.n52.geoar.settings.SettingsViewField.java
org.n52.geoar.settings.SettingsView.java
org.n52.geoar.settings.SpinnerSettingsViewField.java
org.n52.geoar.settings.StringSettingsViewField.java
org.n52.geoar.tracking.camera.CameraView.java
org.n52.geoar.tracking.camera.RealityCamera.java
org.n52.geoar.tracking.location.AdaptiveLowPassSensorBuffer.java
org.n52.geoar.tracking.location.LocationHandler.java
org.n52.geoar.tracking.location.LowPassSensorBuffer.java
org.n52.geoar.tracking.location.MeanSensorBuffer.java
org.n52.geoar.tracking.location.SensorBuffer.java
org.n52.geoar.view.InfoView.java
org.n52.geoar.view.geoar.CalibrationControlView.java
org.n52.geoar.view.geoar.Settings.java
org.n52.geoar.view.geoar.gl.mode.BilligerColorShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerLightShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerTextureShader.java
org.n52.geoar.view.geoar.gl.mode.BoundingBox.java
org.n52.geoar.view.geoar.gl.mode.FeatureShader.java
org.n52.geoar.view.geoar.gl.mode.PhongFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.RenderFeature2.java
org.n52.geoar.view.geoar.gl.mode.Spatial.java
org.n52.geoar.view.geoar.gl.mode.TextureFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.Texture.java
org.n52.geoar.view.geoar.gl.mode.features.CubeFeature2.java
org.n52.geoar.view.geoar.gl.mode.features.FlatCircleFeature.java
org.n52.geoar.view.geoar.gl.mode.features.HeightMapFeature.java
org.n52.geoar.view.geoar.gl.mode.features.NewGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.ReferencedGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.SphereFeature.java
org.n52.geoar.view.geoar.gl.mode.features.TriangleFeature.java