package com.nutiteq.advancedmap3;
import android.os.Bundle;
import com.nutiteq.core.MapPos;
import com.nutiteq.core.ScreenPos;
import com.nutiteq.datasources.BitmapOverlayRasterTileDataSource;
import com.nutiteq.graphics.Bitmap;
import com.nutiteq.layers.RasterTileLayer;
import com.nutiteq.layers.TileSubstitutionPolicy;
import com.nutiteq.projections.Projection;
import com.nutiteq.utils.BitmapUtils;
import com.nutiteq.wrappedcommons.MapPosVector;
import com.nutiteq.wrappedcommons.ScreenPosVector;
/*
* A sample demonstrating how to add ground level raster overlay. This samples
* adds additional raster layer on top of base layer, using NTBitmapOverlayRasterTileDataSource.
* Note: for really big overlays (containing 10000 pixels or more), Nutiteq SDK provides
* GDAL-based raster tile data source. This data source is not part of the standard SDK, it
* is an extra feature provided using GIS-extensions package.
*/
public class GroundOverlayActivity extends VectorMapSampleBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// MapSampleBaseActivity creates and configures mapView
super.onCreate(savedInstanceState);
Projection proj = mapView.getOptions().getBaseProjection();
// Load ground overlay bitmap
//Bitmap androidMarkerBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jefferson);
//com.nutiteq.graphics.Bitmap overlayBitmap = BitmapUtils.createBitmapFromAndroidBitmap(androidMarkerBitmap);
Bitmap overlayBitmap = BitmapUtils.loadBitmapFromAssets("jefferson-building-ground-floor.jpg", false);
// Create two vectors containing geographical positions and corresponding raster image pixel coordinates.
// 2, 3 or 4 points may be specified. Usually 2 points are enough (for conformal mapping).
MapPos pos = proj.fromWgs84(new MapPos(-77.004590, 38.888702));
double sizeNS = 110, sizeWE = 100;
MapPosVector mapPoses = new MapPosVector();
mapPoses.add(new MapPos(pos.getX()-sizeWE, pos.getY()+sizeNS));
mapPoses.add(new MapPos(pos.getX()+sizeWE, pos.getY()+sizeNS));
mapPoses.add(new MapPos(pos.getX()+sizeWE, pos.getY()-sizeNS));
mapPoses.add(new MapPos(pos.getX()-sizeWE, pos.getY()-sizeNS));
ScreenPosVector bitmapPoses = new ScreenPosVector();
bitmapPoses.add(new ScreenPos(0, 0));
bitmapPoses.add(new ScreenPos(0, overlayBitmap.getOrigHeight()));
bitmapPoses.add(new ScreenPos(overlayBitmap.getOrigWidth(), overlayBitmap.getOrigHeight()));
bitmapPoses.add(new ScreenPos(overlayBitmap.getOrigWidth(), 0));
// Create bitmap overlay raster tile data source
BitmapOverlayRasterTileDataSource rasterDataSource = new BitmapOverlayRasterTileDataSource(0, 20, overlayBitmap, proj, mapPoses, bitmapPoses);
RasterTileLayer rasterLayer = new RasterTileLayer(rasterDataSource);
mapView.getLayers().add(rasterLayer);
// Apply zoom level bias to the raster layer.
// By default, bitmaps are upsampled on high-DPI screens.
// We will correct this by applying appropriate bias
float zoomLevelBias = (float) (Math.log(mapView.getOptions().getDPI() / 160.0f) / Math.log(2));
rasterLayer.setZoomLevelBias(zoomLevelBias * 0.75f);
rasterLayer.setTileSubstitutionPolicy(TileSubstitutionPolicy.TILE_SUBSTITUTION_POLICY_VISIBLE);
mapView.setFocusPos(pos, 0);
mapView.setZoom(15.5f, 0);
}
}