基于Arcgis for javascript实现百度地图ABCD marker的效果

先给大家展示实现后效果:

为直观期间,先贴出来我做的效果

列表展示和地图展示以及联动

显示信息

实现思路:

1、列表与地图的互动

鼠标经过列表时,修改列表图标,并根据列表返回的值在地图上绘蓝色的marker;鼠标移出,修改列表图标为红色,清空地图marker图层。

关键代码:

title.on("mouseover",function(){
 var attr = $(this).data("attr");
 $("#icon"+attr.id).css("background","url('images/blue.png')");
 var pt=new Point(attr.x,attr.y,{"wkid":4326});
 var pms = new esri.symbol.PictureMarkerSymbol("images/blue.png",24,26)
 var gImg = new Graphic(pt,pms);
 gLyrHover.add(gImg);
});
title.on("mouseout",function(){
 var attr = $(this).data("attr");
 $("#icon"+attr.id).css("background","url('images/red.png')");
 gLyrHover.clear();
});

2、地图与列表的互动

鼠标经过地图红色的marker时,修改对应列表图标,并将红色 marker的图片换成蓝色的;鼠标移出,修改对应列表图标,并修改marker为红色。

关键代码:

gLyr.on("mouse-over",function(e){
 map.setMapCursor("pointer");
 var sms = e.graphic.symbol;
 sms.url = "images/blue.png";
 gLyr.redraw();
 $("#icon"+e.graphic.attributes.id).css("background","url('images/blue.png')");
});
gLyr.on("mouse-out",function(e){
 map.setMapCursor("default");
 var sms = e.graphic.symbol;
 sms.url = "images/red.png";
 gLyr.redraw();
 $("#icon"+e.graphic.attributes.id).css("background","url('images/red.png')");
}); 

3、地图上ABCD的文字是一个单独的图层,不参与互动。

4、数据以JSON形式存在。

var data = [
 {
 "id":"A","name":"拉萨", "x":91.162998, "y":29.71042,
 "desc":"拉萨是中国西藏自治区的首府,西藏的政治、经济、文化和宗教中心,也是藏传佛教圣地。"
 },
 {
 "id":"B", "name":"西宁","x":101.797303,"y":36.593642,
 "desc":"西宁是青海省的省会,古称西平郡、青唐城,取”西陲安宁“之意,是整个青藏高原最大的城市。"
 },
 {
 "id":"C","name":"兰州","x":103.584297,"y":36.119086,
 "desc":"兰州,甘肃省省会,西北地区重要的工业基地和综合交通枢纽,西部地区重要的中心城市之一,丝绸之路经济带的重要节点城市。"
 },
 {
 "id":"D","name":"成都","x":104.035508,"y":30.714179,
 "desc":"成都,简称蓉,四川省省会,1993年被国务院确定为西南地区的科技、商贸、金融中心和交通、通讯枢纽。"
 }
];

完整代码:

<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
 <title></title>
 <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.9/3.9/js/esri/css/esri.css">
 <style type="text/css">
 html, body, #map {
  height: 100%;
  margin: 0;
  padding: 0;
  font-size: 62.5%;
  font-family:"微软雅黑";
 }
 .search-box{
  z-index: 99;
  background: #fff;
  border: 1px solid #888888;
  border-radius: 5px;
  width: 220px;
  max-height:600px;
  overflow-y: auto;
  position: absolute;
  top: 120px;
  left: 10px;
 }
 .search-box-title{
  padding: 6px 10px;
  text-align: left;
  font-size: 13px;
  font-weight: bold;
  color: #f2f2f2;
  background: #85b0db;
 }
 .search-box-result{
  list-style: none;
  margin-left:-40px;
  margin-top: 0px;
 }
 .search-box-result-item{
  border-bottom: 1px solid #eeeeee;
  padding: 5px 8px;
 }
 .search-name{
  float: right;
  font-weight: bold;
  font-size: 13px;
  margin-top: 3px;
  margin-right: 10px;
 }
 .search-name-title{
  background: #f2f2f2;
 }
 .search-name-title:hover{
  cursor: pointer;
 }
 .search-detail{
  border-top: 1px dashed #eeeeee;
  margin-top: 3px;
  padding: 3px 5px;
  line-height: 18px;
 }
 .search-icon{
  background: url("images/red.png");
  width: 24px;
  height: 26px;
  background-repeat: no-repeat;
 }
 .search-text{
  color: #ffffff;
  font-weight: bold;
  font-size: 16px;
  margin-left:7px ;
 }
 .detail{
  color: #85b0db;
  font-weight: bold;
  text-align: right;
 }
 .detail:hover{
  cursor: pointer;
 }
 </style>
 <script src="http://localhost/arcgis_js_api/library/3.9/3.9/init.js"></script>
 <script src="jquery-1.8.3.js"></script>
 <script type="text/javascript">
 var map;
 var data = [
  {
  "id":"A","name":"拉萨", "x":91.162998, "y":29.71042,
  "desc":"拉萨是中国西藏自治区的首府,西藏的政治、经济、文化和宗教中心,也是藏传佛教圣地。"
  },
  {
  "id":"B", "name":"西宁","x":101.797303,"y":36.593642,
  "desc":"西宁是青海省的省会,古称西平郡、青唐城,取”西陲安宁“之意,是整个青藏高原最大的城市。"
  },
  {
  "id":"C","name":"兰州","x":103.584297,"y":36.119086,
  "desc":"兰州,甘肃省省会,西北地区重要的工业基地和综合交通枢纽,西部地区重要的中心城市之一,丝绸之路经济带的重要节点城市。"
  },
  {
  "id":"D","name":"成都","x":104.035508,"y":30.714179,
  "desc":"成都,简称蓉,四川省省会,1993年被国务院确定为西南地区的科技、商贸、金融中心和交通、通讯枢纽。"
  }
 ];
 require([
   "esri/map",
   "esri/layers/ArcGISTiledMapServiceLayer",
   "esri/geometry/Point",
   "esri/layers/GraphicsLayer",
   "esri/graphic",
   "dojo/_base/Color",
   "dojo/domReady!"],
  function(Map,
    Tiled,
    Point,
    GraphicsLayer,
    Graphic,
    Color)
  {
   map = new Map("map",{logo:false});
   var tiled = new Tiled("http://localhost:6080/arcgis/rest/services/china/MapServer",{"id":"tiled"});
   map.addLayer(tiled);
   var mapCenter = new Point(103.847, 36.0473, {"wkid":4326});
   map.centerAndZoom(mapCenter,0);
   var gLyr = new GraphicsLayer({"id":"gLyr"});
   map.addLayer(gLyr);
   var gLyrHover = new GraphicsLayer({"id":"gLyrHover"});
   map.addLayer(gLyrHover);
   var gLyrLbl = new GraphicsLayer({"id":"gLyrLbl"});
   map.addLayer(gLyrLbl);
   map.on("load",function(){
   $("#search").show();
   for(var i=0;i<data.length;i++){
    var li = $("<li />").addClass("search-box-result-item").appendTo($("#result"));
    var name = $("<div />").addClass("search-name").html(data[i].name);
    var icon = $("<div />").addClass("search-icon")
     .attr("id","icon"+data[i].id)
     .append("<div class='search-text'>"+data[i].id+"</div>");
    var title = $("<div />").addClass("search-name-title")
     .append(name).append(icon).appendTo(li)
     .data("attr",data[i]);
    var desc = $("<div />").addClass("search-detail").html(data[i].desc).appendTo(li);
    var more = $("<div />").addClass("detail").appendTo(li).html(">>详细");
    title.on("mouseover",function(){
    var attr = $(this).data("attr");
    $("#icon"+attr.id).css("background","url('images/blue.png')");
    var pt=new Point(attr.x,attr.y,{"wkid":4326});
    var pms = new esri.symbol.PictureMarkerSymbol("images/blue.png",24,26)
    var gImg = new Graphic(pt,pms);
    gLyrHover.add(gImg);
    });
    title.on("mouseout",function(){
    var attr = $(this).data("attr");
    $("#icon"+attr.id).css("background","url('images/red.png')");
    gLyrHover.clear();
    });
    title.on("click",function(){
    var attr = $(this).data("attr");
    showCity(attr);
    });
    var pt=new Point(data[i].x,data[i].y,{"wkid":4326});
    var pms = new esri.symbol.PictureMarkerSymbol("images/red.png",24,26)
    var gImg = new Graphic(pt,pms,data[i]);
    gLyr.add(gImg);
    var font = new esri.symbol.Font();
    font.setSize("10pt");
    font.setFamily("微软雅黑");
    var text = new esri.symbol.TextSymbol(data[i].id);
    text.setOffset(0,-2);
    text.setFont(font);
    text.setColor(new dojo.Color([255,255,255,100]));
    var gLbl = new esri.Graphic(pt,text,data[i]);
    gLyrLbl.add(gLbl);
   }
   gLyr.on("mouse-over",function(e){
    map.setMapCursor("pointer");
    var sms = e.graphic.symbol;
    sms.url = "images/blue.png";
    gLyr.redraw();
    $("#icon"+e.graphic.attributes.id).css("background","url('images/blue.png')");
   });
   gLyr.on("mouse-out",function(e){
    map.setMapCursor("default");
    var sms = e.graphic.symbol;
    sms.url = "images/red.png";
    gLyr.redraw();
    $("#icon"+e.graphic.attributes.id).css("background","url('images/red.png')");
   });
   gLyr.on("click",function(e){
    var attr = e.graphic.attributes;
    showCity(attr);
   });
   }); 

   function showCity(attr){
   var pt=new Point(attr.x,attr.y,{"wkid":4326});
   map.infoWindow.setTitle(attr.name);
   map.infoWindow.setContent(attr.desc);
   map.infoWindow.resize(200,80);
   map.infoWindow.show(pt);
   map.centerAndZoom(pt,0);
   }
  });
 </script>
</head>
<body>
<div id="search" class="search-box" style="display: none;">
 <div class="search-box-title">查询结果</div>
 <ul class="search-box-result" id="result">
 </ul>
</div>
<div id="map">
</div>
</body>
</html> 

以上内容就是我们小编给大家分享的基于Arcgis for javascript实现百度地图ABCD marker的效果,希望大家喜欢。

(0)

相关推荐

  • js 调用百度地图api并在地图上进行打点添加标注

    最近要做一个网页,具体内容是:上边有一个标题,下边分成两块,左边是地图.并且地图上有两个点,点击两个点有相应的提示信息,显示数据库里最新的两条数据信息.右边是一些文字说明.本人刚开始学习,做的也不是很好 总体效果如下所示: 首先新建map.php文件,代码如下 复制代码 代码如下: <!DOCTYPE html> <?php /* 创建与数据库的连接 */ $conn=mysql_connect("","","") or die

  • 百度地图api应用标注地理位置信息(js版)

    有时做了一些东西没有记录,而过一段时间再看的时候,有会忘记了.需要在重新在看一遍. 百度地图javascript api可以参考 http://developer.baidu.com/map/reference/  示例:http://developer.baidu.com/map/jsdemo.htm 更多百度地图的介绍http://www.cnblogs.com/milkmap/tag/%E5%9C%B0%E5%9B%BEAPI/   里面介绍的非常详细. 弄了一个百度地图来标注地理位置信息

  • 详解Javascript百度地图接口开发文档中的类和方法

    JavaScript API v2.0介绍 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地搜索.路线规划等数据服务. 该套API免费对外开放.自v1.5版本起,您需先申请密钥(ak)才可使用,接口(除发送短信功能外)无使用次数限制. JavaScript API首家支持Https,如需要申请Https服务,请您认证企业信息,成为企业认证用户后,https

  • 基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

    前言 近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,这样才能和现有的GPS数据以及地图匹配. 主要问题和解决方法 本地保存文件跨浏览器支持 由于安全的原因,JavaScript本地保存文件的方式通常都只有IE支持的ActiveXObject/Open方法,每次都要提示不安全和允许运行,非常麻烦.好在其他浏览器目前都支持<a>标签实现文件下载的方法.经测试最新的Goog

  • 通过百度地图获取公交线路的站点坐标的js代码

    最近做百度地图的模拟数据,需要获取某条公交线路沿途站点的坐标信息,貌似百度没有现成的API,因此做了一个模拟页面,工具而已,IE6/7/8不支持 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>获取公交站点坐标</title> <style type="text/css"> html,b

  • js调用百度地图及调用百度地图的搜索功能

    js调用百度地图的方法 代码如下: <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&

  • JS中引用百度地图并将百度地图的logo和信息去掉

    采用CSS覆盖的方法就可以了,但是官方是不允许这么做的,参考:http://developer.baidu.com/map/question.htm 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>javascript移除百度地图LOGO和版权信息</title> <script type="text/j

  • 如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)

    以下是使用js代码实现百度地图计算两地距离,代码如下所示: <script src="js/jquery-1.9.0.js" type="text/javascript" language="javascript"></script> <script language="javascript" type="text/javascript" src="js/area.j

  • javascript使用百度地图api和html5特性获取浏览器位置

    复制代码 代码如下: <!DOCTYPE html><html><body><p id="demo">点击这个按钮,获得您的位置:</p><button onclick="getLocation()">试一下</button><script src="http://api.map.baidu.com/api?v=1.4" type="text/ja

  • javascript实现百度地图鼠标滑动事件显示、隐藏

    其实现思路是给label设置样式,我们来看下具体做法吧 var label = new BMap.Label("我是文字标注哦",{offset:new BMap.Size(20,-10)}); label.setStyle({ display:"none" //给label设置样式,任意的CSS都是可以的 }); marker.setLabel(label); marker.addEventListener("mouseover", funct

随机推荐