搜索將WGS84座標系中的點轉換爲Google地圖中的地圖位置(像素位置)的一些示例代碼,同樣支持縮放級別。WGS84到Google地圖位置和返回的Java代碼
如果代碼評論得很好,那麼它也可以是其他語言。
您還可以點我一個開源Java項目:)
發現的一些資源:
OpenLayer實施。
JOSM項目
優秀Java Map Projection Library從JH LABS。這是一個純java PROJ.4端口。從WGS84投影到米。從那裏轉換米到像素是非常簡單的。
搜索將WGS84座標系中的點轉換爲Google地圖中的地圖位置(像素位置)的一些示例代碼,同樣支持縮放級別。WGS84到Google地圖位置和返回的Java代碼
如果代碼評論得很好,那麼它也可以是其他語言。
您還可以點我一個開源Java項目:)
發現的一些資源:
OpenLayer實施。
JOSM項目
優秀Java Map Projection Library從JH LABS。這是一個純java PROJ.4端口。從WGS84投影到米。從那裏轉換米到像素是非常簡單的。
Tile utility code in Java上mapki.com(對於谷歌地圖開發者巨大的資源)
有人從谷歌地圖拿着JavaScript代碼,並將其移植到Python:gmerc.py
我用這個和它的偉大工程。
下面是JavaScript中的功能......作爲從的OpenLayers
提取function toMercator (lon, lat) {
var x = lon * 20037508.34/180;
var y = Math.log(Math.tan((90 + lat) * Math.PI/360))/(Math.PI/180);
y = y * 20037508.34/180;
return [x, y];
}
function inverseMercator (x, y) {
var lon = (x/20037508.34) * 180;
var lat = (y/20037508.34) * 180;
lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI/180)) - Math.PI/2);
return [lon, lat];
}
相當簡單轉換成Java
我移植這PHP - 這裏的代碼,如果有人需要它:
要麥卡托:
$lon = ($lon * 20037508.34)/180;
$lat = log(tan((90 + $lat) * M_PI/360))/(M_PI/180);
$lat = $lat * 20037508.34/180;
從墨卡託:
$lon = ($lon/20037508.34) * 180;
$lat = ($lat/20037508.34) * 180;
$lat = 180/M_PI * (2 * atan(exp($lat * M_PI/180)) - M_PI/2);
/*
* Utility functions to transform between wgs84 and google projection coordinates
* Derived from openmap http://openmap.bbn.com/
*/
public class MercatorTransform {
public final static double NORTH_POLE = 90.0;
public final static double SOUTH_POLE = -NORTH_POLE;
public final static double DATELINE = 180.0;
public final static double LON_RANGE = 360.0;
final public static transient double wgs84_earthEquatorialRadiusMeters_D = 6378137.0;
private static double latfac = wgs84_earthEquatorialRadiusMeters_D;
private static double lonfac = wgs84_earthEquatorialRadiusMeters_D;
final public static transient double HALF_PI_D = Math.PI/2.0d;
/**
* Returns google projection coordinates from wgs84 lat,long coordinates
*/
public static double[] forward(double lat, double lon) {
lat = normalizeLatitude(lat);
lon = wrapLongitude(lon);
double latrad = Math.toRadians(lat);
double lonrad = Math.toRadians(lon);
double lat_m = latfac * Math.log(Math.tan(((latrad + HALF_PI_D)/2d)));
double lon_m = lonfac * lonrad;
double[] x = { lon_m, lat_m };
return x;
}
/**
* Returns wgs84 lat,long coordinates from google projection coordinates
*/
public static float[] inverse(float lon_m, float lat_m) {
double latrad = (2d * Math.atan(Math.exp(lat_m/latfac))) - HALF_PI_D;
double lonrad = lon_m/lonfac;
double lat = Math.toDegrees(latrad);
double lon = Math.toDegrees(lonrad);
lat = normalizeLatitude(lat);
lon = wrapLongitude(lon);
float[] x = { (float) lat, (float) lon };
return x;
}
private static double wrapLongitude(double lon) {
if ((lon < -DATELINE) || (lon > DATELINE)) {
lon += DATELINE;
lon = lon % LON_RANGE;
lon = (lon < 0) ? DATELINE + lon : -DATELINE + lon;
}
return lon;
}
private static double normalizeLatitude(double lat) {
if (lat > NORTH_POLE) {
lat = NORTH_POLE;
}
if (lat < SOUTH_POLE) {
lat = SOUTH_POLE;
}
return lat;
}
}
我已經看到一些公式將W GS84到EPSG 3785,他們也問半球和時區(子午線)? – 2013-06-06 02:49:34
我用wayback機器找到了它:http://web.archive.org/web/20110809084551/http://mapki.com/wiki/Tile_utility_code_in_Java – 2013-03-05 15:50:34