百度地图与谷歌地图Vs谷歌地图

百度地图和google地图为什么都看不了?
百度地图和google地图为什么都看不了?
09-06-11 &
IE-INTERNET选项-安全- 设置调成默认   IE-INTERNET选项-高级-恢复默认
请登录后再发表评论!//1、GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。谷歌,腾讯,高德都在用这个坐标体系。
//2、BD-09,百度坐标系
//GCJ-02转换BD-09
function GCJTobaidu($lat, $lng){
$v = M_PI * 3000.0 / 180.0;
$z = sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $v);
$t = atan2($y, $x) + 0.000003 * cos($x * $v);
return array(
'lat' =& $z * sin($t) + 0.006,
'lng' =& $z * cos($t) + 0.0065
//使用方法
$lat = 32.;
$lng = 114.;
$coordinate = GCJTobaidu($lat, $lng);
var_dump($coordinate);
//BD-09转换GCJ-02
function baiduToGCJ($lat, $lng){
$v = M_PI * 3000.0 / 180.0;
$x = $lng - 0.0065;
$y = $lat - 0.006;
$z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $v);
$t = atan2($y, $x) - 0.000003 * cos($x * $v);
return array(
'lat' =& $z * sin($t),
'lng' =& $z * cos($t)
//使用方法
$lat = 32.134632;
$lng = 114.088683;
$coordinate = baiduToGCJ($lat, $lng);
var_dump($coordinate);
&&您还没有登录,点击这里或之后才能回复!
浏览数: 1833
分享时间: 8 个月 前查看: 6617|回复: 10
GPS坐标转百度/谷歌地图坐标(例程)
主题帖子积分
资深会员, 积分 1286, 距离下一级还需 1714 积分
资深会员, 积分 1286, 距离下一级还需 1714 积分
本帖最后由 netpat 于
13:53 编辑
如果利用GPS定位数据调用百度地图API需要对GPS经纬度进行转化。
方法如下:
调用半叶寒羽提供的接口地址进行转化。
该接口调用后,返回百度和谷歌地图坐标,数据格式为:
{&error&:0,&google&:{&lat&:22.,&lng&:113.},&baidu&:{&lat&:&22.&,&lng&:&113.&},&copyright&:&map.yanue.net&}
在这儿,需要用e4a的JSON方法进行解析得到经纬度
百度坐标=GPS2百度(当前经度,当前纬度,1,3)
百度经度=JSON解析(百度坐标,&baidu&,&lng&,2)
百度纬度=JSON解析(百度坐标,&baidu&,&lat&,2)复制代码
& &&&函数 GPS2百度(经度 为 文本型,纬度 为 文本型,计次 为 整数型,循环次数 为 整数型) 为 文本型
& && & 变量 返回位置 为 文本型
& && & 如果 计次&= 循环次数 则
& && && && & 返回位置=取网页源码(&http://map.yanue.net/gpsApi.php?lng=&& 经度 &&&lat=&& 纬度,&UTF-8&,3000)
& && && && & 如果 返回位置&&&& 则
& && && && && && & GPS2百度=返回位置
& && && && && && & 退出
& && && && &&&结束 如果
& && && && & 计次=计次+1
& && &结束 如果
& &&&GPS2百度=返回位置
结束 函数&/P&复制代码百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。
接口调用地址: (功能强大)
主题帖子积分
资深会员, 积分 2000, 距离下一级还需 1000 积分
资深会员, 积分 2000, 距离下一级还需 1000 积分
主题帖子积分
资深会员, 积分 2000, 距离下一级还需 1000 积分
资深会员, 积分 2000, 距离下一级还需 1000 积分
做个完整的例程吧
主题帖子积分
没有例程我们看不懂啊
主题帖子积分
初级会员, 积分 50, 距离下一级还需 150 积分
初级会员, 积分 50, 距离下一级还需 150 积分
顶顶 学习学习
主题帖子积分
资深会员, 积分 2902, 距离下一级还需 98 积分
资深会员, 积分 2902, 距离下一级还需 98 积分
谢楼主提供源码,新手学习
主题帖子积分
谢楼主提供源码。。
主题帖子积分
资深会员, 积分 2063, 距离下一级还需 937 积分
资深会员, 积分 2063, 距离下一级还需 937 积分
大神,能帮忙贴个例程吗?
我是cbj 该用户已被删除
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子积分
资深会员, 积分 1927, 距离下一级还需 1073 积分
资深会员, 积分 1927, 距离下一级还需 1073 积分
研究中,难。
注册账号后积极发帖的会员
Powered by
Template By6893人阅读
用谷歌地图和百度地图做了类似于地铁上给定出发点和目的点和当前所在位置的
效果。。由于谷歌地图api在国内被封的厉害,且每天调用超过25000次就要收费
估计一般公司都会采用百度地图api
1.先来谷歌的。
我用的版本是google map api v3。
由于谷歌地图在国内被禁的厉害,推荐使用goagent来解决吧。
代码及效果图如下。
&!DOCTYPE html&
&title&Google Maps JavaScript API v3 Example: Marker
Animations Loop&/title&
&link href=&/maps/documentation/javascript/examples/default.css&
rel=&stylesheet&&
src=&/maps/api/js?v=3.exp&sensor=false&&&/script&
//地图的中心
var center = new google.maps.LatLng(32.8.925946);
var flightP
//已经过的路线
var flightPath_
//未经过的路线
var flightPath_
//路线所有点坐标数组
var path = [];
//路线上经过的点坐标数组
var path_yes = [];
//路线上未经过的点坐标数组
var path_no = [];
//已经经过的标记的图标样式
var image_green = 'green.jpg';
var image_red = 'red.jpg';
//路线上的各个中间点
var markers = [];
//地图变量
//定义已经过线的类型(箭头)
var lineSymbol1 = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW
//定义未经过线的类型(圆形)
var lineSymbol2 = {
path: google.maps.SymbolPath.CIRCLE,
strokeColor: '#393'
function initialize() {
var mapOptions = {
mapTypeId :google.maps.MapTypeId.ROADMAP,
center :center,
scaleControl :true //比例控件
map = new google.maps.Map(document.getElementById('map_canvas'),
mapOptions);
function drop() {
if(markers.length != 0){
deleteOverlays();
//出发点坐标的字符串
var str_start = document.getElementById(&p_start&).
//目的点坐标的字符串,进行分解并创建该字符串对应的坐标
var str_end = document.getElementById(&p_end&).
var str_start_ary = str_start.split(&,&);
var str_end_ary = str_end.split(&,&);
//出发点和终点坐标
var pos_start = new google.maps.LatLng(parseFloat(str_start_ary[0]),parseFloat(str_start_ary[1]));
var pos_end = new google.maps.LatLng(parseFloat(str_end_ary[0]),parseFloat(str_end_ary[1]));
//开始点坐标放入数组
path_yes.push(pos_start);
path.push(pos_start);
//中间点坐标字符串
var centers = document.getElementsByName(&p_center&);
var sel_centers = document.getElementsByName(&sel_center&);
for(var i=0; i&centers. i++){
var val = trim(centers[i].value);
if(val!=&&){
var str_center_ary = val.split(&,&);
var pos_center = new google.maps.LatLng(parseFloat(str_center_ary[0]),parseFloat(str_center_ary[1]));
//判断该点坐标是否已经经过
var is_pass = sel_centers[i].
path.push(pos_center);
if(is_pass==&1&){
path_yes.push(pos_center);
//结束点坐标放入数组并判断结束点是否已经经过
path.push(pos_end);
if(document.getElementById(&sel_p_end&).value==&1&){
path_yes.push(pos_end);
//在地图上画出坐标点对应的标志
for ( var i = 0; i & path. i++) {
addMarker(path[i]);
//绘制总路线
flightPath = new google.maps.Polyline( {
path :path,
strokeColor :&red&,
strokeOpacity :1.0,
strokeWeight :3,
icon: lineSymbol1,
offset: '100%'
//绘制已经经过的路线
flightPath_yes = new google.maps.Polyline( {
path :path_yes,
strokeColor :&green&,
strokeOpacity :1.0,
strokeWeight :3,
icon: lineSymbol1,
offset: '100%'
flightPath.setMap(map);
flightPath_yes.setMap(map);
/** 根据总的坐标数组和已经经过点的坐标数组来获得未经过点的坐标数组 */
for(var i=0; i&path. i++){
var pass =
for(var j=0; i&path_yes.length-1; i++){
if(path_yes[j]==path[i]){
if(!pass){
path_no.push(path[i]);
//绘制未经过的路线
flightPath_no = new google.maps.Polyline( {
path :path_no,
strokeColor :&red&,
strokeOpacity :1.0,
strokeWeight :3,
icon: lineSymbol2,
offset: '100%'
flightPath.setMap(map);
flightPath_no.setMap(map);
/** 地图上添加标志 */
function addMarker(pos) {
//判断该点是否已经经过,经过则将地图上的标志样式进行改变
var exist =
for(var j=0; j&path_yes. j++){
if(path_yes[j] == pos){
var marker = new google.maps.Marker( {
position :pos,
draggable :false,
//icon:image_green,
animation :google.maps.Animation.DROP
//鼠标放在图标上的时候显示的信息
marker.setTitle(pos.toString());
//根据某坐标是否经过来设置图标的颜色
if(exist){
marker.setIcon(image_green);
marker.setIcon(image_red);
markers.push(marker);
// 每个图标点击后对应的信息框
var infowindow = new Window({
content: pos.toString(),
maxWidth: 20
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
/** 删除地图上的标志和路线 */
function deleteOverlays() {
if (markers) {
for (i in markers) {
markers[i].setMap(null);
markers.length = 0;
path_yes.length = 0;
path.length = 0;
path_no.length = 0;
flightPath.setPath(path);
flightPath_yes.setPath(path);
flightPath_no.setPath(path);
/** 线上点的动画效果 */
function animateCircle() {
var count = 0;
offsetId = window.setInterval(function() {
count = (count + 1) % 200;
var icons = flightPath_no.get('icons');
icons[0].offset = (count / 2) + '%';
flightPath_no.set('icons', icons);
/** 去除字符串两端空格 */
function trim(str){
return str.replace( /^\s*/, &&).replace(/\s*$/,&&);
&body onload=&initialize();animateCircle();&&
&div id=&map_canvas& style=&width: 500 height: 400&&
-----------------模拟数据---------------------&br /&
:&input type=&text& id=&p_start& value=&32..944963&&&br /&
途经1:&input type=&text& name=&p_center& value=&32..945285&&
&select name=&sel_center&&&option value=&0&&未到达&/option&&option value=&1&&到达&/option&&/select&&br /&
途经2:&input type=&text& name=&p_center& value=&32..939492&&
&select name=&sel_center&&&option value=&0&&未到达&/option&&option value=&1&&到达&/option&&/select&&br /&
途经3:&input type=&text& name=&p_center& value=&&&
&select name=&sel_center&&&option value=&0&&未到达&/option&&option value=&1&&到达&/option&&/select&&br /&
:&input type=&text& id=&p_end& value=&32..889431&&
&select id=&sel_p_end&&&option value=&0&&未到达&/option&&option value=&1&&到达&/option&&/select&&br /&
--------------------------------------
&button id=&drop& onclick=&drop()&&
&button id=&delete& onclick=&deleteOverlays()&&
删除路线图标
2.百度地图(只简单的花了点和线)
&!DOCTYPE html&
&meta name=&viewport& content=&initial-scale=1.0, user-scalable=no& /&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /&
&title&Hello, World&/title&
&style type=&text/css&&
#container {
width: 600
height: 400
&script type=&text/javascript& src=&http://api./api?v=1.3&&&/script&
&script type=&text/javascript&&
//pass:是否经过
0:没有经过,1:已经经过,2:当前点
var BASEDATA = [
{title:&家&,content:&红枫新村&,point:&118..143779&,pass:1,icon:{w:21,h:21,l:0,t:0,x:6,lb:5},distance_total:10.1,distance_pass:0,distance_per:&0%&},
{title:&羊山公园&,content:&羊山公园地铁站&,point:&118.007&,pass:2,icon:{w:21,h:21,l:0,t:0,x:6,lb:5},distance_total:10.1,distance_pass:4.2,distance_per:&40%&},
{title:&马群&,content:&马群地铁站&,point:&118..084829&,pass:0,icon:{w:21,h:21,l:0,t:0,x:6,lb:5},distance_total:10.1,distance_pass:8.3,distance_per:&83%&},
{title:&公司&,content:&自己开的&,point:&118..091025&,pass:0,icon:{w:21,h:21,l:0,t:0,x:6,lb:5},distance_total:10.1,distance_pass:10.1,distance_per:&100%&}
//默认地图地图的中点和缩放比例
var BASEDATA2 = {scale:13,point_center:&118..109531&};
var json_passAry = [];//已经经过的点的json对象数组,包括当前点
var json_not_passAry = [];//没有经过的点的json对象数组,包括当前点
var point_passAry = [];
var point_not_passAry = [];
//将json数据解析,将坐标点信息归类放入已经过和未经过的数组中
for(var i=0; i&BASEDATA. i++){
var json = BASEDATA[i];
var point = new BMap.Point(json.point.split(&|&)[0],json.point.split(&|&)[1]);
if(json.pass==1){
json_passAry.push(json);
point_passAry.push(point);
}else if(json.pass==0){
json_not_passAry.push(json);
point_not_passAry.push(point);
}else if(json.pass==2){
json_passAry.push(json);
json_not_passAry.push(json);
point_passAry.push(point);
point_not_passAry.push(point);
var point_center = new BMap.Point(118..109531)
window.onload = function() {
map = new BMap.Map(&container&);
var point_center = new BMap.Point(BASEDATA2.point_center.split(&|&)[0],BASEDATA2.point_center.split(&|&)[1]);
map.centerAndZoom(point_center, BASEDATA2.scale);
var opts = {
width : 250, // 信息窗口宽度
height : 100, // 信息窗口高度
title : &Hello& // 信息窗口标题
var infoWindow = Window(&World&, opts); // 创建信息窗口对象
map.enableScrollWheelZoom(); //启用滚轮放大缩小
map.addControl(new BMap.NavigationControl());
//添加默认缩放平移控件
map.addControl(new BMap.ScaleControl()); // 添加默认比例尺控件
function fun1() {
map.clearOverlays();
//已经经过的点画线
var polyline_pass = new BMap.Polyline(point_passAry, {
strokeColor : &green&,
strokeWeight : 2,
strokeOpacity : 0.8
//未经过的点画线
var polyline_not_pass = new BMap.Polyline(point_not_passAry, {
strokeColor : &red&,
strokeWeight : 2,
strokeOpacity : 0.8
map.addOverlay(polyline_pass);
map.addOverlay(polyline_not_pass);
//已经经过的点画上标志(经过的为绿色,当前点为白色)
for(var i=0; i&BASEDATA. i++){
var point = new BMap.Point(BASEDATA[i].point.split(&|&)[0],BASEDATA[i].point.split(&|&)[1]);
var label = new BMap.Label(BASEDATA[i].title,{&offset&:new BMap.Size(9,-20)});
if(BASEDATA[i].pass==2){
icon = new BMap.Icon(&markers.png&, new BMap.Size(20,20),{anchor: new BMap.Size(5,20),infoWindowAnchor:new BMap.Size(10,1),offset:new BMap.Size(6,21)});
}else if(BASEDATA[i].pass==1){
icon = new BMap.Icon(&green.png&, new BMap.Size(20,20),{anchor: new BMap.Size(5,20),infoWindowAnchor:new BMap.Size(10,1),offset:new BMap.Size(6,21)});
//marker = new BMap.Marker(point,{icon:icon});
}else if(BASEDATA[i].pass==0){
icon = new BMap.Icon(&red.png&, new BMap.Size(20,20),{anchor: new BMap.Size(5,20),infoWindowAnchor:new BMap.Size(10,1),offset:new BMap.Size(6,21)});
marker = new BMap.Marker(point,{icon:icon});
marker.setLabel(label);
map.addOverlay(marker);
// 将标注添加到地图中
label.setStyle({
borderColor:&#808080&,
color:&#333&,
cursor:&pointer&
(function(){
var _json = BASEDATA[i];
var _iw = createInfoWindow(_json);
var _marker =
_marker.addEventListener(&click&,function(){
this.openInfoWindow(_iw);
_iw.addEventListener(&open&,function(){
_marker.getLabel().hide();
_iw.addEventListener(&close&,function(){
_marker.getLabel().show();
label.addEventListener(&click&,function(){
_marker.openInfoWindow(_iw);
if(_json.pass==2){
label.hide();
_marker.openInfoWindow(_iw);
var aryAll = [];
if(point_not_passAry.length&0){
aryAll.push(point_not_passAry[0]);
for(var i=0; i&point_not_passAry.length-1; i++){
var ary = getPoints(point_not_passAry[i],point_not_passAry[i+1]);
aryAll = aryAll.concat(ary)
var icon = new BMap.Icon(&markers.png&, new BMap.Size(20,20),{anchor: new BMap.Size(5,20),infoWindowAnchor:new BMap.Size(10,1),offset:new BMap.Size(6,21)});
move_marker = new BMap.Marker(aryAll[0],{icon:icon});
map.addOverlay(move_marker);
var move_i=0;
setInterval(function(){
move_marker.setPosition(aryAll[move_i++%aryAll.length]);
function createInfoWindow(json){
if(json.pass==2){
iw = Window(&&b class='iw_poi_title' title=' 您当前的所在地:&br /&& +json.title + &'&& + json.title + &&/b&&div class='iw_poi_content'&&+json.content+&&br /&&
+&总公里数:&+json.distance_total+&km, 已经过的公里数:&+json.distance_pass+&km, 经过的百分比:&+json.distance_per+&&/div&&);
iw = Window(&&b class='iw_poi_title' title='& + json.title + &'&& + json.title + &&/b&&div class='iw_poi_content'&&+json.content+&&/div&&);
/** 给定两个点获取两个点之间的中间点, */
function getPoints(p_begin,p_end){
var ary = [];
//ary.push(p_begin);//
var polyline = new BMap.Polyline([p_begin,p_end]);
var p_pass2 = polyline.getBounds().getCenter();
var polyline2 = new BMap.Polyline([p_begin,p_pass2]);
var p_pass1 = polyline2.getBounds().getCenter();
ary.push(p_pass1);//
ary.push(p_pass2);//
var polyline3 = new BMap.Polyline([p_pass2,p_end]);
var p_pass3 = polyline3.getBounds().getCenter();
ary.push(p_pass3);
ary.push(p_end);
&div id=&container&&&/div&
&input type=&button& onclick=&fun1();& value=&click me...&&
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:152736次
积分:2111
积分:2111
排名:第10016名
原创:49篇
转载:48篇
评论:14条
(4)(1)(1)(6)(4)(11)(6)(19)(23)(1)(3)(3)(3)(1)(1)(3)(5)(1)(1)

我要回帖

更多关于 百度地图与谷歌地图 的文章

 

随机推荐