概述:

通过获取百度地铁图数据,将北京市地铁图在Arcgis for js中实现展示。

效果:

初始化效果

放大后

鼠标经过线路高亮并显示名称

点击显示站点信息

实现:

1、获取地铁数据

a、打开百度地铁图

在chrom中输入地址http://map.baidu.com/subways/index.html?c=beijing

b、获取网络资源

按下f12,切换到NetWork面板,刷新页面,会出现如下所示:

在新的面板中打开对应的链接,即为北京地铁的原始数据,格式为xml

c、将xml转换为json

利用网络xml2json转换工具将xml转换为json,工具地址为http://www.bejson.com/go.php?u=http://www.bejson.com/xml2json/

2、将站点和线路添加到地图上

将上述转换后的json定义为一个变量,单独存储为一个js文件。在map的load事件完成后将站点和线路添加到地图,代码如下:

            map.on("load",function(){var legendDiv = $("<div />").addClass("legend-box").appendTo($("#map"));var titleDiv = $("<div />").addClass("tr-title").appendTo(legendDiv).html("图例");var legendTab = $("<table />").appendTo(legendDiv).hide();titleDiv.on("click",function(){if(!legendTab.is(":hidden")){legendTab.hide();}else{legendTab.show();}});var mulPt = new Multipoint();var subLines = subData.sw.l;for(var i= 0,ll =subLines.length;i<ll;i++){var sms = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,8,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[i]),3),new Color([255,255,255]));var pms = PictureMarkerSymbol('chg_stat.png', 12, 12);var sls = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[i]),4);var trItem = $("<tr />").appendTo(legendTab);var legendColor = $("<div />").addClass("legend-item-color").css("background",color[i]);var legendText = $("<div />").addClass("legend-item-text").html(subLines[i].lid);var tdColor = $("<td />").appendTo(trItem).append(legendColor);var tdText = $("<td />").appendTo(trItem).append(legendText);var stops = subLines[i].p;var line = new Array();for(var j= 0,sl =stops.length;j<sl;j++){var scrPt = new esri.geometry.ScreenPoint(stops[j].x,stops[j].y);var mapPt = map.toMap(scrPt);mulPt.addPoint(mapPt);line.push([mapPt.x,mapPt.y]);if(stops[j].st==="true"){var smb = sms;var font  = new esri.symbol.Font();font.setSize("10px");font.setFamily("微软雅黑");if(stops[j].ex==="true"){smb = pms;font.setWeight("bold");}var gStop = new Graphic(mapPt,smb,stops[j]);subwayStop.add(gStop);var ts = new esri.symbol.TextSymbol(stops[j].lb);ts.setFont(font);ts.setOffset(0,5);var gTxtStop = new Graphic(mapPt,ts);subwayLabel.add(gTxtStop);}}if(subLines[i].loop==="true"){var scrPt = new esri.geometry.ScreenPoint(stops[0].x,stops[0].y);var mapPt = map.toMap(scrPt);line.push([mapPt.x,mapPt.y]);}var subLine = new Polyline({"paths":[line],"spatialReference":{"wkid":4326}});var gLine = new Graphic(subLine,sls,subLines[i]);subwayLine.add(gLine);}var trItem = $("<tr />").appendTo(legendTab);var legendColor = $("<img />").attr("src","chg_stat.png").attr("width","15px").attr("height","15px");var legendText = $("<div />").addClass("legend-item-text").html("换乘站点");var tdColor = $("<td />").appendTo(trItem).append(legendColor);var tdText = $("<td />").appendTo(trItem).append(legendText);map.setExtent(mulPt.getExtent().expand(1.5));});

3、添加地图事件

添加鼠标经过和单机等事件,代码如下:

            map.on("zoom-end",function(){var level =map.getLevel();if(level>0){subwayLabel.show();}else{subwayLabel.hide();}});subwayStop.on("mouse-over",function(evt){var scrPt = map.toScreen(evt.graphic.geometry);var statName = evt.graphic.attributes.lb;var stopName = $("<div />").attr("id","stopName").addClass("stat-name-box").html(statName).css("left",scrPt.x).css("top",scrPt.y+20).appendTo($("#map"));map.setMapCursor("pointer");});subwayStop.on("mouse-out",function(evt){$("#stopName").remove();map.setMapCursor("default");});subwayStop.on("click",function(evt){var stopName= evt.graphic.attributes.lb;var lineName = evt.graphic.attributes.ln;lineName = lineName.split(",");var title = "<span style='font-weight: bold;'>"+stopName+"</span>";var content="<span style='font-weight: bold;'>可乘坐</span>:<br />";for(var i=0;i<lineName.length;i++){var pathName = lineName[i].split("|")[1];content = content+pathName+"<br />";}map.infoWindow.setTitle(title);map.infoWindow.setContent(content);map.infoWindow.show(evt.graphic.geometry);$(".maximize").hide();});subwayLine.on("mouse-over",function(evt){var scrPt = map.toScreen(evt.mapPoint);var lineTitle = evt.graphic.attributes.lb;var lineName = $("<div />").attr("id","lineName").addClass("stat-name-box").html(lineTitle).css("left",scrPt.x).css("top",scrPt.y+20).appendTo($("#map"));map.setMapCursor("pointer");evt.graphic.symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color("#00ffff"),4);subwayLine.redraw();});subwayLine.on("mouse-out",function(evt){$("#lineName").remove();map.setMapCursor("default");evt.graphic.symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[evt.graphic.attributes.i-1]),4);subwayLine.redraw();});subwayLine.on("click",function(evt){var geometry = evt.graphic.geometry;var stops = evt.graphic.attributes.p;var startStop =stops[0],endStop=stops[stops.length-1];var scrStart = new esri.geometry.ScreenPoint(startStop.x,startStop.y);var scrEnd = new esri.geometry.ScreenPoint(endStop.x,endStop.y);var startPt = map.toMap(scrStart);var endPt = map.toMap(scrEnd);var startName = startStop.lb, endName = endStop.lb;var font  = new esri.symbol.Font();font.setSize("8pt");font.setFamily("微软雅黑");var startText = new esri.symbol.TextSymbol(startName),endText = new esri.symbol.TextSymbol(endName);startText.setFont(font), endText.setFont(font);startText.setColor(new dojo.Color([0,0,0,100])),endText.setColor(new dojo.Color([0,0,0,100]));subwayLabel.add(new Graphic(startPt, startText));subwayLabel.add(new Graphic(endPt, endText));map.setExtent(geometry.getExtent().expand(1.8));});

到此,基本功能已完成,完整代码如下:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><title>北京地铁</title><link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.9/3.9/js/esri/css/esri.css"><style>html, body, #map{height: 100%;width: 100%;margin: 0;padding: 0;}.stat-name-box{position: absolute;left: 0px;top: 0px;z-index: 10;border: rgb(139, 164, 220) 1px solid;width: auto;height: auto;font:normal 11px "宋体",Arial;color: rgb(0, 0, 0);background: rgb(255, 255, 255);box-shadow: rgba(0, 0, 0, 0.34902) 2px 2px 3px;border-radius: 3px;padding: 3px 5px;}.legend-box{position: absolute;top: 10px;right: 10px;z-index: 10;border: rgb(139, 164, 220) 1px solid;width: 130px;height: auto;color: rgb(0, 0, 0);background: rgb(255, 255, 255);box-shadow: rgba(0, 0, 0, 0.34902) 2px 2px 3px;border-radius: 3px;}tr{padding: 2px 8px;}.tr-title{text-align: center;font:bold 13px "宋体",Arial;padding: 3px 0px;background: rgb(139, 164, 220);color: #ffffff;border-radius: 3px;}.tr-title:hover{cursor: pointer;}.legend-item-color{width: 10px;height: 10px;float: left;background: rgb(139, 164, 220);margin-top: 5px;}.legend-item-text{font:normal 8px "宋体",Arial;padding: 3px 5px;float: left;}</style><script src="http://localhost/arcgis_js_api/library/3.9/3.9/init.js"></script><script src="bj_sub_data.js"></script><script src="jquery-1.8.3.js"></script><script>var map;var color = ["#d92528","#166db2","#02a9bb","#b51c84","#bd9001","#ff9000","#17997d","#90ba78","#0696cb","#ffd600","#f55585","#714286","#00a9bc","#ca1e72","#ed9aac","#cd2c24","#eb5e19","#ac96bd"];require(["esri/map","esri/layers/ArcGISTiledMapServiceLayer","esri/layers/GraphicsLayer","esri/graphic","esri/geometry/Point","esri/geometry/Multipoint","esri/geometry/Polyline","esri/SpatialReference","esri/symbols/SimpleMarkerSymbol","esri/symbols/PictureMarkerSymbol","esri/symbols/SimpleLineSymbol", //简单线符号"dojo/_base/Color","dojo/domReady!"],function(Map,Tiled,GraphicsLayer,Graphic,Point,Multipoint,Polyline,SpatialReference,SimpleMarkerSymbol,PictureMarkerSymbol,SimpleLineSymbol,Color) {map = new Map("map",{logo:false});var tiled = new Tiled("http://localhost:6080/arcgis/rest/services/BJ/MapServer",{"id":"tiled"});map.addLayer(tiled);tiled.hide();var pt = new Point(116.88590597052463,40.37521501133166);map.centerAndZoom(pt, 1);var subwayStop = new GraphicsLayer({"id":"subwayStop"});var subwayLine = new GraphicsLayer({"id":"subwayLine"});var subwayLabel = new GraphicsLayer({"id":"subwayLabel"});map.addLayer(subwayLine);map.addLayer(subwayStop);map.addLayer(subwayLabel);subwayLabel.hide();map.on("zoom-end",function(){var level =map.getLevel();if(level>0){subwayLabel.show();}else{subwayLabel.hide();}});subwayStop.on("mouse-over",function(evt){var scrPt = map.toScreen(evt.graphic.geometry);var statName = evt.graphic.attributes.lb;var stopName = $("<div />").attr("id","stopName").addClass("stat-name-box").html(statName).css("left",scrPt.x).css("top",scrPt.y+20).appendTo($("#map"));map.setMapCursor("pointer");});subwayStop.on("mouse-out",function(evt){$("#stopName").remove();map.setMapCursor("default");});subwayStop.on("click",function(evt){var stopName= evt.graphic.attributes.lb;var lineName = evt.graphic.attributes.ln;lineName = lineName.split(",");var title = "<span style='font-weight: bold;'>"+stopName+"</span>";var content="<span style='font-weight: bold;'>可乘坐</span>:<br />";for(var i=0;i<lineName.length;i++){var pathName = lineName[i].split("|")[1];content = content+pathName+"<br />";}map.infoWindow.setTitle(title);map.infoWindow.setContent(content);map.infoWindow.show(evt.graphic.geometry);$(".maximize").hide();});subwayLine.on("mouse-over",function(evt){var scrPt = map.toScreen(evt.mapPoint);var lineTitle = evt.graphic.attributes.lb;var lineName = $("<div />").attr("id","lineName").addClass("stat-name-box").html(lineTitle).css("left",scrPt.x).css("top",scrPt.y+20).appendTo($("#map"));map.setMapCursor("pointer");evt.graphic.symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color("#00ffff"),4);subwayLine.redraw();});subwayLine.on("mouse-out",function(evt){$("#lineName").remove();map.setMapCursor("default");evt.graphic.symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[evt.graphic.attributes.i-1]),4);subwayLine.redraw();});subwayLine.on("click",function(evt){var geometry = evt.graphic.geometry;var stops = evt.graphic.attributes.p;var startStop =stops[0],endStop=stops[stops.length-1];var scrStart = new esri.geometry.ScreenPoint(startStop.x,startStop.y);var scrEnd = new esri.geometry.ScreenPoint(endStop.x,endStop.y);var startPt = map.toMap(scrStart);var endPt = map.toMap(scrEnd);var startName = startStop.lb, endName = endStop.lb;var font  = new esri.symbol.Font();font.setSize("8pt");font.setFamily("微软雅黑");var startText = new esri.symbol.TextSymbol(startName),endText = new esri.symbol.TextSymbol(endName);startText.setFont(font), endText.setFont(font);startText.setColor(new dojo.Color([0,0,0,100])),endText.setColor(new dojo.Color([0,0,0,100]));subwayLabel.add(new Graphic(startPt, startText));subwayLabel.add(new Graphic(endPt, endText));map.setExtent(geometry.getExtent().expand(1.8));});map.on("load",function(){var legendDiv = $("<div />").addClass("legend-box").appendTo($("#map"));var titleDiv = $("<div />").addClass("tr-title").appendTo(legendDiv).html("图例");var legendTab = $("<table />").appendTo(legendDiv).hide();titleDiv.on("click",function(){if(!legendTab.is(":hidden")){legendTab.hide();}else{legendTab.show();}});var mulPt = new Multipoint();var subLines = subData.sw.l;for(var i= 0,ll =subLines.length;i<ll;i++){var sms = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,8,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[i]),3),new Color([255,255,255]));var pms = PictureMarkerSymbol('chg_stat.png', 12, 12);var sls = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color(color[i]),4);var trItem = $("<tr />").appendTo(legendTab);var legendColor = $("<div />").addClass("legend-item-color").css("background",color[i]);var legendText = $("<div />").addClass("legend-item-text").html(subLines[i].lid);var tdColor = $("<td />").appendTo(trItem).append(legendColor);var tdText = $("<td />").appendTo(trItem).append(legendText);var stops = subLines[i].p;var line = new Array();for(var j= 0,sl =stops.length;j<sl;j++){var scrPt = new esri.geometry.ScreenPoint(stops[j].x,stops[j].y);var mapPt = map.toMap(scrPt);mulPt.addPoint(mapPt);line.push([mapPt.x,mapPt.y]);if(stops[j].st==="true"){var smb = sms;var font  = new esri.symbol.Font();font.setSize("10px");font.setFamily("微软雅黑");if(stops[j].ex==="true"){smb = pms;font.setWeight("bold");}var gStop = new Graphic(mapPt,smb,stops[j]);subwayStop.add(gStop);var ts = new esri.symbol.TextSymbol(stops[j].lb);ts.setFont(font);ts.setOffset(0,5);var gTxtStop = new Graphic(mapPt,ts);subwayLabel.add(gTxtStop);}}if(subLines[i].loop==="true"){var scrPt = new esri.geometry.ScreenPoint(stops[0].x,stops[0].y);var mapPt = map.toMap(scrPt);line.push([mapPt.x,mapPt.y]);}var subLine = new Polyline({"paths":[line],"spatialReference":{"wkid":4326}});var gLine = new Graphic(subLine,sls,subLines[i]);subwayLine.add(gLine);}var trItem = $("<tr />").appendTo(legendTab);var legendColor = $("<img />").attr("src","chg_stat.png").attr("width","15px").attr("height","15px");var legendText = $("<div />").addClass("legend-item-text").html("换乘站点");var tdColor = $("<td />").appendTo(trItem).append(legendColor);var tdText = $("<td />").appendTo(trItem).append(legendText);map.setExtent(mulPt.getExtent().expand(1.5));});});</script>
</head>
<body>
<div id="map">
</div>
</body>
</html>

Arcgis for js实现北京地铁的展示相关推荐

  1. (转) Arcgis for js加载百度地图

    http://blog.csdn.net/gisshixisheng/article/details/44853709 概述: 在前面的文章里提到了Arcgis for js加载天地图,在本节,继续讲 ...

  2. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  3. 【Python Onramp】7. web端可视化:北京地铁数据统计分析实例以及简易Echarts绘图

    系列文章目录 见[Python Onramp] 0. 卷首语 上一篇:[Python Onramp]6.一篇文章了解web开发要点:用Python开发简易的网页端成绩查询系统 下一篇:[Python ...

  4. Arcgis for js,Openlayers中加载GeoJSON

    概述: 在前文中,讲述了在JAVA环境下如何将shp转换为GeoJSON,在本文,分别讲述在Arcgis for js,Openlayers2和Openlayers3中加载展示GeoJSON. 实现: ...

  5. Arcgis for JS之Cluster聚类分析的实现

    原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...

  6. (转载)arcgis for js - 解决加载天地图和WMTS服务,WMTS服务不显示的问题,以及wmts服务密钥。...

    1 arcgis加载天地图和wmts服务 arcgis for js加载天地图的例子网上有很多,这里先不写了,后期有空再贴代码,这里主要分析下WMTS服务为什么不显示,怎么解决. 条件:这里的WMTS ...

  7. (转)Arcgis for Js之鼠标经过显示对象名的实现

    http://blog.csdn.net/gisshixisheng/article/details/41889345 在浏览地图时,移动鼠标经过某个对象或者POI的时候,能够提示该对象的名称对用户来 ...

  8. (转) 基于Arcgis for Js的web GIS数据在线采集简介

    http://blog.csdn.net/gisshixisheng/article/details/44310765 在前一篇博文"Arcgis for js之WKT和geometry转换 ...

  9. (转)Arcgis for JS之Cluster聚类分析的实现

    http://blog.csdn.net/gisshixisheng/article/details/40711075 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来的,包含 ...

最新文章

  1. 网络流媒体协议 RTSP协议
  2. 编程语言学习--C语言学习资料
  3. Ansible中的变量及加密
  4. Robotframework与unittest对比
  5. Neo4j:带密码的TF / IDF(和变体)
  6. C语言中输入输出格式控制
  7. 闭门宅家后,才知道这15个“真相”
  8. 2020年软件工程现状:Python或将成为第一大编程语言,中国开源涨势最猛
  9. 小白设计模式:桥接模式
  10. Android7.1开机启动脚本
  11. python爬取京东数据加载失败_Python爬取京东商品数据
  12. 具体数学-第5课(8种方法求和)
  13. ubuntu,装完PYTHON3 pip3 install 报错
  14. 隐藏与显现_惠州楼盘冷热不均价格涨跌互现 差异化调控作用显现
  15. 详细安装 kali 教程 和 基本命令使用
  16. 用php打印出日历_PHP完成一个日历
  17. 图片裁剪源代码+php,php进行图片裁剪及生成缩略图程序源代码
  18. html白色背景遮罩,CSS 给图片或背景图片加颜色遮罩
  19. 51nod1538: 一道难题(特征多项式+多项式取模/求逆)
  20. java 四舍六入五成双

热门文章

  1. Cocos2dx 使用obb扩展包
  2. 安卓渐变的背景框实现
  3. arch linux 出现 edb7,EDB Linux Debugger 0.9.16
  4. 共话机器翻译新风向,第二届小牛翻译论坛启幕在即
  5. 怎样批量、快速、一次性删除QQ好友
  6. ppt插入的flash有白边的问题
  7. 对抗生成网络学习(十)——attentiveGAN实现影像去雨滴的过程(tensorflow实现)
  8. Windows系统 lusrmgr命令详解,Windows命令行查看本地用户和组
  9. 2022年 安全智能分析技术白皮书 模型开发
  10. 数电实验(组合逻辑电路、时序电路,555定时器)