自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 732|回复: 1
打印 上一主题 下一主题

【云图】如何制作东莞酒店地图?

[复制链接]
最佳答案
1 

11

主题

15

帖子

142

积分

版主

Rank: 7Rank: 7Rank: 7

积分
142
跳转到指定楼层
楼主
发表于 2014-8-27 14:29:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 catalina007 于 2014-8-27 14:32 编辑

摘要:今天到深圳参加第二届电博会,果然不像车展或者漫展那样,会有萌妹纸,大家都好素净。晚上去东莞玩一圈,发现订不到酒店啊!各种商业中心关闭啊。于是想,那自己制作一张东莞酒店地图玩玩吧。于是在咖啡厅开始写代码,顺便等别人把酒店定好……啊,我果然是程序猿的命麽?!嗯,回到主题,制作好酒店地图,需要增加功能,就是按照星级,或者行政区进行分类查询检索。而且,还可以在云图上任意增减数据。真是出门在外居家旅行必备佳品,哈哈。
---------------------------------------------------------------------------------------
最终效果如下:

第一步,数据准备。
将东莞酒店的数据准备好。酒店数据来源于互联网,数据太多,只摘取部分。
注意,将数据格式保存为CSV。
注意,第一行必须是字段名,只能是字母、数字和下划线,并且不能以数字开头。
注意,经纬度必须分开成2个字段!
注意,文件只支持 .csv 格式、UTF-8编码,数据量不超过 10,000 条,文件大小不超过10M、字段总数不超过 40 个。
字段命名规则:以英文字母开头,仅由英文字母、数字、下划线组成,字段名长度不超过20位。
  1. name,address,district,starlevel,description,image
  2. 东莞太子酒店,中国广东省东莞市黄江镇江北路,黄江镇,五星,"东莞豪京酒店隶属日源(香港)企业有限公司,是集住房、餐饮、休闲、娱乐为一体的现代化涉外商务酒店。酒店位于东莞市厚街镇中心S256省道旁,厚街车站近在咫尺,地理位置优越,交通便利。
  3. 东莞豪京酒店设有豪华客房,菜肴精美而富有特色的亚洲风情餐厅,设备完善的康娱设施;其尊贵的气派,幽雅的欧陆设计、细腻殷勤的款客态度,以及占尽地利的优越位置,诚然是宾客的最佳选择,更不愧为阳光之都,精品会所,让您尽情享受温馨与惬意。东莞豪京酒店将以专业的服务期待您的光临。
  4. ",http://a.hiphotos.baidu.com/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=6543a5053bf33a878a600848a7357b5d/738b4710b912c8fc73b4d0f8fd039245d788d43f87940983.jpg
复制代码


第二步,上传数据至云图。
点击添加地图->导入数据,把刚才的CSV文件导入进来。

第三步,建立索引。
在文本索引和筛选排序索引处,都建立关于星级,还有行政区域的索引。这是为了能够实现云检索。

第四步,云图的渲染。
记录云图层的id,简单写代码即刻渲染。
云图渲染代码:
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>叠加云数据图层</title>
  6. <link rel="stylesheet" type="text/css" href="http://api.amap.com/Public/css/demo.Default.css" />
  7. <script language="javascript" src="http://webapi.amap.com/maps?v=1.2&key=【Your Key】"></script>
  8. </head>
  9. <body onLoad="mapInit()">
  10.     <div id="iCenter"></div>
  11.     <div id="info" style="padding:2px 0px 0px 5px;font-size:12px; color:red;height:20px"></div>
  12. </body>
  13. <script language="javascript">
  14. var mapObj;
  15. //初始化地图对象,加载地图
  16. function mapInit(){
  17.     mapObj = new AMap.Map("iCenter",{center:new AMap.LngLat(116.39946,39.907629),level:12});   
  18.     addCloudLayer();
  19. }
  20. //叠加云数据图层
  21. function addCloudLayer() {
  22.     //加载云图层插件
  23.     mapObj.plugin('AMap.CloudDataLayer', function () {
  24.         var layerOptions = {
  25.             query:{keywords: '公园'},
  26.             clickable:true
  27.         };
  28.         var cloudDataLayer = new AMap.CloudDataLayer('532b9b3ee4b08ebff7d535b4', layerOptions); //实例化云图层类
  29.         cloudDataLayer.setMap(mapObj); //叠加云图层到地图
  30.     });
  31. }
  32. </script>
  33. </html>
复制代码


如果要加上信息窗口的展示,就给云图层加上点击事件。当点击云图层时,弹出信息窗口,代码:
  1. AMap.event.addListener(cloudDataLayer, 'click', function (result) {  
  2.             var clouddata = result.data;  
  3.             var infoWindow = new AMap.InfoWindow({  
  4.                 content:"<h3><font face=\"微软雅黑\"color=\"#3366FF\">"+ clouddata._name +"</font></h3><hr />地址:"+ clouddata._address + "<br />" + "创建时间:" + clouddata._createtime+ "<br />" + "更新时间:" + clouddata._updatetime,  
  5.                 size:new AMap.Size(300, 0),  
  6.                 autoMove:true,  
  7.                 offset:new AMap.Pixel(0,-5)  
  8.             });  
  9.               
  10.             infoWindow.open(mapObj, clouddata._location);  
  11.         });  
复制代码



第五步,云索引。
建立检索就能直接返回云图层了。如果要返回数据,需要使用云检索,比如区域检索。
注意:云图层api和云检索api都有过滤数据和检索数据的功能,所以都要用到索引,但是云图层返回的结果是图,云检索返回的是数据。
  1. //多边形检索函数      
  2. function cloudSearch() {  
  3.     mapObj.clearMap();  
  4.     var arr = new Array();  
  5.     //绘制多边形     
  6.     arr.push(new AMap.LngLat(116.386414,39.920664));   
  7.     arr.push(new AMap.LngLat(116.411648,39.922244));   
  8.     arr.push(new AMap.LngLat(116.413879,39.906708));   
  9.     arr.push(new AMap.LngLat(116.398087,39.904074));  
  10.     arr.push(new AMap.LngLat(116.383667,39.912633));  
  11.     arr.push(new AMap.LngLat(116.386414,39.920664));  
  12.     var polygon = new AMap.Polygon({  
  13.         map:mapObj,   
  14.         path:arr,   
  15.         strokeColor:"#3366FF",   
  16.         strokeOpacity:0.2,   
  17.         strokeWeight:2,   
  18.         fillColor: "#3366FF",   
  19.         fillOpacity: 0.2   
  20.     });   
  21.     var search;  
  22.     var searchOptions = {  
  23.         keywords:'公园',  
  24.         orderBy:'_id:ASC'  
  25.     };  
  26.     //加载CloudDataSearch服务插件  
  27.     mapObj.plugin(["AMap.CloudDataSearch"], function() {         
  28.         search = new AMap.CloudDataSearch('532b9b3ee4b08ebff7d535b4', searchOptions); //构造云数据检索类  
  29.         AMap.event.addListener(search, "complete", cloudSearch_CallBack); //查询成功时的回调函数  
  30.         AMap.event.addListener(search, "error", errorInfo); //查询失败时的回调函数  
  31.         search.searchInPolygon(arr); //多边形检索  
  32.     });  
  33. }
复制代码


大功告成!夜晚东莞更美丽!耶耶耶~~~~

写完代码不容易,放送一下今日觉得最素的萌妹纸,觉得很像山楂树的女主角。

全部源代码:
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  5. <meta name="keywords" content="三星 四星 五星 东莞 酒店">
  6. <title>东莞酒店分布图</title>  
  7. <link rel="stylesheet" type="text/css" href="http://api.amap.com/Public/css/demo.Default.css" />
  8. <style type="text/css">
  9. #iCenter{
  10.     width:600px;
  11.     height:400px;
  12.     border:1px solid #F6F6F6;
  13. }
  14. br strong{
  15.     color:red;
  16.    
  17. }

  18. .jiudianpng{
  19.     float:right;
  20.     height:200px;
  21.     margin:0 auto;
  22.     width:100%;
  23. }
  24. </style>
  25. <script language="javascript" src="http://webapi.amap.com/maps?v=1.2&key=cd24309ecc6ac333e0d4f3985f55dcbe"></script>  
  26. </head>  
  27. <body onLoad="mapInit()">  
  28.     <br/>
  29.     <h1>
  30.         <font color="pink">东莞酒店分布图</font>
  31.         <img src="http://img.taopic.com/uploads/allimg/120119/2443-12011913310994.jpg" style="width:50px;height:30px;float:left"/>
  32.     </h1>
  33.     (数据来源于网络,仅供参考哦 >_<)
  34.     <br/>
  35.     <strong>
  36.     <form id="selectStarLevel">
  37.         <strong>   请选择酒店星级      </strong>
  38.         <input type="checkbox" name="StarLevel" value="五星" onclick="getStarLevel('')" checked /> 五星
  39.         <input type="checkbox" name="StarLevel" value="四星" onclick="getStarLevel('')" checked /> 四星
  40.         <input type="checkbox" name="StarLevel" value="三星" onclick="getStarLevel('')" checked /> 三星
  41.         <strong>        选择行政区      </strong>
  42.         <select name="district"  id="district" onchange="changeSelSearch(this.value);" > <!--// onchange="isSelected(this.value);"-->
  43.             <option value="none" selected style="color:black">所有</option>
  44.             <!-- <option value="others">其他</option> -->
  45.         </select>
  46.         <!-- <input type="button" name="searchButton" value="查询" onclick="searchHotel('')"/> -->
  47.     </form>
  48.     </strong>
  49.     <p>------------------------------------------------------------------</p>
  50.     <div id="iCenter"></div>  
  51.     <div id="info" style="padding:2px 0px 0px 5px;font-size:12px; color:red;height:20px"></div>  
  52. </body>  
  53. <script language="javascript">  
  54. var starLevelArr = new Array();
  55. var mapObj;  
  56. var starLayers = new Array();
  57. // var districts = new Array();
  58. var districts = new Array('黄江镇','莞城区','塘厦镇','长安镇','沙田镇','南城区','虎门','石碣镇','东城区','常平镇','寮步镇','厚街镇','桥头镇','洪梅镇','东城区','企石镇','清溪镇','凤岗镇','高埗镇','大朗镇','万江镇','横沥镇','东坑镇');
  59. // var keywords;
  60. // var cloudDataLayer;
  61. function addOpts(arr){
  62.     // 显示带有自定义文本选项的select
  63.     var selObj = document.getElementById("district");
  64.     // 添加input的选项
  65.     for(i=0;i<arr.length;i++)
  66.     {
  67.         var op = document.createElement("option");
  68.         op.appendChild(document.createTextNode(arr[i]));
  69.         op.setAttribute("value",arr[i]);
  70.         op.setAttribute("style","color:black");
  71.         selObj.appendChild(op);
  72.     }
  73. //    var op = document.createElement("option");
  74. //    op.appendChild(document.createTextNode("其他"));
  75. //    op.setAttribute("value",'others');
  76. //    selObj.appendChild(op);
  77. }
  78. /*
  79. *初始化地图对象,加载地图
  80. */  
  81. function mapInit(){  
  82.     mapObj = new AMap.Map("iCenter",{center:new AMap.LngLat(113.3833,22.9),level:12});
  83.     var arr = new Array();//经纬度坐标数组               
  84.     arr.push(new AMap.LngLat(113.5167 ,22.65));                  
  85.     arr.push(new AMap.LngLat(113.5167,23.15));                  
  86.     arr.push(new AMap.LngLat(114.25,23.15));  
  87.     arr.push(new AMap.LngLat(114.25,22.65));   
  88.     arr.push(new AMap.LngLat(113.5167 ,22.65));                  
  89.     var polyline = new AMap.Polyline({                  
  90.       map:mapObj,               
  91.       path:arr,                  
  92.       strokeColor:"#F00",                  
  93.       strokeOpacity:0.4,                  
  94.       strokeWeight:3,                  
  95.       strokeStyle:"dashed",                  
  96.       strokeDasharray:[10,5]                  
  97.     });                  
  98.     //调整视野到合适的位置及级别               
  99.     mapObj.setFitView();                  
  100.     // 显示带有自定义文本选项的select
  101.     addOpts(districts);
  102.     var items = document.getElementsByName("StarLevel");

  103.     for(i = 0; i < items.length; i++){
  104.        //加载云数据图层插件  
  105.         mapObj.plugin('AMap.CloudDataLayer',InitLayer(starLayers,i));  
  106.     }   
  107. }  
  108. function InitLayer(newLayer,i){  
  109.     //实例化一个云图层对象,设置数据表id  
  110.     addCloudLayer('','',newLayer,i);
  111. }
  112. function getStarLevel(){
  113.     searchHotel();
  114. }
  115. function getDistrict(){
  116.     var mysel = document.getElementById('district').value;
  117.     if('none' == mysel){
  118.         mysel = '';
  119.     }
  120. //    if('others' == mysel){
  121. //        mysel = '';
  122. //    }
  123.     return mysel;
  124. }
  125. function changeSelection(maplayers,i,starlevel,district)
  126. {
  127.     var starlevelfilter = 'starlevel:'+starlevel;
  128.     var districtfilter = 'district:'+district;
  129.     var queryfilter = starlevelfilter + '+' + districtfilter;
  130.     var op={
  131.        query:{filter:queryfilter}
  132.     }
  133.    
  134.     maplayers[i].setOptions(op);
  135.     maplayers[i].setMap(mapObj);
  136. }

  137. function changeSelSearch(value){
  138.     searchHotel();
  139. }
  140. function searchHotel(){
  141.     var items = document.getElementsByName("StarLevel");
  142.     var len = items.length;
  143.     for (i = 0; i < len; i++) {
  144.         if (true == items[i].checked) {
  145.             starLevelArr[i] = items[i].checked;
  146.             district = getDistrict();
  147.             changeSelection(starLayers,i,items[i].value,district);
  148.         }else{
  149.             if(null!= starLayers[i])
  150.             {
  151.                 delCloudLayer(starLayers,i);
  152.             }
  153.         }
  154.     }   
  155. }
  156. /*
  157. *根据查询结果
  158. *去除云数据图层
  159. */
  160. function delCloudLayer(maplayers,i) {  
  161.     maplayers[i].setMap(null); //去除地图上的运图层
  162. }
  163. /*
  164. *根据查询结果
  165. *叠加云数据图层
  166. */
  167. function addCloudLayer(levelofstar,seldistrict,maplayers,i) {  
  168.     //加载云图层插件  
  169.     var starlevelfilter = 'starlevel:'+levelofstar;
  170.     var districtfilter = 'district:'+seldistrict;
  171.     var queryfilter = starlevelfilter + '+' + districtfilter;
  172.     mapObj.plugin('AMap.CloudDataLayer', function () {  
  173.         var layerOptions = {   
  174.             query:{filter: queryfilter},   
  175.             clickable:true  
  176.         };  
  177.         // maplayers[i] = undefined;
  178.         maplayers[i] = new AMap.CloudDataLayer('53465d24e4b01214f369d491', layerOptions); //实例化云图层类  
  179.         maplayers[i].setMap(mapObj); //叠加云图层到地图  

  180.         AMap.event.addListener(maplayers[i], 'click', function (result) {  
  181.             var clouddata = result.data;
  182.             var imgurl=""
  183.             if(clouddata.image!=""){
  184.                 imgurl=clouddata.image
  185.             }else{
  186.                 imgurl="http://wenwen.soso.com/p/20090808/20090808091931-861961308.jpg"
  187.             }
  188.             var infoWindow = new AMap.InfoWindow({  
  189.                 content:"<h3><font face=\"微软雅黑\"color=\"#3366FF\">"+ clouddata._name +"</font></h3><hr />地址:"+
  190.                 clouddata._address + "<br />" + "行政区:" + clouddata.district+ "<br /><strong>" + "星级:<font color='red'>" + clouddata.starlevel+"</font></strong><br /><strong>" + "酒店描述:" +clouddata.description+  "</strong><img class='jiudianpng' src="+imgurl+"></img><br />"  ,  
  191.                 size:new AMap.Size(300, 0),  
  192.                 autoMove:true,  
  193.                 offset:new AMap.Pixel(0,-5)  
  194.             });  
  195.               
  196.             infoWindow.open(mapObj, clouddata._location);  
  197.         });  
  198.     });  
  199. }


  200. </script>  

  201. </html>
复制代码

demo展示:

效果:



回复

使用道具 举报

最佳答案
0 

1

主题

14

帖子

45

积分

新手上路

Rank: 1

积分
45
沙发
发表于 2014-9-10 10:51:03 | 只看该作者
那么多demo
下面做项目 方便了~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表