• 5星
1.89MB u013883025 2021-06-29 13:32:19
• 5星
3.24MB weixin_40228600 2021-04-01 09:26:05
• js高德百度腾讯坐标系转换 坐标系转换

3星
4KB qq_26905845 2017-07-28 16:24:58
• 57KB weixin_38501810 2021-01-05 01:26:07
• WGS84(国际通用坐标系)GCJ02(中国火星坐标系，高德地图坐标系)BD09(百度地图坐标系)-matlab开发 matlab

4KB weixin_38587509 2021-05-29 09:41:07
• 2KB weixin_42997196 2018-10-14 09:28:52
• 4KB weixin_39840650 2019-08-11 01:03:23
• 1.获取真实坐标GPS wgs84转为gcj编码方式 positiontransform(array,manual){ //定义常量 var GPS = { PI : 3.14159265358979324, x_pi : 3.141592...
1.获取真实坐标GPS wgs84转为gcj编码方式
           positiontransform(array,manual){
//定义常量
var GPS = {
PI : 3.14159265358979324,
x_pi : 3.14159265358979324 * 3000.0 / 180.0,
//偏移计算
delta : function (lat, lon) {
var a = 6378245.0; //  a: 卫星椭球坐标投影到平面地图坐标系的投影因子。
var ee = 0.00669342162296594323; //  ee: 椭球的偏心率。
var dLat = this.transformLat(lon - 105.0, lat - 35.0);
var dLon = this.transformLon(lon - 105.0, lat - 35.0);
var radLat = lat / 180.0 * this.PI;
var magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);
return {'lat': dLat, 'lon': dLon};
},
gcj_encrypt : function ( wgsLat , wgsLon ) {
if (this.outOfChina(wgsLat, wgsLon))
return {'lat': wgsLat, 'lon': wgsLon};

var d = this.delta(wgsLat, wgsLon);
return {'lat' : wgsLat + d.lat,'lon' : wgsLon + d.lon};
},
outOfChina : function (lat, lon) {
if (lon < 72.004 || lon > 137.8347)
return true;
if (lat < 0.8293 || lat > 55.8271)
return true;
return false;
},
transformLat : function (x, y) {
var 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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;
return ret;
},
transformLon : function (x, y) {
var 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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;
return ret;
}
};
},

gcj坐标数组转换成高德/腾讯地图坐标系数组，array为需要转换的坐标数组，lineArr为转换后的数组
                var lineArr = [];
var lonMin = 1000,lonMax = 0,latMin = 1000,latMax = 0;
//坐标转换完之后构造坐标数组
for(let item of array){
var temp = GPS.gcj_encrypt(item.latitude, item.longitude);
// // 取小
lonMin = lonMin<temp.lon?lonMin:temp.lon;
lonMax = lonMax>temp.lon?lonMax:temp.lon;
latMin = latMin<temp.lat?latMin:temp.lat;
latMax = latMax>temp.lat?latMax:temp.lat;
//将高德坐标系转成
lineArr.push([
temp.lon,
temp.lat
])
};

3.高德/腾讯坐标系转换成百度坐标系，输入高德/腾讯坐标经纬度，返回百度坐标系的经纬度
                function qqMapTransBMap(lng, lat) {
let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
let x = lng;
let y = lat;
let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
let lngs = z * Math.cos(theta) + 0.0065;
let lats = z * Math.sin(theta) + 0.006;
return {
lon: lngs,
lat: lats
}
}

4.将百度地图经纬度转换为腾讯/高德地图经纬度，输入百度坐标系，返回高德/腾讯坐标系的经纬度
function bMapTransQQMap(lng, lat) {
let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
let x = lng - 0.0065;
let y = lat - 0.006;
let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
let lngs = z * Math.cos(theta);
let lats = z * Math.sin(theta);

return {
lng: lngs,
lat: lats
}
}

展开全文
qq_42484025 2019-11-26 11:21:41
• 百度地图坐标拾取器（可转换为高德坐标） 坐标拾取转换

450KB strongdx 2017-07-31 16:57:44
• 高德百度坐标系转换方法 地图api

国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上，进行了BD-09二次...百度对外接口的坐标系并不是GPS采集的真实经纬度，需要通过坐标转换接口进行转换

在开始这个题目之前，先给大家再次扫扫盲，扫的不是坐标系统的盲，而是我们国家所使用的坐标系统。大家都知道，美国GPS使用的是WGS84的坐标系统，以经纬度的形式来表示地球平面上的某一个位置，这应该是国际共识。但在我国，出于国家安全考虑，国内所有导航电子地图必须使用国家测绘局制定的加密坐标系统，即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标，我们在业内将前者称之为地球坐标，后者称之为火星坐标，具体的说明可以参看百度百科中关于火星坐标系统的解释。
1.国内各地图API坐标系统比较
参考http://rovertang.com/labs/map-compare/
结论是：
API   坐标系   百度地图API   百度坐标   腾讯搜搜地图API   火星坐标   搜狐搜狗地图API   搜狗坐标*   阿里云地图API   火星坐标   图吧MapBar地图API   图吧坐标   高德MapABC地图API   火星坐标   灵图51ditu地图API   火星坐标

2.下面是百度官方对百度坐标为何有偏移的解释
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上，进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度，需要通过坐标转换接口进行转换。
3.火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法
GCJ-02(火星坐标) 和 BD-09 （百度坐标）
算法代码如下，其中 bd_encrypt 将 GCJ-02 坐标转换成 BD-09 坐标， bd_decrypt 反之。
void bd_encrypt(double gg_lat, double gg_lon, double &bd_lat, double &bd_lon)
{
double x = gg_lon, y = gg_lat;
double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
bd_lon = z * cos(theta) + 0.0065;
bd_lat = z * sin(theta) + 0.006;
}

void bd_decrypt(double bd_lat, double bd_lon, double &gg_lat, double &gg_lon)
{
double x = bd_lon - 0.0065, y = bd_lat - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
gg_lon = z * cos(theta);
gg_lat = z * sin(theta);
}
4.地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法
WGS-84 到 GCJ-02 的转换（即 GPS 加偏）算法是一个普通青年轻易无法接触到的“公开”的秘密。这个算法的代码在互联网上是公开的，详情请使用 Google 搜索 "wgtochina_lb" 。
整理后的算法代码请参考 https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936 。知道了这个算法之后，就可以离线进行 Google 地图偏移校正，不必像之前那么麻烦。
至于 GCJ-02 到 WGS-84 的转换（即 GPS 纠偏），可以使用二分法。

展开全文
spring0704 2017-01-05 14:34:47
• 关于高德百度地图坐标系问题 火星坐标系 高德地图 百度地图 地球坐标系 高德坐标系

目前市面上比较常见的互联网地图的坐标系主要有这样几种：GCJ-02、BD-09、WGS84、CGCS2000。

GCJ-02是由国测局制定的互联网地图坐标系，又叫火星坐标，最常见的互联网地图坐标系，在中国能见到的互联网

BD-09是百度地图独有的坐标系，是在GCJ-02的基础之上进行二次加密的地图坐标，比GCJ-02坐标偏了几百米
的样子。

CGCS2000是国家2000坐标系，是一个地心坐标系，目前的话应该就只有天地图在用了，所以目前的互联网地图就
只有天地图使用的是真实坐标，其他都是使用的加密坐标。

CGCS2000、WGS84都是地心坐标系，地心与参心不同，参心坐标系是以参考椭球为基准建立的坐标系，不同的国
家有着自己的参考椭球标准，所以会存在一些差异性，而地心坐标系是以地球的质量中心为基准建立的坐标系统，
所以，2000与84基本是重合的，只有高程基准面会存在差异，天地图的定位API就是直接读取的手机GPS坐标，不
加密直接显示到地图上。

//地球坐标系转火星坐标系方法
const double a = 6378245.0;
const double ee = 0.00669342162296594323;

+ (CLLocation *)transformToMars:(CLLocation *)location {
//是否在中国大陆之外
if ([[self class] outOfChina:location]) {
return location;
}
double dLat = [[self class] transformLatWithX:location.coordinate.longitude - 105.0 y:location.coordinate.latitude - 35.0];
double dLon = [[self class] transformLonWithX:location.coordinate.longitude - 105.0 y:location.coordinate.latitude - 35.0];
double radLat = location.coordinate.latitude / 180.0 * M_PI;
double magic = sin(radLat);
magic = 1 - ee * magic * magic;
double sqrtMagic = sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);
dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI);
return [[CLLocation alloc] initWithLatitude:location.coordinate.latitude + dLat longitude:location.coordinate.longitude + dLon];
}

+ (BOOL)outOfChina:(CLLocation *)location {
if (location.coordinate.longitude < 72.004 || location.coordinate.longitude > 137.8347) {
return YES;
}
if (location.coordinate.latitude < 0.8293 || location.coordinate.latitude > 55.8271) {
return YES;
}
return NO;
}

+ (double)transformLatWithX:(double)x y:(double)y {
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x));
ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
ret += (20.0 * sin(y * M_PI) + 40.0 * sin(y / 3.0 * M_PI)) * 2.0 / 3.0;
ret += (160.0 * sin(y / 12.0 * M_PI) + 320.0 * sin(y * M_PI / 30.0)) * 2.0 / 3.0;
return ret;
}

+ (double)transformLonWithX:(double)x y:(double)y {
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x));
ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
ret += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0;
ret += (150.0 * sin(x / 12.0 * M_PI) + 300.0 * sin(x / 30.0 * M_PI)) * 2.0 / 3.0;
return ret;
}  
// GCJ-02 坐标转换成 BD-09 坐标
+ (CLLocationCoordinate2D)MarsGS2BaiduGS:(CLLocationCoordinate2D)coordinate
{
double x_pi = PI * 3000.0 / 180.0;
double x = coordinate.longitude, y = coordinate.latitude;
double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
double bd_lon = z * cos(theta) + 0.0065;
double bd_lat = z * sin(theta) + 0.006;
return CLLocationCoordinate2DMake(bd_lat, bd_lon);
}

// BD-09 坐标转换成 GCJ-02 坐标
+ (CLLocationCoordinate2D)BaiduGS2MarsGS:(CLLocationCoordinate2D)coordinate
{
double x_pi = PI * 3000.0 / 180.0;
double x = coordinate.longitude - 0.0065, y = coordinate.latitude - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
double gg_lon = z * cos(theta);
double gg_lat = z * sin(theta);
return CLLocationCoordinate2DMake(gg_lat, gg_lon);
}  
// WGS-84 坐标转换成 BD-09 坐标
+ (CLLocationCoordinate2D)WorldGS2BaiduGS:(CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D mars = [ALDGeocoder WorldGS2MarsGS:coordinate];
CLLocationCoordinate2D baidu = [ALDGeocoder MarsGS2BaiduGS:mars];
return baidu;
}

// BD-09 坐标转换成 WGS-84 坐标
+ (CLLocationCoordinate2D)BaiduGS2WorldGS:(CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D mars = [ALDGeocoder BaiduGS2MarsGS:coordinate];
CLLocationCoordinate2D world = [ALDGeocoder MarsGS2WorldGS:mars];
return world;
}

// WGS-84 坐标转换成 Sogou 坐标
+ (CLLocationCoordinate2D)WorldGS2SogouGS:(CLLocationCoordinate2D)coordinate
{
const double ee = 0.082271854224939184;
double lon = coordinate.longitude;
double lat = coordinate.latitude;
double dlon = [ALDGeocoder rad:CLIP(lon, -360, 360)];
double dlat = [ALDGeocoder rad:CLIP(lat, -90, 90)];
dlon = 6378206.4 * dlon;
double sinphi = sin(dlat);
double temp1, temp2;
if((temp1 = 1.0 + sinphi) == 0.0){
dlat = -1000000000;
}else if((temp2 = 1.0 - sinphi) == 0.0){
dlat = 1000000000;
}else{
double esinphi = ee * sinphi;
dlat = 3189103.2000000002 * log((temp1 / temp2) * pow((1.0 - esinphi) / (1.0 + esinphi), ee));
}
return CLLocationCoordinate2DMake(dlat, dlon);
}

// Sogou 坐标转换成 WGS-84 坐标
+ (CLLocationCoordinate2D)SogouGS2WorldGS:(CLLocationCoordinate2D)coordinate
{
const double ee = 1.5707963267948966;
const double aa = 0.0033938814110493522;
double lon = coordinate.longitude;
double lat = coordinate.latitude;
double dlon = lon / 6378206.4;
double temp = -lat / 6378206.4;
double chi;
if(temp < -307){
chi = ee;
}else if(temp > 308){
chi = -ee;
}else{
chi = ee - 2 * atan(exp(temp));
}
double chi2 = 2 * chi;
double coschi2 = cos(chi2);
double dlat = chi + sin(chi2) * (aa + coschi2 * (1.3437644537757259E-005 + coschi2 * (7.2964865099246009E-008 + coschi2 * 4.4551470401894685E-010)));
double rlon = CLIP([ALDGeocoder deg:dlon], -360, 360);
double rlat = CLIP([ALDGeocoder deg:dlat], -90, 90);
return CLLocationCoordinate2DMake(rlat, rlon);
}  
//WGS-84 坐标转换成 墨卡托 坐标
+ (CLLocationCoordinate2D)WorldGS2Mercator:(CLLocationCoordinate2D)coordinate
{
double lon = coordinate.longitude*20037508.34/180;
double lat = log(tan((90+coordinate.latitude)*M_PI/360))/(M_PI/180);
lat = lat*20037508.34/180;
return CLLocationCoordinate2DMake(lat, lon);
}

//墨卡托 坐标转换成 WGS-84 坐标
+ (CLLocationCoordinate2D)Mercator2WorldGS:(CLLocationCoordinate2D)mercator
{
double lon = mercator.longitude/20037508.34*180;
double lat = mercator.latitude/20037508.34*180;
lat = 180/M_PI*(2*atan(exp(lat*M_PI/180))-M_PI/2);
return CLLocationCoordinate2DMake(lat, lon);
}  
展开全文
MHTios 2018-06-25 22:08:52
• 4星
2KB maotinggang 2015-12-25 14:03:24
• Point, TileInfo, TiledMapServiceLayer) { return declare("gaodeLayer", TiledMapServiceLayer, { // 构造函数 constructor: function (args) { // 这里使用坐标系为投影坐标系WGS_1984_Web_Mercator...
define(["dojo/_base/declare", "esri/geometry/Extent", "esri/SpatialReference", "esri/geometry/Point", "esri/layers/TileInfo", "esri/layers/TiledMapServiceLayer"],
function (declare, Extent, SpatialReference, Point, TileInfo, TiledMapServiceLayer) {
return declare("gaodeLayer", TiledMapServiceLayer, {
// 构造函数
constructor: function (args) {
// 这里使用坐标系为投影坐标系WGS_1984_Web_Mercator_Auxiliary_Sphere（wkid: 3857）
this.spatialReference = new SpatialReference({
wkid: 3857
});
// 图层提供的起始显示范围和整个图层的地理范围
this.fullExtent = new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, this.spatialReference);
this.initialExtent = this.fullExtent;
this.tileInfo = new TileInfo({
"cols": 256,
"rows": 256,
"compressionQuality": 0,
"origin": new Point(-20037508.342787, 20037508.342787, this.spatialReference),
"spatialReference": this.spatialReference,
"lods": [
{"level": 0, "resolution": 156543.033928, "scale": 591657527.591555},
{"level": 1, "resolution": 78271.5169639999, "scale": 295828763.795777},
{"level": 2, "resolution": 39135.7584820001, "scale": 147914381.897889},
{"level": 3, "resolution": 19567.8792409999, "scale": 73957190.948944},
{"level": 4, "resolution": 9783.93962049996, "scale": 36978595.474472},
{"level": 5, "resolution": 4891.96981024998, "scale": 18489297.737236},
{"level": 6, "resolution": 2445.98490512499, "scale": 9244648.868618},
{"level": 7, "resolution": 1222.99245256249, "scale": 4622324.434309},
{"level": 8, "resolution": 611.49622628138, "scale": 2311162.217155},
{"level": 9, "resolution": 305.748113140558, "scale": 1155581.108577},
{"level": 10, "resolution": 152.874056570411, "scale": 577790.554289},
{"level": 11, "resolution": 76.4370282850732, "scale": 288895.277144},
{"level": 12, "resolution": 38.2185141425366, "scale": 144447.638572},
{"level": 13, "resolution": 19.1092570712683, "scale": 72223.819286},
{"level": 14, "resolution": 9.55462853563415, "scale": 36111.909643},
{"level": 15, "resolution": 4.77731426794937, "scale": 18055.954822},
{"level": 16, "resolution": 2.38865713397468, "scale": 9027.977411},
{"level": 17, "resolution": 1.19432856685505, "scale": 4513.988705},
{"level": 18, "resolution": 0.597164283559817, "scale": 2256.994353},
{"level": 19, "resolution": 0.298582141647617, "scale": 1128.497176}
]
});
},
getTileUrl: function (level, row, col) {
return url = 'http://webrd0' + (col % 4 + 1) + '.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=' + col + '&y=' + row + '&z=' + level;
}
});
});


展开全文
u014572906 2021-05-31 18:28:42
• weixin_30676635 2021-02-28 08:44:43
• 常用的几种在线地图（天地图、百度地图、高德地图）坐标系之间的转换算法 天地图坐标转百度坐标

qq_36377037 2019-01-14 16:39:37
• Android 高德地图坐标转换 android

qq_32368129 2020-12-14 14:10:16
• u010194271 2020-12-15 16:53:44
• 1KB yangwenbin110 2019-05-08 10:19:31
• 3KB qq_33794441 2018-11-06 14:54:32
• lftaoyuan 2019-07-25 18:16:35
• hudeyong926 2018-10-25 11:12:09
• 高德坐标系转天地图坐标系（GCJ02转WGS坐标系） 街景地图 定位

zhanglei892721 2020-12-03 13:32:29
• weixin_35626107 2021-04-28 02:01:12
• 963B zhou_shaowei 2018-12-28 16:32:45
• 3KB u013696827 2018-05-29 12:11:23
• 4星
7KB oaimeng12 2014-12-18 12:06:02
• danxiaogui0513 2021-01-26 09:35:31
• 百度地图坐标和高德地图坐标转换 高德地图 百度地图

lrxb_123 2017-12-14 17:09:05
• weixin_33869377 2018-02-24 02:30:59
• Henry_Wu001 2020-02-27 10:23:05
• 高德地图GCJ-02火星坐标系与GPS的WGS-84坐标系转换公式（Java） 高德地图 坐标转换 java 安卓 地理

silverbullet1472 2019-02-20 12:06:19

...