Google地图经纬度与平面坐标的相互转换、简单地图Demo

接到公司派下来的一个任务,让我做一个简单的地图Demo,要求是输入城市名,然后在地图上标记出该城市的位置,而且必须是在一张静态图片上标记,不可调用现有的地图成品控件。稍有常识的人都知道经纬线大部分都是有弧度的,因此在世界地图上玩定位可不是简单的xy能搞定的,但这依然难不倒我,于是我便自行收集、调试出一些接口和函数,完成了这个任务。


首先,国内大部分电子地图服务商对于国外城市的支持≈翔,因此使用谷歌地图。我把谷歌地图缩放到世界地图级别,然后采集拼凑为一张完整的世界地图(见文章底部),尺寸为1024*1024。有了世界地图我们现在来获取指定城市的经纬度,根据一番查找找出了谷歌的api【http://maps.google.cn/maps/api/geocode/json?address=地址】其中地址可以是英文,也可以是url编码后的中文。访问(GET)该地址后获得一些json数据,不出问题的话第33行的location数组就是经纬度数据。


有了经纬度,我们来获取平面坐标(xy)。通过下面的函数,即可把经纬度转为xy坐标


经度到x

function lngToPx(lng) {
  return (lng + 180) * (256 << 2) / 360 + 512;
}


纬度到y

function latToPx(lat) {
  var siny = Math.sin(lat * Math.PI / 180);
  var y = Math.log((1 + siny) / (1 - siny));
  return (128 << 2) * (1 - y / (2 * Math.PI));
}


有了xy坐标,接下来该如何标记就不用我说了吧?

世界地图:

世界地图


简单地图demo实例源码、无水印世界地图:

http://download.csdn.net/detail/mokeyjay/7670685

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值