/** * 各地图API坐标系统比较与转换; * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,谷歌地图采用的是WGS84地理坐标系(中国范围除外); * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。谷歌中国地图和搜搜中国地图、高德采用的是GCJ02地理坐标系; * BD09坐标系:即百度坐标系。 */ public class PositionUtil { public static final String BAIDU_LBS_TYPE = "bd09ll"; public static double pi = 3.1415926535897932384626; public static double a = 6378245.0; public static double ee = 0.00669342162296594323; /** * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System * * @param lat * @param lon * @return */ public static Gps gps84_To_Gcj02(double lat, double lon) { if (outOfChina(lat, lon)) { return null; } double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 * pi; double magic = Math.sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = Math.sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); double mgLat = lat + dLat; double mgLon = lon + dLon; return new Gps(mgLat, mgLon); } /** * * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return * */ public static Gps gcj_To_Gps84(double lat, double lon) { Gps gps = transform(lat, lon); double lontitude = lon * 2 - gps.getWgLon(); double latitude = lat * 2 - gps.getWgLat(); return new Gps(latitude, lontitude); } /** * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标 * * @param gg_lat * @param gg_lon */ public static Gps gcj02_To_Bd09(double gg_lat, double gg_lon) { double x = gg_lon, y = gg_lat; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); double bd_lon = z * Math.cos(theta) + 0.0065; double bd_lat = z * Math.sin(theta) + 0.006; return new Gps(bd_lat, bd_lon); } /** * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param * bd_lat * @param bd_lon * @return */ public static Gps bd09_To_Gcj02(double bd_lat, double bd_lon) { double x = bd_lon - 0.0065, y = bd_lat - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); double gg_lon = z * Math.cos(theta); double gg_lat = z * Math.sin(theta); return new Gps(gg_lat, gg_lon); } /** * (BD-09)-->84 * @param bd_lat * @param bd_lon * @return */ public static Gps bd09_To_Gps84(double bd_lat, double bd_lon) { Gps gcj02 = PositionUtil.bd09_To_Gcj02(bd_lat, bd_lon); Gps map84 = PositionUtil.gcj_To_Gps84(gcj02.getWgLat(), gcj02.getWgLon()); return map84; } public static boolean outOfChina(double lat, double lon) { if (lon < 72.004 || lon > 137.8347) return true; if (lat < 0.8293 || lat > 55.8271) return true; return false; } public static Gps transform(double lat, double lon) { if (outOfChina(lat, lon)) { return new Gps(lat, lon); } double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 * pi; double magic = Math.sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = Math.sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); double mgLat = lat + dLat; double mgLon = lon + dLon; return new Gps(mgLat, mgLon); } public static double transformLat(double x, double y) { double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x)); ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; return ret; } public static double transformLon(double x, double y) { double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x)); ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0; return ret; } public static void main(String[] args) { // double lng = 113.595; // double lat = 22.7444444; double lng = 113.013832; double lat = 25.408752; // 北斗芯片获取的经纬度为WGS84地理坐标 31.426896,119.496145 Gps gps = new Gps(lat, lng); System.out.println("gps :" + gps); Gps gcj = gps84_To_Gcj02(gps.getWgLat(), gps.getWgLon()); System.out.println("gcj :" + gcj); Gps star = gcj_To_Gps84(gcj.getWgLat(), gcj.getWgLon()); System.out.println("star:" + star); Gps bd = gcj02_To_Bd09(gcj.getWgLat(), gcj.getWgLon()); System.out.println("bd :" + bd); Gps gcj2 = bd09_To_Gcj02(bd.getWgLat(), bd.getWgLon()); System.out.println("gcj :" + gcj2); } }
public class Gps { private double wgLat; private double wgLon; public Gps(double wgLat, double wgLon) { setWgLat(wgLat); setWgLon(wgLon); } public double getWgLat() { return wgLat; } public void setWgLat(double wgLat) { this.wgLat = wgLat; } public double getWgLon() { return wgLon; } public void setWgLon(double wgLon) { this.wgLon = wgLon; } @Override public String toString() { return "wgLat:"+wgLat + ",wgLat:" + wgLon; } }
相关推荐
* 各地图API坐标系统比较与转换; * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, * 谷歌地图采用的是WGS84地理坐标系(中国范围除外); ...
* 各地图API坐标系统比较与转换; * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, * 谷歌地图采用的是WGS84地理坐标系(中国范围除外); * ...
本文将详细探讨“百度地图API地址批量转换坐标”的概念、功能以及如何利用它进行坐标转换,同时也涉及到与之相关的Excel上传和地图撒点功能。 首先,让我们了解什么是百度地图API。百度地图API是百度提供的一套接口...
% * 各地图API坐标系统比较与转换; % * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, % * 谷歌地图采用的是WGS84地理坐标系(中国范围除外); ...
这里的主题聚焦于地图API中的坐标转换,涉及到WGS84、GCJ02和BD-09三种不同的坐标系,这些都是中国及全球范围内广泛使用的坐标系统。 首先,WGS84(World Geodetic System 1984)是全球定位系统(GPS)所采用的标准...
各地图API坐标系统比较与转换; WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, 谷歌地图采用的是WGS84地理坐标系(中国范围除外); GCJ02坐标...
2. **反地理编码**:与地理编码相反,将坐标转换为地址的过程。当用户点击地图上的某个位置,我们可以获取到该位置的坐标,然后通过反地理编码得到具体的街道地址。 **三、创建HTML应用** 在提供的`index.html`...
在实际应用中,这两个函数可以结合使用,帮助开发者在使用百度地图API时,正确地处理从外部数据源获取的地理坐标,或是在需要将结果显示在其他支持WGS84标准的地图平台上时,将百度地图坐标转换回去。 在Matlab中,...
在本案例中,"js百度地图api坐标地址标注功能"是指利用百度地图API来实现在地图上进行坐标定位并标注地址的功能。这个功能允许用户在地图上看到特定坐标点,并且这些标注可以具有交互性,如拖拽、改变大小、最小化、...
百度地图提供了JavaScript API,其中包含了坐标转换的功能。通过引入百度地图的JS库,我们可以直接调用`BMap.Convertor.translate`方法进行坐标转换。这个方法接受一个数组参数,包含待转换的坐标点,以及一个回调...
在C#中,可以调用相应的API进行坐标转换,例如使用proj4sharp库来实现投影转换。转换过程可能需要结合客户提供的转换参数,确保数据准确无误地转换到目标坐标系。 三、数据格式转换 1. SHP到GeoJSON转换 SHAP...
本篇文章将深入探讨proj4js如何帮助我们实现本地坐标与天地图坐标系统的无缝对接,以及如何利用其核心功能来完成坐标转换。 首先,我们要理解proj4js的核心概念。Proj4js基于proj4库,这是一个广泛使用的开源项目,...
总的来说,理解和运用ArcEngine进行坐标转换,不仅需要熟悉GIS的基本概念,还要掌握C#编程和ArcEngine API的使用,这样才能有效地进行地图坐标与平面坐标的互换,并在应用中正确地显示这些坐标。
- 接收到位置信息后,可以通过腾讯地图API的接口将这些坐标转换为腾讯地图的坐标系统,以便在腾讯地图上正确显示。 - 最后,使用转换后的坐标在地图上标记出用户的位置,或者执行其他基于位置的操作。 5. **注意...
在本文中,我们将深入探讨如何使用百度地图API来实现一系列关键功能,包括连接多个坐标以形成轨迹、坐标拾取、以及创建带有信息窗口的多个标注点。这些功能在Web应用开发、JavaScript工具包、企业应用以及GIS/地图/...
从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错误的! 从 CLLocationManager 取出来的经纬度去 Google Maps API 做逆地址解析,当然是错的! 从 MKMapView 取出来的... 灵图51ditu地图API 火星坐标
各地图工具都有坐标转换 API 可用,但是成千上万的 GPS 数据通过 API 转换是一件很消耗资源的事,所以需要提供一种离线转换的方式。 本人在项目中曾也用过 API 转换的方式,但是当设备数量一增加,在坐标转换这一个...
4. **API调用**:有些工具可能集成了一些地图服务商提供的API,直接通过网络请求实现坐标转换,但这种方法可能会受到API调用次数的限制。 使用"百度、高德,WGS84坐标批量转换工具",用户只需输入或导入包含待转换...
本研究标题为“基于Python的网络地图坐标转换方法研究”,该研究涉及的关键内容和知识点主要围绕如何使用Python语言进行不同网络地图坐标系统之间的转换。由于不同国家和地区使用的地图坐标系存在差异,为了确保坐标...
百度地图API提供了`geocoding`服务,可以将地址转换为经纬度坐标。使用`Geocoder`类的`getLocation`方法,可以获取到地址对应的地理位置信息,然后创建`Marker`进行标注。如果需要显示多个地址,只需多次调用`...