Android Open Source - aBusTripMK Bounding Box E6






From Project

Back to project page aBusTripMK.

License

The source code is released under:

GNU General Public License

If you think the Android project aBusTripMK 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

// Created by plusminus on 19:06:38 - 25.09.2008
package org.andnav.osm.util;
//from   w ww .  j  a v a 2 s.c o  m
import static org.andnav.osm.util.MyMath.gudermann;
import static org.andnav.osm.util.MyMath.gudermannInverse;

import java.util.ArrayList;

import org.andnav.osm.util.constants.OpenStreetMapConstants;
import org.andnav.osm.views.util.constants.OpenStreetMapViewConstants;

/**
 * 
 * @author Nicolas Gramlich
 *
 */
public class BoundingBoxE6 implements OpenStreetMapViewConstants, OpenStreetMapConstants {
        // ===========================================================
        // Constants
        // ===========================================================

        // ===========================================================
        // Fields
        // ===========================================================

        protected final int mLatNorthE6;
        protected final int mLatSouthE6;
        protected final int mLonEastE6;
        protected final int mLonWestE6;  

        // ===========================================================
        // Constructors
        // ===========================================================
        
        public BoundingBoxE6(final int northE6, final int eastE6, final int southE6, final int westE6){
                this.mLatNorthE6 = northE6;
                this.mLonEastE6 = eastE6;
                this.mLatSouthE6 = southE6;
                this.mLonWestE6 = westE6;
        }
        
        public BoundingBoxE6(final double north, final double east, final double south, final double west){
                this.mLatNorthE6 = (int)(north * 1E6);
                this.mLonEastE6 = (int)(east * 1E6);
                this.mLatSouthE6 = (int)(south * 1E6);
                this.mLonWestE6 = (int)(west * 1E6);
        }

        // ===========================================================
        // Getter & Setter
        // ===========================================================
        
        public int getDiagonalLengthInMeters() {
                return new GeoPoint(this.mLatNorthE6, this.mLonWestE6).distanceTo(new GeoPoint(this.mLatSouthE6, this.mLonEastE6));
        }
        
        public int getLatNorthE6() {
                return this.mLatNorthE6;
        }
        
        public int getLatSouthE6() {
                return this.mLatSouthE6;
        }
        
        public int getLonEastE6() {
                return this.mLonEastE6;
        }
        
        public int getLonWestE6() {
                return this.mLonWestE6;
        }

        public int getLatitudeSpanE6() {
                return Math.abs(this.mLatNorthE6 - this.mLatSouthE6);
        }
        
        public int getLongitudeSpanE6() {
                return Math.abs(this.mLonEastE6 - this.mLonWestE6);
        }
        /**
         * 
         * @param aLatitude
         * @param aLongitude
         * @param reuse
         * @return relative position determined from the upper left corner.<br />
         * {0,0} would be the upper left corner.
         * {1,1} would be the lower right corner.
         * {1,0} would be the lower left corner.
         * {0,1} would be the upper right corner. 
         */
        public float[] getRelativePositionOfGeoPointInBoundingBoxWithLinearInterpolation(final int aLatitude, final int aLongitude, final float[] reuse){
                float[] out = (reuse != null) ? reuse : new float[2];
                out[MAPTILE_LATITUDE_INDEX] = ((float)(this.mLatNorthE6 - aLatitude) / getLatitudeSpanE6());
                out[MAPTILE_LONGITUDE_INDEX] = 1 - ((float)(this.mLonEastE6 - aLongitude) / getLongitudeSpanE6());
                return out;
        }
        
        public float[] getRelativePositionOfGeoPointInBoundingBoxWithExactGudermannInterpolation(final int aLatitudeE6, final int aLongitudeE6, final float[] reuse){
                float[] out = (reuse != null) ? reuse : new float[2];
                out[MAPTILE_LATITUDE_INDEX] = (float)((gudermannInverse(this.mLatNorthE6 / 1E6) - gudermannInverse(aLatitudeE6 / 1E6)) / (gudermannInverse(this.mLatNorthE6 / 1E6) - gudermannInverse(this.mLatSouthE6 / 1E6)));
                out[MAPTILE_LONGITUDE_INDEX] = 1 - ((float)(this.mLonEastE6 - aLongitudeE6) / getLongitudeSpanE6());
                return out;
        }
        
        public GeoPoint getGeoPointOfRelativePositionWithLinearInterpolation(final float relX, final float relY) {              
                
                int lat = (int)(this.mLatNorthE6 - (this.getLatitudeSpanE6() * relY));
                                                        
                int lon = (int)(this.mLonWestE6 + (this.getLongitudeSpanE6() * relX));
                
                /* Bring into bounds. */
                while(lat > 90500000)
                        lat -= 90500000;
                while(lat < -90500000)
                        lat += 90500000;
                
                /* Bring into bounds. */
                while(lon > 180000000)
                        lon -= 180000000;
                while(lon < -180000000)
                        lon += 180000000;
                
                return new GeoPoint(lat, lon);
        }
        
        public GeoPoint getGeoPointOfRelativePositionWithExactGudermannInterpolation(final float relX, final float relY) {              
                
                final double gudNorth = gudermannInverse(this.mLatNorthE6 / 1E6);
                final double gudSouth = gudermannInverse(this.mLatSouthE6 / 1E6);
                final double latD = gudermann((gudSouth + (1-relY) * (gudNorth - gudSouth)));
                int lat = (int)(latD * 1E6);
                                                        
                int lon = (int)((this.mLonWestE6 + (this.getLongitudeSpanE6() * relX)));
                
                /* Bring into bounds. */
                while(lat > 90500000)
                        lat -= 90500000;
                while(lat < -90500000)
                        lat += 90500000;
                
                /* Bring into bounds. */
                while(lon > 180000000)
                        lon -= 180000000;
                while(lon < -180000000)
                        lon += 180000000;
                
                return new GeoPoint(lat, lon);
        }

        // ===========================================================
        // Methods from SuperClass/Interfaces
        // ===========================================================
        
        @Override
        public String toString(){
                return new StringBuffer()
                        .append("N:").append(this.mLatNorthE6)
                        .append("; E:").append(this.mLonEastE6)
                        .append("; S:").append(this.mLatSouthE6)
                        .append("; W:").append(this.mLonWestE6)
                        .toString();
        }

        // ===========================================================
        // Methods
        // ===========================================================

        public static BoundingBoxE6 fromGeoPoints(final ArrayList<? extends GeoPoint> partialPolyLine) {
                int minLat = Integer.MAX_VALUE;
                int minLon = Integer.MAX_VALUE;
                int maxLat = Integer.MIN_VALUE;
                int maxLon = Integer.MIN_VALUE;
                for (GeoPoint gp : partialPolyLine) {
                        final int latitudeE6 = gp.getLatitudeE6();
                        final int longitudeE6 = gp.getLongitudeE6();
                        
                        minLat = Math.min(minLat, latitudeE6);
                        minLon = Math.min(minLon, longitudeE6);
                        maxLat = Math.max(maxLat, latitudeE6);
                        maxLon = Math.max(maxLon, longitudeE6);
                }
                
                return new BoundingBoxE6(minLat, minLon, maxLat, maxLon);
        }

        // ===========================================================
        // Inner and Anonymous Classes
        // ===========================================================
}




Java Source Code List

com.app.busmk.DataBaseHelper.java
com.app.busmk.MyOverLay.java
com.app.busmk.a12.java
com.app.busmk.a15.java
com.app.busmk.a19.java
com.app.busmk.a22.java
com.app.busmk.a24.java
com.app.busmk.a2.java
com.app.busmk.a3.java
com.app.busmk.a41.java
com.app.busmk.a5.java
com.app.busmk.a65b.java
com.app.busmk.a7.java
com.app.busmk.a8.java
com.app.busmk.about.java
com.app.busmk.baraj_lista.java
com.app.busmk.baraj_mapa.java
com.app.busmk.main.java
com.app.busmk.main_menu.java
com.app.busmk.other.java
com.app.busmk.splash.java
org.andnav.osm.exceptions.EmptyCacheException.java
org.andnav.osm.services.OpenStreetMapTileProviderService.java
org.andnav.osm.services.util.OpenStreetMapAsyncTileProvider.java
org.andnav.osm.services.util.OpenStreetMapTileDownloader.java
org.andnav.osm.services.util.OpenStreetMapTileFilesystemProvider.java
org.andnav.osm.services.util.OpenStreetMapTileProviderDataBase.java
org.andnav.osm.services.util.OpenStreetMapTile.java
org.andnav.osm.services.util.StreamUtils.java
org.andnav.osm.services.util.constants.OpenStreetMapServiceConstants.java
org.andnav.osm.util.BoundingBoxE6.java
org.andnav.osm.util.GeoPoint.java
org.andnav.osm.util.MyMath.java
org.andnav.osm.util.NetworkLocationIgnorer.java
org.andnav.osm.util.constants.GeoConstants.java
org.andnav.osm.util.constants.OpenStreetMapConstants.java
org.andnav.osm.views.OpenStreetMapViewController.java
org.andnav.osm.views.OpenStreetMapView.java
org.andnav.osm.views.overlay.MyLocationOverlay.java
org.andnav.osm.views.overlay.OpenStreetMapTilesOverlay.java
org.andnav.osm.views.overlay.OpenStreetMapViewItemizedOverlay.java
org.andnav.osm.views.overlay.OpenStreetMapViewOverlayItem.java
org.andnav.osm.views.overlay.OpenStreetMapViewOverlay.java
org.andnav.osm.views.util.HttpUserAgentHelper.java
org.andnav.osm.views.util.LRUMapTileCache.java
org.andnav.osm.views.util.Mercator.java
org.andnav.osm.views.util.MyMath.java
org.andnav.osm.views.util.OpenStreetMapRendererInfo.java
org.andnav.osm.views.util.OpenStreetMapTileCache.java
org.andnav.osm.views.util.OpenStreetMapTileProvider.java
org.andnav.osm.views.util.constants.MathConstants.java
org.andnav.osm.views.util.constants.OpenStreetMapViewConstants.java