地图坐标系转换,地图经纬度转换,地址转换经纬度
地图坐标系转换:解析WGS84,GCJ02,BD09三种坐标系
在进行地理信息相关的开发时,经常需要进行地图坐标系之间的转换。常用的坐标系包括WGS84、GCJ02和BD09。本文将分别解析这三种坐标系,并介绍它们之间的转换方法。
WGS84坐标系是一种地球坐标系,它是由美国国防部制定的一种标准,现在已经成为全球卫星定位系统使用的标准。在WGS84坐标系中,经度采用的是以0°经线为基准的正负180°经线,纬度采用的是以赤道为基准的正负90°纬线。
GCJ02坐标系是一种对WGS84坐标系的加密算法。由于国家安全原因,中国政府在国内测绘地图时使用了这种算法。GCJ02坐标系和WGS84坐标系在中国境内的经纬度范围是一致的,但是会有一定的偏移量。
BD09坐标系是一种在GCJ02坐标系基础上又进行了加密的坐标系,它是由百度公司推出的一种坐标系。在中国境内,使用百度地图获取的GPS坐标就是BD09坐标系。
地址转换经纬度:利用地图API实现地址转经纬度
在WEB开发中,常常需要根据输入的地址,获取该地址的经纬度信息,以便在地图上显示相关信息。在实现这一功能时,可以使用各大地图API提供的地址转经纬度功能。
Google Maps API提供了geocoding服务,可以将用户输入的地址转换为对应的经纬度信息。用户只需要将地址作为参数传入geocoder.geocode()方法即可。
百度地图API也提供类似的功能,用户可以使用其提供的geocoding服务获取经纬度信息。代码示例如下:
var myGeo=new BMap.Geocoder();
myGeo.getPoint("北京市海淀区上地十街10号", function(point){
if (point) {
//point变量即为经纬度信息
}
}, "北京市");
高德地图API也提供了geocoding服务,同样可以将地址转换为经纬度信息。代码示例如下:
AMap.service('AMap.Geocoder',function(){
var geocoder=new AMap.Geocoder();
geocoder.getLocation('北京市海淀区上地十街10号', function(status, result) {
if (status==='complete' && result.info==='OK') {
var point=result.geocodes[0].location;
//point变量即为经纬度信息
}
});
});
地图经纬度转换:实现经纬度之间的相互转换
在进行地图开发时,经常需要对经纬度信息进行转换。例如,在地图上标注坐标点时,需要将用于存储的经纬度信息转换为屏幕坐标信息以便于绘制。
下面分别介绍WGS84、GCJ02、BD09三种坐标系中经纬度信息的转换方法。
WGS84坐标系到GCJ02坐标系的转换方法:
首先,将经度值和纬度值转换为以度为单位的值。
1. 将经度值和纬度值转换为以弧度为单位的值,如下所示:
var radLat=lat * Math.PI / 180.0;
var radLon=lng * Math.PI / 180.0;
2. 根据以下公式计算转换后的经纬度信息:
var a=6378245.0;
var ee=0.00669342162296594323;
var dLat=transformLat(lng - 105.0, lat - 35.0);
var dLon=transformLon(lng - 105.0, lat - 35.0);
var radLat=lat / 180.0 * Math.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) * Math.PI);
dLon=(dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);
var mgLat=lat + dLat;
var mgLng=lng + dLon;
3. 其中,transformLat()和transformLon()方法的实现如下:
function transformLat(x, y) {
var lat=-100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
lat +=(20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
lat +=(20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0;
lat +=(160.0 * Math.sin(y / 12.0 * Math.PI) + 320.0 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0;
return lat;
}
function transformLon(x, y) {
var lon=300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
lon +=(20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
lon +=(20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0;
lon +=(150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0;
return lon;
}
GCJ02坐标系到BD09坐标系的转换方法:
首先,将经度值和纬度值转换为以度为单位的值。
1. 根据以下公式计算转换后的经纬度信息:
var x_pi=3.14159265358979324 * 3000.0 / 180.0;
var x=lng, y=lat;
var z=Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
var theta=Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
var bdLng=z * Math.cos(theta) + 0.0065;
var bdLat=z * Math.sin(theta) + 0.006;
2. 其中,x_pi表示π的值,lng、lat分别表示经度值和纬度值,bdLng、bdLat分别表示转换后的经度值和纬度值。
BD09坐标系到GCJ02坐标系的转换方法:
首先,将经度值和纬度值转换为以度为单位的值。
1. 根据以下公式计算转换后的经纬度信息:
var x_pi=3.14159265358979324 * 3000.0 / 180.0;
var x=lng - 0.0065, y=lat - 0.006;
var z=Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
var theta=Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
var gcjLng=z * Math.cos(theta);
var gcjLat=z * Math.sin(theta);
2. 其中,x_pi表示π的值,lng、lat分别表示经度值和纬度值,gcjLng、gcjLat分别表示转换后的经度值和纬度值。
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 在线用户画像生成器:释放数据驱动的营销的力量 (在线用户画像工具)
- 解锁强大的用户画像:在线生成器揭示隐藏的客户洞察 (强力解锁)
- 用户画像在线助手:轻松获取数据驱动的见解 (用户画像在线生成)
- 在线用户画像制作:自定义受众体验的关键 (在线用户画像工具)
- 超越传统表情符号:用 DIY 表情包彰显你的独特性 (超越传统表情图片)
- 让你的信息栩栩如生:打造你自己的 DIY 表情包 (让你的信任)
- DIY 表情包:用你的个人风格表达你自己 (diy表情包制作)
- 为你的聊天添加个性化:制作你自己的 DIY 表情包 (为你的聊天添加表情包)
- 用 DIY 表情包表达你的情绪,无需文字 (diy表情包)
- 用 DIY 表情包为你的文字增添一丝乐趣和活力 (diy 表情)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~