supermap学习系列(五)——上一篇的续集(鼠标单击或者移动,高亮显示并弹出对话框)

学习笔记,方便以后查阅。参考超图技术资源中心--代码库:http://support.supermap.com.cn/ProductCenter/ResourceCenter/CodeLibrary.aspx

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     <title></title>      <script src="libs/SuperMap.Include.js"></script>     <script type="text/javascript">            var style = {             strokeColor: "#304DBE",             strokeOpacity: 0,             fillColor: "#00ff00",             fillOpacity: 0,         };         var selectStyle = {             fillColor: "#FFFFFF",    //填充颜色             strokeColor: "#ff0000",   //边框颜色             strokeWidth: 3,             graphZIndex: 1         };         var map, layer, vectorLayer, selectFeature, popup;         // 设置访问的GIS服务地址         var url = "http://localhost:8090/iserver/services/map-ChinaTestWorkPlace/rest/maps/ChinaTest";         function GetMap() {             // 创建地图对象             map = new SuperMap.Map("map");             //control = new SuperMap.Control.MousePosition();     //该控件显示鼠标移动时,所在点的地理坐标。             //map.addControl(control);  //添加控件             // 创建图层对象             layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url, { transparent: true, cacheEnabled: true }, { maxResolution: "auto" });             layer.events.on({ "layerInitialized": addLayer });             vectorLayer = new SuperMap.Layer.Vector("Vector Layer");

            //这里添加两种事件方式点击事件和mouseover事件,都可以实现,这里屏蔽掉mouseover事件。(这里我还存一个问题,在这两种情况下双击地图不能放大,只能用滚轮)             // (双击除了要高亮显示的其他区域,还是可以的)             //给vectorLayer添加单击事件             selectFeature = new SuperMap.Control.SelectFeature(vectorLayer, {                 onSelect: onFeatureSelect,                 onUnselect: onUnFeatureSelect             });             selectFeature.repeat = true;             selectFeature.toggle = true;

            给vectorLayer添加鼠标mouseover事件             //selectFeature = new SuperMap.Control.SelectFeature(vectorLayer, {             //    onSelect: onFeatureSelect,             //    onUnselect: onUnFeatureSelect,             //    hover: true             //});             map.addControl(selectFeature);             selectFeature.activate();         }         // 加载图层         function addLayer() {             // 向Map添加图层             map.addLayers([layer, vectorLayer]);             map.setCenter(new SuperMap.LonLat(116.409749, 39.912344), 1);                      QueryBySQL();         }         function QueryBySQL() {             var filterParameter, queryBySQLService, queryBySQLParameters;             //SuperMap.REST.FilterParameter 查询过滤条件参数类。 该类用于设置查询数据集的查询过滤参数。             filterParameter = new SuperMap.REST.FilterParameter({                 name: "Provinces_R@China400"             });             //SuperMap.REST.QueryBySQLParameters SQL 查询参数类。 该类用于设置 SQL 查询的相关参数。             queryBySQLParameters = new SuperMap.REST.QueryBySQLParameters({                 queryParams: [filterParameter]             });             //SuperMap.REST.QueryBySQLService SQL 查询服务类。 在一个或多个指定的图层上查询符合 SQL 条件的空间地物信息。             queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {                 eventListeners: {                     "processCompleted": queryCompleted,                     "processFailed": queryError                 }             });             queryBySQLService.processAsync(queryBySQLParameters);         }         //查询成功         function queryCompleted(queryEventArgs) {             var result = queryEventArgs.result;             if (result && result.recordsets[0].features) {                 features = result.recordsets[0].features;                 for (var i = 0; i < features.length; i++) {                     features[i].style = style;                 }                 vectorLayer.addFeatures(features);             }         }         function queryError(e) {             alert(e.error.errorMsg);         }         function onUnFeatureSelect(feature) {             map.removePopup(feature.popup);             feature.popup.destroy();             feature.popup = null;

            feature.style = style;             vectorLayer.redraw();

        }         function onFeatureSelect(feature) {             feature.style = selectStyle;             vectorLayer.redraw();             vectorLayer.setOpacity(0.6);

            // 获取点击点的经纬度             var x = feature.geometry.getBounds().getCenterLonLat().lon;             var y = feature.geometry.getBounds().getCenterLonLat().lat;             var contentHTML = "<div style='font-size:.8em; opacity: 0.8; width:150px; height:50px;'>" +                     "<span style='font-weight: bold; font-size: 18px;'>详细信息</span><br>";             contentHTML += "<div>所属:" + feature.attributes.NAME + "</div>";             contentHTML += "<div>1994年GDP:" + parseInt(feature.attributes.GDP_1994) + "</div>";             contentHTML += "<div>1997年GDP:" + parseInt(feature.attributes.GDP_1997) + "</div>";             contentHTML += "<div>1998年GDP:" + parseInt(feature.attributes.GDP_1998) + "</div>";             contentHTML += "<div>1999年GDP:" + parseInt(feature.attributes.GDP_1999) + "</div>";             contentHTML += "<div>2000年GDP:" + parseInt(feature.attributes.GDP_2000) + "</div>";             contentHTML += "</div>"             popup = new SuperMap.Popup.FramedCloud("chicken",                     new SuperMap.LonLat(x, y),                     null,                     contentHTML,                     null,                     true);             feature.popup = popup;             popup.panMapIfOutOfView = true;             map.addPopup(popup);

        }          </script> </head> <body οnlοad="GetMap()">        <div id="map" style="height: 640px; width: 720px; border: 1px solid red; margin-left: auto; margin-right: auto;"></div> </body> </html>

 

初始效果图:

鼠标单击其中的一个省份:

鼠标移动也是可以的,上面的代码中有说明。

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值