package com.mapbox.mapboxsdk.util;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.mapbox.mapboxsdk.api.ILatLng;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.constants.MathConstants;
import com.mapbox.mapboxsdk.exceptions.MissingTokenException;
public class MapboxUtils implements MapboxConstants {
private static final String TAG = "MapboxUtils";
// Access Token For V4 of API. If it doesn't exist an exception will be thrown
private static String accessToken = null;
private static String versionNumber;
public static String getAccessToken() {
if (TextUtils.isEmpty(accessToken)) {
Log.e(TAG, "Missing Token", new MissingTokenException());
return null;
}
return accessToken;
}
public static void setAccessToken(String accessToken) {
MapboxUtils.accessToken = accessToken;
}
public static String getVersionNumber() {
return versionNumber;
}
public static void setVersionNumber(String versionNumber) {
MapboxUtils.versionNumber = versionNumber;
}
public static String getUserAgent() {
StringBuffer sb = new StringBuffer("Mapbox Android SDK");
if (getVersionNumber() != null) {
sb.append("/");
sb.append(getVersionNumber());
}
return sb.toString();
}
public static String qualityExtensionForImageQuality(RasterImageQuality imageQuality) {
String qualityExtension;
switch (imageQuality) {
case MBXRasterImageQualityPNG32:
qualityExtension = "png32";
break;
case MBXRasterImageQualityPNG64:
qualityExtension = "png64";
break;
case MBXRasterImageQualityPNG128:
qualityExtension = "png128";
break;
case MBXRasterImageQualityPNG256:
qualityExtension = "png256";
break;
case MBXRasterImageQualityJPEG70:
qualityExtension = "jpg70";
break;
case MBXRasterImageQualityJPEG80:
qualityExtension = "jpg80";
break;
case MBXRasterImageQualityJPEG90:
qualityExtension = "jpg90";
break;
case MBXRasterImageQualityFull:
default:
qualityExtension = "png";
break;
}
return qualityExtension;
}
public static String markerIconURL(Context context, String size, String symbol, String color) {
// Make a string which follows the Mapbox Core API spec for stand-alone markers. This relies on the Mapbox API
// for error checking.
//
StringBuffer marker = new StringBuffer("pin-");
if (size.toLowerCase(MapboxConstants.MAPBOX_LOCALE).charAt(0) == 'l') {
marker.append("l"); // large
} else if (size.toLowerCase(MapboxConstants.MAPBOX_LOCALE).charAt(0) == 's') {
marker.append("s"); // small
} else {
marker.append("m"); // default to medium
}
if (!TextUtils.isEmpty(symbol)) {
marker.append(String.format("-%s+", symbol));
} else {
marker.append("+");
}
marker.append(color.replaceAll("#", ""));
// if (AppUtils.isRunningOn2xOrGreaterScreen(context)) {
// marker.append("@2x");
// }
marker.append(".png");
marker.append("?access_token=");
marker.append(MapboxUtils.getAccessToken());
return String.format(MAPBOX_LOCALE, MapboxConstants.MAPBOX_BASE_URL_V4 + "marker/%s", marker);
}
public static String getMapTileURL(Context context, String mapID, int zoom, int x, int y, RasterImageQuality imageQuality) {
return (new StringBuilder(MAPBOX_BASE_URL_V4)).append(mapID).append('/').append(zoom).append('/').append(x).append('/').append(y).append('.').
append(MapboxUtils.qualityExtensionForImageQuality(imageQuality)).append("?access_token=").append(MapboxUtils.getAccessToken()).toString();
}
/**
* Build a UTFGrid string for given Coordinate and Zoom Level
* @param latLng Geo Coordinate
* @param zoom Zoom Level
* @return UTFGrid String (z/x/y)
*/
public static String getUTFGridString(ILatLng latLng, int zoom) {
int tilesPerSide = Double.valueOf(Math.pow(2.0, zoom)).intValue();
int x = Double.valueOf(Math.floor(((latLng.getLongitude() + 180.0) / 360.0) * tilesPerSide)).intValue();
int y = Double.valueOf(Math.floor((1.0 - (Math.log(Math.tan(latLng.getLatitude() * MathConstants.PI / 180.0) + 1.0 / Math.cos(latLng.getLatitude() * MathConstants.PI / 180.0)) / MathConstants.PI)) / 2.0 * tilesPerSide)).intValue();
return String.format("%d/%d/%d", zoom, x, y);
}
}