WGS84到Google地图位置和返回的Java代码

搜索一些示例代码,用于将WGS84坐标系中的点转换为Google地图中的地图位置(像素位置),同时支持缩放级别。

如果代码评论很好,那么它也可以使用其他语言。

您还可以向我指出一个开源Java项目:)

找到一些资源:

OpenLayer实现。

JOSM项目

来自JH LABS的优秀Java Map Projection Library 。 这是一个纯java PROJ.4端口。 是否从WGS84投影到米。 从那里将米转换为平铺像素非常简单。

mapki.com 上的Java中的平铺实用程序代码 (谷歌地图开发人员的优秀资源)

以下是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相当简单

GeoTools的代码可以转换为您可以想象的任何坐标系,也可以转换为Google Map的坐标系。 它也是开源的。 但是,还应该指出GeoTools是一个大型库,所以如果你正在寻找一些小巧,快捷和简单的东西,那么它可能就不可能了。

如果您要进行其他GIS /坐标转换等,我强烈推荐它。

如果您使用GeoTools或类似的东西,您可能也有兴趣知道Google Map坐标系称为EPSG 3785。

我把它移植到PHP – 这是代码,如果有人需要它:

对于墨卡托:

 $lon = ($lon * 20037508.34) / 180; $lat = log(tan((90 + $lat) * M_PI / 360)) / (M_PI / 180); $lat = $lat * 20037508.34 / 180; 

来自mercator:

 $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; } } 

有人从谷歌地图中获取了javascript代码并将其移植到python: gmerc.py

我用过这个,效果很好。