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

概述:

在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用。

相关文章地址:

http://blog.csdn.net/gisshixisheng/article/details/39577817

实现后效果:

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

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

显示信息

实现思路:

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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 20:46:06

Arcgis for javascript实现百度地图ABCD marker的效果的相关文章

百度地图JavascriptApi Marker平滑移动及车头指向行径方向

相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳"一样,一蹦一蹦的给客户看分分钟鄙视你到不能自已.另外如果用的是有指向性图标ICON的时候,更会引来吐槽~诶诶诶,你这小车车怎么在这个立交桥转弯的时候车头向着后面呢?怎么搞得嘛你!会不会弄啊你! 所以今天参照百度大大提供的路书开源文件实现下自己的需求,记录一下以便提供参考. 一.覆盖物在获取坐标数据的同

javascript调用百度地图,以及城市的初始化

地图的构建非常简单,官方的API文档也写得很清晰,我只做一总结: 一.引入JS:这个很容易理解,既然是调用JS版的百度地图,肯定得引用外部的JS文件了,而这个文件来自百度的服务器(所以必须得联网,不然就没戏..),我们以后用到的所有方法都写在这个JS文件当中. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script> 这里的1.4为JS版

百度地图 判断marker是否在多边形内

昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 百度地图API覆盖物多边形类 http://developer.baidu.com/map/reference/index.php?title=Class:%E8%A6%86%E7%9B%96%E7%89%A9%E7%B1%BB/Polygon http://developer.baidu.com/map/reference/index.php?title=Class:%E8%A6%86%E7%9B%96%

ArcMap和ArcGIS Pro加载百度地图

前面发布了两篇我用ArcBruTile开发用于ArcMap加载百度地图的插件ArcBruTileBaidu,放在网上后评论和反响还不错,还有两位大学同学通过百度搜索居然搜到我本人!文章和技术介绍也被网络上复制粘贴了很多次,开发了那么多没人用的数字城市平台软件和GIS系统,这一个工具才感觉自己还有点用. 毕竟只是茶余饭后的兴趣爱好,对该插件升级和维护的也不是很及时,也导致很多需求没跟上,对不起各位用户. ArcBruTileBaidu插件有如下几个大的缺陷: 1.    需要下载安装包进行安装,极

ArcGIS JS 学习笔记1 用ArcGIS JS 实现仿百度地图的距离量测和面积量测

一.开篇 在博客注册了三年,今天才决定写第一篇博客,警告自己不要懒!!! 二.关于ArcGIS JS 版本选择 在写这篇博客时ArcGIS JS 4.0正式版已经发布.它和3.x版本的不同是,Map不在是一个控件,而真的只是一张“图”,Map(4.0版本)需要在一个View里面来展示,在MapView里面就是一张平面图,在SceneView里面就一张三维地图.同一张地图在不同的View里面就可以呈现出不同的效果.但是4.0版本才是一个最初的版本,还有很多3.x有的功能没有被加入到其中.所以我打算

ArcGIS for javascript API 实现地图卷帘效果

这个是今天在群里听到有人做了这个功能,于是产生了兴趣.也想来尝试下,参照了KK在github上的例子https://github.com/kunkun12/MapSwipe,例子写得很详细,我这里就不在赘述了.先看效果图: 其实原理很简单,就是设置第二次add进来的Layer的div容器的宽和高. 这里说下我从中学到的一下小的体会吧:在上面有2个radio button按钮,我们在选择水平卷帘或是垂直卷帘时,要对这个按钮做一个判断,这里巧妙的用这种写法 var isverticalswipe=f

使用百度地图JavaScript实现驾车/公交/步行导航功能

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 5 <style type="text/

百度地图API JavaScript显示人员分布信息

效果图贴下: js代码贴下: <body> <div id="div-map"></div></body></html><script type="text/javascript">$(function(){ // 百度地图API功能 var map = new BMap.Map("div-map"); map.centerAndZoom(new BMap.Point(106

Android studio 百度地图开发(6)Marker绑定事件、计算两点距离

email:[email protected] 开发环境:win7 64位,Android Studio,请注意是Android Studio,使用的导航SDK版本:3.1.0. 百度地图应用(1):Android studio 百度地图开发(1)配置工程.显示地图 百度地图应用(2):Android studio 百度地图开发(2)地图定位 百度地图应用(3):Android studio 百度地图开发(3)地图导航 百度地图应用(4):Android studio 百度地图开发(4)触摸选点