`
yzz9i
  • 浏览: 216807 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

一个简单功能强大的Google Map 搜索源码 【我在CSDN上也有发布】

阅读更多
单独页面功能。google Map 搜索功能
引用


<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://www.ip-look-up.com/Services/ipInfo.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/routeboxer/src/RouteBoxer.js" type="text/javascript"></script>


<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
   if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
   {
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr = objObject.MACAddress;
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
    IPAddr = objObject.IPAddress(0);
    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName = objObject.DNSHostName;
    }
</SCRIPT>

<script type="text/javascript">
var geocoder; //定义一个Geocoder对象
var map;        //定义一个Map对象
var infowindow = new google.maps.InfoWindow();    //初始化一个信息窗口,用来显示提示信息

//定义导航组件
var boxpolys = null;        //保存路线的数组
//var directions = null;
var routeBoxer = null;    //RouteBoxer对象
var distance = null; // km



    //初始化一个最简单的地图
function initialize() {
      //创建Geocoder对象,该对象是实现地址和经纬度的转换
    geocoder = new google.maps.Geocoder();
    //实例化LatLng,LatLng是标注经纬度的对象,用它来控制地图中心显示的坐标
    //纬度介于-90 度和+90度,经度将被介于-180度和180度
    //ipLocation.latitude, ipLocation.longitude 外部插件根据ip获取经纬度
    var latlng = new google.maps.LatLng(ipLocation.latitude, ipLocation.longitude);
    //定义MapOptions对象属性
    var myOptions = {
      zoom: 14,            //地图缩放级别
      center: latlng,    //中心点坐标
      mapTypeId: google.maps.MapTypeId.ROADMAP,    //地图显示的类型。有地图(ROADMAP)、卫星(SATELLITE)、混合(HYBRID)、地形(TERRAIN)四种类型
      disableDoubleClickZoom:true
      //还有其它属性见api中
    }
    //创建地图。构造器中有两个参数。第一个参数是显示层div的对象。第二个参数是myOptions
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    codeEvent();    //调用下面定义的事件处理
  
    //导航组件初始化
    routeBoxer = new RouteBoxer();
    directionService = new google.maps.DirectionsService();
    directionsRenderer = new google.maps.DirectionsRenderer({ map: map });
  
}

//根据地址查找。并且查找的结果显示在中心并且标记
function codeAddress() {
    var address = document.getElementById("address").value;
    if (geocoder) {
        /*Geocoder只有一个方法geocode
        第一个参数: GeocoderRequest,有五个可配置参数address、bounds、language、location、region
        第二个参数:回调方法(GeocoderResult对象[数组],GeocoderStatus对象)
        GeocoderResult:以json格式表示的geocode结果集,有三个属性{
            address_components:GeocoderAddressComponent对象的数组
            geometry:GeocoderGeometry 对象 {
                    bounds:LatLngBounds 对象
                    location:LatLng 对象
                    location_type:GeocoderLocationType 对象
                    viewport:       LatLngBounds 对象
                }
            types:一个字符串的数组,为一个地理位置的唯一标示
        }
        GeocoderStatus 定义了geocode()返回的7个状态
        */
      geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            //results[0].geometry.location 根据上面的注释可以知道 这里是通过搜索地址来获得经纬度
          map.setCenter(results[0].geometry.location);
          /*
                  Marker类:给地图显示标记。参数为 MarkerOptions。共有12个属性。其中position属性为必须配置的。
          */
          var marker = new google.maps.Marker({
              map: map,                                 //定义在map中显示标记。
              position: results[0].geometry.location    //定义标记的位置
          });
           infowindow.setContent(address);     //设置信息的内容
           infowindow.open(map, marker);    //打开信息窗口。一般与map和标记关联
        } else {
          alert("Geocode was not successful for the following reason: " + status);
        }
      });
    }
}


//根据经纬度查找中心点。并且显示中心点的信息
function codeLatLng() {
    //var input = document.getElementById("latlng").value;
    /*对经纬度进行处理*/
    var input = "28.19,112.98";
    var latlngStr = input.split(",",2);
    var lat = parseFloat(latlngStr[0]);
    var lng = parseFloat(latlngStr[1]);
    var latlng = new google.maps.LatLng(lat, lng);    //根据经纬度创建LatLng
    if (geocoder) {
      geocoder.geocode({'latLng': latlng}, function(results, status) {    //根据经纬度查找地理位置
        if (status == google.maps.GeocoderStatus.OK) {    //判断查找状态
          if (results[1]) {                                //查找成功
            map.setZoom(11);    //设置zoom
            marker = new google.maps.Marker({    //添加标记
                position: latlng,
                map: map
            });
            /*
                InfoWindow 信息窗口类。显示标记位置的信息
            */
            infowindow.setContent(results[1].formatted_address);     //设置信息的内容
            infowindow.open(map, marker);    //打开信息窗口。一般与map和标记关联
          }
        } else {
          alert("Geocoder failed due to: " + status);
        }
      });
    }
}




//事件处理
function codeEvent() {
    //双击
    google.maps.event.addListener(map,'dblclick',function(event){
    map.setCenter(event.latLng);
        var marker = new google.maps.Marker({//双击的时候给个标记,并显示个信息
              map: map,                               
              position: event.latLng,    //注意此处,获取标记的经纬度的方法
              zIndex:1,
              draggable:true,
              title:'my tag'
        });
        infowindow.setContent('my home');
        infowindow.open(map, marker);
    });
    //鼠标移动
    google.maps.event.addListener(map,'mouseover',function(){
        //alert("run mouseover");
    });
}

//导航处理
function route() {
      // Clear any previous route boxes from the map
      clearBoxes();
    
      // Convert the distance to box around the route from miles to km
      distance = parseFloat(400) * 1.609344;
    
      /**
      DirectionsRequest 对象 一共有10个可配置参数
      导航DirectionService.route方法必须的参数对象 有三个必须配置的属性:开始地点、目的地,导航类型
      */
      var request = {
        origin: document.getElementById("from").value,            //开始地点 可以为地点名或者LatLng对象
        destination: document.getElementById("to").value,        //目的地   可以为地点名或者LatLng对象
        provideRouteAlternatives: true,                            //是否提供替代路线 可选参数
        travelMode: google.maps.DirectionsTravelMode.DRIVING    //导航类型 BICYCLING(自行车方式)、DRIVING(驾车)、WALKING(自定义)
      }
    
      /*导航方法。参数为DirectionsRequest 和一个回调函数
          其中回调函数的参数为
          1、DirectionsResult 只有一个属性 DirectionsRoute[]对象数组。
              当DirectionsRequest 中的provideRouteAlternatives 设置为true 时有多个数据集,否则数组的长度为1
          2、DirectionsStatus
      */
      directionService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsRenderer.setDirections(result);  
          alert("共有 " + result.routes.length + " 种导航方案");
          /*DirectionsRoute 对象    导航路线的对象
            
          */
          var path = result.routes[0].overview_path; //返回 DirectionsRoute 对象
          var boxes = routeBoxer.box(path, distance); //通过 routeBoxer对象画出路线图
          drawBoxes(boxes);
        } else {
          alert("Directions query failed: " + status);
        }
      });
    }
  
  
  
    // 描路线的方法
    function drawBoxes(boxes) {
      boxpolys = new Array(boxes.length);
      for (var i = 0; i < boxes.length; i++) {
    // alert(boxes[i]);
    //画矩形点描出路径
        boxpolys[i] = new google.maps.Rectangle({    //构造器的参数 RectangleOptions类型
        /*
            RectangleOptions:共9个可配置参数 详细见API
              
        */
          bounds: boxes[i],        //LatLngBounds 对象,描点的位置
          fillOpacity: 0,        //背景的不透明度 0为透明
          strokeOpacity: 0.5,    //导航线的透明度 0为透明
          strokeColor: '#000000',    //背景颜色
          strokeWeight: 1,        //宽度
          map: map
        });
      }
    }
  
    // 清除路线缓存
    function clearBoxes() {
      if (boxpolys != null) {
        for (var i = 0; i < boxpolys.length; i++) {
          boxpolys[i].setMap(null);
        }
      }
      boxpolys = null;
    }

</script>
</head>

<body onload="initialize()">
<div id="map_canvas" style="width: 500; height: 500;"></div>
<div>
    <input id="address" type="textbox" value="襄樊">
    <input type="button" value="查询" onclick="codeAddress()">
    <input type="button" value="显示中心点" onclick="codeLatLng()">
</div>
<br>
从<input id="from" type="text" value="襄樊人民广场">
到<input id="to" type="text" value="襄樊诸葛亮广场">
<input type="button" value="导航" onclick="route()">



</body>
</html>

分享到:
评论
2 楼 tlk20071 2011-11-30  
我现在要写一个类似的东西,但是一点都不熟悉,你能不能帮忙讲解一下,我QQ:751576965
1 楼 tlk20071 2011-11-30  
你这个当搜索的时候就在地图上显示一条数据啊,你知道怎么让他把合适的都显示出来吗?要是类似于Google 在左边全部显示出来,点击后能在地图上显示出来就好啦

相关推荐

    Android Google Map 源码_轨迹回放

    Android Google Map 轨迹回放源码, 可以用Google Map实现gps动态导航的功能. 参看博客地址:http://blog.csdn.net/ostrichmyself/article/details/6821112

    最大后验概率 MAP 准则matlab源码

    最大后验概率 MAP 准则以及matlab源码

    [zip文件] Android Google Map 源码_轨迹回放 优化版本

    最新版本的Android Google Map 轨迹回放源码, 可以用Google Map实现gps动态导航的功能. 参看博客地址:http://blog.csdn.net/ostrichmyself/article/details/6821112, 修正两个问题: 1. 不能重复播放 2. 拖动才能...

    RTAB-MAP开源视觉-激光-里程计SLAM代码

    RTAB-MAP压缩包里有以下个开源代码: 1、RTAB-Map as an open-source lidar and visual simultaneous localization and mapping library for large-scale and long-term online operation-2018.pdf 2、RTABMAP_...

    应用源码之调用GoogleMap源码,点击事件在注释里面.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    android上百例精品实例源码(非常值得下载)收藏

    android写的google map api 应用.rar android基于自定义适配器的ExpandableListView.zip Android无线点餐系统.rar Android模仿乐淘的应用程序分析源码.zip android源代码分析.rar android源码一个柱状图的Demo.zip ...

    调用GoogleMap源码,点击事件在注释里面.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    STL源码剖析

    大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/...

    Echarts最全教程文档和源码

    考究官网代码和网上各种杂七杂八代码,最终整理和分析形成了该套最完整的echarts文档,因为文档是采用了word中VBA功能,应用了滚动下拉框形式,所以无法在手机正常查看,该套教程包含了源码+插件+分析+截图+备注+总结,...

    Meta网站系统源码.rar

    前些日子,需要做web程序,拿了CommunityServer参考,觉有些意思,就学着弄了一个简单的网站系统,并发布到csdn. 由于对asp.net不熟悉,更是用了一些练习时的自定义控件,界面十分牵强简陋.感到不安. 最近抽时间修缮了...

    Android应用开发从入门到精通及所附源码(android最新版实现)

    其中FindFriend中的google map最难实现,因为google map v2版本例子很少,确实实现这个例子花了不少周折。这是我初经学android是看的书,但是里边的例子大多已经过时,google 不再支持一些函数接口了,所以我特地用...

    标准模板库之map示例代码

    C++入门学习——标准模板库之map,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/48497983

    【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 初始化 Map 集合 遍历 Map 集合 ).zip

    【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 ) https://hanshuliang.blog.csdn.net/article/details/113700234 博客源码快照

    基于OpenStreetMap+PostGIS的地理位置系统.zip

    正是有此类高质量高活跃的公益组织的贡献,使得个人或者一个较小团队也能做出媲美GoogleMap、高德地图之类高质量的GIS系统。 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125456279

    android精品源码

    这个包中的所有例子。 Android 实现自动接听和挂断电话功能.zip android 悬浮窗 监视内容.rar android 指南针 源码.rar Android 瀑布流 Demo.rar Android 版本检测与管理.rar Android 电子杂志(带翻页效果)源码....

    LocationMap(源码).rar

    自己做的地图规划软件开源啦!在线加载地图,支持输入经纬度,点击地图获取地理位置,根据位置添加覆盖图,支持地图测距,中心点保存等功能,方便布局规划

    SpringBoot实现登陆注册源码

    SpringBoot写一个登陆注册功能,开发工具使用IDEA,技术使用SpringBoot2.1.3+Mybatis+Jpa+mysql,项目中主要使用Mybatis,jpa只做了demo,实体转换使用的是mapstruct,集成了swagger文档配置,redis缓存demo,代码...

    基于QT+Mysql实现的疫情下低风险旅行模拟系统.zip

    资源包含文件:设计报告word+...Way模块:定义一个类,用于存放路径的时刻表,包含起止城市、起止时间、交通工具、耗时 Main:实现日志功能 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125033368

    PDF.NET Ver4.5开源源码

    框架的主要特征: •WinForm/WebForm 数据控件、智能表单 ...本框架是在原来Ver 3.0的基础上再次开源,详情请看 http://topic.csdn.net/u/20120928/16/3fdd1c13-700e-47b1-95b7-27c144a863c1.html?97903

Global site tag (gtag.js) - Google Analytics