zoukankan      html  css  js  c++  java
  • 地图控件快速入门——控制地图

    当你的网页中包含一个地图,你可以以编程的方式更改地图。您可以更改地图的风格,调整缩放级别,平移地图到新的位置,显示和隐藏默认导航控件,并添加自己的地图控件。

    修改地图视图

    有几种方法可以以编程方式更改地图试图。你可以:

    • 调用VEMap.ZoomIn方法和VEMap.ZoomOut方法实现地图的缩放。

    VEMap.ZoomIn方法

    将地图的缩放级别加一。

    备注:有效值范围从1到19。如果现在的缩放级别已经是最大,再调用放大方法时,缩放级别不发生变化。

    VEMap.ZoomOut方法

    将地图的缩放级别减一。

    备注:有效值范围从1到19。如果现在的缩放级别已经是最小,再调用缩小方法时,缩放级别不发生变化。

    • 调用VEMap.SetZoomLevel方法可以设置缩放级别为特定值。

    VEMap.SetZoomLevel方法

    设置地图的视图为某个特定的缩放级别。

       VEMap.SetZoomLevel(zoomLevel);
    参数 描述
    zoomLevel 地图的缩放级别。有效值在从1到19

    备注:更高的缩放级别显示更多的地图细节,你似乎就更接近地面。有些地图没有高分辨率的航空影像,因此可能不支持最高的缩放级别。

    如果你既设置中心点又设置缩放级别,你应该使用VEMap.SetCenterAndZoom方法。而不是分别调用VEMap.SetCenter方法和SetZoomLevel方法。

    • 设置地图的中心位置,可以通过调用VEMap.SetCenter方法实现。或者既设置地图的中心位置又设置缩放级别,可以通过调用VEMap.SetCenterAndZoom方法。

    VEMap.SetCenterAndZoom方法

    将地图的中心定位到一个特定的经纬度上,并设置地图的缩放级别。

       VEMap.SetCenterAndZoom(VELatLong, zoomLevel);
    参数 描述
    VELatLong 一个VELatlong类的对象。其中包含了定位地图中心位置的经度和纬度。
    zoomLevel 地图的缩放级别。有效值为从1到19。

    备注:SetCenterAndZoom方法返回结果的速度比分别调用SetCenter方法和SetZoomLevel方法要快。

    VEMap.SetCenter方法

    定位地图中心的经纬度。

     VEMap.SetCenter(VELatLong);
    参数 描述
    VELatLong 一个VELatlong类的对象。其中包含了定位地图中心位置的经度和纬度。

    例如:

       1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       2:  <html>
       3:     <head>
       4:        <title></title>
       5:        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       6:   
       7:        <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
       8:   
       9:        <script type="text/javascript">
      10:           var map = null;
      11:           var latLong = null;
      12:           var zoomLevel = 3;
      13:   
      14:           function GetMap()
      15:           {
      16:              map = new VEMap('myMap');
      17:              map.LoadMap();
      18:   
      19:              map.SetZoomLevel(zoomLevel);
      20:   
      21:              // zoom to cursor and center
      22:              map.SetMouseWheelZoomToCenter(false);
      23:   
      24:              document.getElementById('txtZoom').value = zoomLevel;
      25:              map.AttachEvent("onclick", GetLatLong);
      26:              latLong = map.GetCenter();
      27:              divInfo.innerHTML = latLong;
      28:           }  
      29:       
      30:           function GetLatLong(e)
      31:           {
      32:              //Get the pixel coordinates from the click event, convert to LatLong value
      33:              var x = e.mapX;
      34:              var y = e.mapY;
      35:              pixel = new VEPixel(x, y);
      36:              latLong = map.PixelToLatLong(pixel);
      37:              divInfo.innerHTML = latLong;
      38:           }
      39:       
      40:           function SetCenterAndZoom()
      41:           {   
      42:              map.SetCenterAndZoom(latLong, zoomLevel);
      43:           }
      44:       
      45:           function SetCenter()
      46:           {
      47:              map.SetCenter(latLong);
      48:           }
      49:       
      50:           function SetZoom()
      51:           {
      52:              map.SetZoomLevel(zoomLevel);
      53:           }
      54:       
      55:           function ZoomIn()
      56:           {
      57:              //Increase zoom level by a factor of 1
      58:              map.ZoomIn();
      59:              document.getElementById('txtZoom').value = map.GetZoomLevel();
      60:           }
      61:       
      62:           function ZoomOut()
      63:           {
      64:              //Decrease zoom level by a factor of 1
      65:              map.ZoomOut();
      66:              document.getElementById('txtZoom').value = map.GetZoomLevel();
      67:           }
      68:       
      69:           function ValidateEntry()
      70:           {
      71:             //Check to make sure zoom level is within range
      72:             if (document.getElementById('txtZoom').value > 0 && document.getElementById('txtZoom').value <= 19)
      73:             {
      74:                zoomLevel = document.getElementById('txtZoom').value;
      75:             }
      76:             else
      77:             {
      78:                alert("Enter a value between 1 and 19.");
      79:             }
      80:           }
      81:        </script>
      82:     </head>
      83:     <body onload="GetMap();" style="font-family:Arial">
      84:        <div id='myMap' style="position:relative; 400px; height:400px;"></div>
      85:        Click the map to select a center point.<br />
      86:        <div id="divInfo">&nbsp;<br /></div>
      87:        Zoom Level: <input id="txtZoom" type="text" value="" onchange="ValidateEntry()"/><br />
      88:        <input id="btnSetCZ" type="button" value="Set Center and Zoom" onclick="SetCenterAndZoom()"><br />
      89:        <input id="btnSetCenter" type="button" value="Set Center" onclick="SetCenter()"><br />
      90:        <input id="btnSetZoom" type="button" value="Set Zoom" onclick="SetZoom()"><br />
      91:        <input id="btnZoomIn" type="button" value="Zoom in by 1" onclick="ZoomIn()">
      92:        <input id="btnZoomOut" type="button" value="Zoom out by 1" onclick="ZoomOut()">
      93:     </body>
      94:  </html>

     

    • 调用VEMap.SetMapStyle方法,修改地图的样式

    VEMap.SetMapStyle方法

    设置地图的样式

    VEMap.SetMapStyle(mapStyle);
    参数 描述
    mapStyle 定义地图样式的VEMapStyle枚举值
    成员 描述
    Road 路线地图样式
    Shaded 阴影地图风格是一个路线图的阴影轮廓
    Aerial 航拍地图样式
    Hybrid 混合样式是一个覆盖有标签的航拍图样式
    Obligue 斜地图风格,这与Birdseye样式相同
    Birdseye 倾斜的鸟瞰样式
    BirdseyeHybrid 一个覆盖有标签的鸟瞰图样式

    备注:阴影地图样式不是所有的区域都支持。

    如果你想在VEMapMode.Mode3D中查看Birdseye或BirdseyeHybrid地图样式,就必须使用VEMap.Show3DBirdseye方法。

    地图的样式还可以在调用VEMap.LoadMap方法加载地图时设置。

    • 让虚拟地球基于你设置的点、图钉、折线来决定最佳的地图展现样式。你可以通过将一个点或线的数组传递到VEMap.SetMapView方法中实现上述功能。

    VEMap.SetMapView方法

    设置地图的样式以包含定义在一个数组中的所有的点、线或多边形。或者设置为一个VEMapViewSpecification类对象所定义的视图。

    VEMap.SetMapView(object);
    参数 描述
    object 在2D模式中,是一个VELatLong类端点的数组或者一个VELatLongRectangle类的对象。
    在3D模式中,也可以是一个VEMapViewSpecification类对象。这个对象定义一个位置、高度、间距,并将其用于地图视图。

    备注:当你想让地图覆盖已知点集合,而你又不确定地图中心位置时,这个方法非常有用。或者缩放级别必须适应你现在的地图的整个区域时,也可适用。

    例如:

       1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       2:  <html>
       3:     <head>
       4:        <title></title>
       5:        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       6:   
       7:        <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
       8:   
       9:        <script type="text/javascript">
      10:           var map = null;
      11:           var center = new VELatLong(38.62504326121764, -90.18497586250308);
      12:           var initView = new VEMapViewSpecification(center, 16, 1000, -90, 0);
      13:           
      14:           function GetMap()
      15:           {
      16:              map = new VEMap('myMap');
      17:              map.LoadMap();
      18:   
      19:              map.SetMapMode(VEMapMode.Mode2D);
      20:              map.SetMapStyle(VEMapStyle.Aerial);
      21:              map.SetMapView(initView);
      22:           }   
      23:           
      24:           function ToggleMode()
      25:           {
      26:              var mode = map.GetMapMode();
      27:   
      28:              if (mode == VEMapMode.Mode2D)
      29:              {
      30:                 map.SetMapMode(VEMapMode.Mode3D);
      31:              }
      32:              else if (mode == VEMapMode.Mode3D)
      33:              {
      34:                 map.SetMapMode(VEMapMode.Mode2D);
      35:              }
      36:           }
      37:           
      38:           function SetMapStyle()
      39:           {
      40:              if (styleForm.styleType[0].checked)
      41:              {
      42:                 var style = map.GetMapStyle();
      43:   
      44:                 if (style == VEMapStyle.Aerial)
      45:                 {
      46:                    alert("The Aerial style is already set.");
      47:                 }
      48:                 else
      49:                 {
      50:                    map.SetMapStyle(VEMapStyle.Aerial);
      51:                    alert("Map style has been set to Aerial.");
      52:                 }
      53:              }
      54:              else if (styleForm.styleType[1].checked)
      55:              {
      56:                 var style = map.GetMapStyle();
      57:   
      58:                 if (style == VEMapStyle.Birdseye)
      59:                 {
      60:                    alert("The Birdseye style is already set.");
      61:                 }
      62:                 else
      63:                 {
      64:                    map.SetMapStyle(VEMapStyle.Birdseye);
      65:                    alert("Map style has been set to Birdseye.");
      66:                 }
      67:              }
      68:              else if (styleForm.styleType[2].checked)
      69:              {
      70:                 var style = map.GetMapStyle();
      71:   
      72:                 if (style == VEMapStyle.Road)
      73:                 {
      74:                    alert("The Road style is already set.");
      75:                 }
      76:                 else
      77:                 {
      78:                    map.SetMapStyle(VEMapStyle.Road);
      79:                    alert("Map style has been set to Road.");
      80:                 }
      81:              }
      82:              else if (styleForm.styleType[3].checked)
      83:              {
      84:                 var style = map.GetMapStyle();
      85:   
      86:                 if (style == VEMapStyle.Hybrid)
      87:                 {
      88:                    alert("The Hybrid style is already set.");
      89:                 }
      90:                 else
      91:                 {
      92:                    map.SetMapStyle(VEMapStyle.Hybrid);
      93:                    alert("Map style has been set to Hybrid.");
      94:                 }
      95:              }
      96:           }
      97:        </script>
      98:     </head>
      99:     <body onload="GetMap();">
     100:        <div id='myMap' style="position:relative; 400px; height:400px;"></div>
     101:        <INPUT id="btnToggle" type="button" value="Toggle Map Mode" name="btnToggle" 
     102:           onclick="ToggleMode();">
     103:        <form name="styleForm">
     104:              <input id="aerial" type="radio" name="styleType" checked="checked" /> Aerial<br />
     105:              <input id="birdseye" type="radio" name="styleType" /> Birdseye<br /> 
     106:              <input id="road" type="radio" name="styleType" /> Road<br />
     107:              <input id="hybrid" type="radio" name="styleType" /> Hybrid
     108:        </form>
     109:        <INPUT id="btnStyle" type="button" value="Set Selected Map Style" name="btnStyle" 
     110:           onclick="SetMapStyle();">
     111:        <div id="latlon"></div>
     112:     </body>
     113:  </html>

    显示和隐藏地图控件

    你可以通过调用VEMap.HideDashboard方法和VEMap.ShowDashboard方法显示和隐藏默认的地图导航控件。你还可以使用HTML创建自己的地图导航控件,并调用VEMap.AddControl方法将这些控件添加到地图中。

    VEMap.HideDashboard方法

    隐藏控制地图的默认的用户接口(平移和缩放控件)

    备注:如果你想在地图上添加自己的用户接口以控制地图,那么你可以调用这个方法先隐藏默认的控件,然后再使用VEMap.AddControl方法显示自定义控件。要显示默认的面板,可以调用VEMap.ShowDashboard方法。

    VEMap.ShowDashboard方法

    显示默认的控制地图界面(平移和缩放控制)。默认情况下是这种显示模式。

    例如:

       1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       2:  <html>
       3:     <head>
       4:        <title></title>
       5:        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       6:   
       7:        <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
       8:   
       9:        <script type="text/javascript">
      10:           var map = null;
      11:           var clickEvent = null;
      12:   
      13:           function GetMap()
      14:           {  
      15:              map = new VEMap('myMap');
      16:              
      17:              // SetDashboardSize must be called before calling LoadMap
      18:              map.SetDashboardSize(VEDashboardSize.Normal);
      19:              
      20:              map.LoadMap();
      21:   
      22:              map.SetMapMode(VEMapMode.Mode3D);
      23:   
      24:           }
      25:           
      26:           // Dashboard hide & show calls
      27:           function HideDashboard()
      28:           {
      29:              map.HideDashboard();
      30:           }
      31:           
      32:           function ShowDashboard()
      33:           {
      34:              map.ShowDashboard();
      35:           }
      36:           
      37:           // 3D Navigation hide & show calls
      38:           function Hide3DNav()
      39:           {
      40:              map.Hide3DNavigationControl();
      41:           }
      42:           
      43:           function Show3DNav()
      44:           {
      45:              if (map.GetMapMode() == VEMapMode.Mode2D)
      46:              {
      47:                 map.SetMapMode(VEMapMode.Mode3D);
      48:              }
      49:   
      50:              map.Show3DNavigationControl();
      51:           }
      52:           
      53:                   
      54:           // Mini Map hide & show calls
      55:           function HideMiniMap()
      56:           {
      57:              map.HideMiniMap();
      58:           }
      59:           
      60:           function ShowMiniMap()
      61:           {
      62:              if (map.GetMapMode() == VEMapMode.Mode3D)
      63:              {
      64:                 map.SetMapMode(VEMapMode.Mode2D);
      65:              }
      66:   
      67:              map.ShowMiniMap(200, 100);            
      68:           }
      69:           
      70:           function SetScaleBar(distanceUnit)
      71:           {
      72:              map.SetScaleBarDistanceUnit(distanceUnit);
      73:           }
      74:        </script>
      75:     </head>
      76:     <body onload="GetMap();" style="font-family: Arial">
      77:        <div id='myMap' style="position: relative;  800px; height: 400px;">
      78:        </div>
      79:        <div id="links">
      80:           <a href="#" onclick="HideDashboard()">Hide Dashboard</a> | <a href="#" onclick="ShowDashboard()">
      81:              Show Dashboard</a><br />
      82:           <a href="#" onclick="Hide3DNav()">Hide 3D Navigation Control</a> | <a href="#" onclick="Show3DNav()">
      83:              Show 3D Navigation Control</a><br />
      84:           <a href="#" onclick="HideMiniMap()">Hide Mini Map</a> | <a href="#" onclick="ShowMiniMap()">
      85:              Show Mini Map(2D view only)</a><br />
      86:           <a href="#" onclick="SetScaleBar(VEDistanceUnit.Miles)">Set Scale Bar Distance Unit to Miles</a> | 
      87:           <a href="#" onclick="SetScaleBar(VEDistanceUnit.Kilometers)">Set Scale Bar Distance Unit to Kilometers</a>
      88:        </div>
      89:     </body>
      90:  </html>

    VEMap.AddControl方法

    添加一个自定义控件到地图中。

    VEMap.AddControl(element, zIndex);
    参数 描述
    element 包含要加入到地图中的控件的HTML元素
    zIndex 控件的顺序。可选

    注意:element参数是一个可以内嵌Java script的HTML元素。来在执行之前验证网页上的输入值。

    备注:你可以使用文档对象模型(DOM)中的document.CreateElement方法来创建一个HTML新元素。添加你需要的方法实现,然后调用AddControl方法。你还可以使用DOM来移除控件。

    当在3D模式下运行时,由于IE浏览器在网页上显示嵌入的控件的方式,自定义控件会被隐藏在地图的后面。如果你想要在3D模式中显示一个自定义的控件,可以遵循如下步骤:

    1. 创建一个IFrame元素。使这个元素的大小和位置都与自定义控件相当。
    2. 设置IFrame的frameborder属性为0,以及scrolling属性为“on”。
    3. 在IFrame的style属性中,设置z-index属性为1,位置设置为与控件相当。
    4. 在自定义控件的style属性中,设置z-index数大于1。
    5. 调用下面这样代码,shim是IFrame元素,el是你的自定义控件:
      el.shimElement = shim;
      el.parentNode.insertBefore(shim, el);

    例如:

       1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       2:  <html>
       3:     <head>
       4:        <title></title>
       5:        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       6:   
       7:        <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
       8:   
       9:        <script type="text/javascript">
      10:           var map = null;
      11:           var i = 0;
      12:              
      13:           function GetMap()
      14:           {
      15:              map = new VEMap('myMap');
      16:              map.LoadMap();       
      17:           }
      18:           
      19:           function AddControl()
      20:           {
      21:              var el = document.createElement("div"); 
      22:              el.id = "myControl" + i; 
      23:              el.style.top = 100 + (i * 10); 
      24:              el.style.left = 100 + (i * 10);            
      25:              el.style.border = "2px solid black";
      26:              el.style.background = "White";
      27:              el.innerHTML = el.id;  
      28:              map.AddControl(el);
      29:              addShim(el);
      30:              counter.value = i;
      31:              i++;
      32:           }
      33:           
      34:           function addShim(el)
      35:           {
      36:              var shim = document.createElement("iframe");
      37:              shim.id = "myShim" + i;
      38:              shim.frameBorder = "0";
      39:              shim.style.position = "absolute";
      40:              shim.style.zIndex = "1";
      41:              shim.style.top  = el.offsetTop;
      42:              shim.style.left = el.offsetLeft;
      43:              shim.width  = el.offsetWidth;
      44:              shim.height = el.offsetHeight;
      45:              el.shimElement = shim;
      46:              el.parentNode.insertBefore(shim, el);
      47:           }
      48:           
      49:           function DeleteControl()
      50:           {
      51:              var myControl = document.getElementById("myControl" + counter.value);
      52:   
      53:              if (myControl!=null)
      54:              {
      55:                 var myControlID = myControl.id;
      56:                 map.DeleteControl(myControl);
      57:                 alert("Control " + myControlID + " has been deleted.");
      58:              }
      59:              else
      60:              {
      61:                 alert("No control with ID " + counter.value + " was found.");
      62:                 return;
      63:              }
      64:              
      65:              var myShim = document.getElementById("myShim" + counter.value);
      66:   
      67:              if (myShim!=null)
      68:              {
      69:                 myShim.parentNode.removeChild(myShim);
      70:              }
      71:   
      72:              myShim = null;
      73:              i--;
      74:              counter.value = i;
      75:           }
      76:           
      77:           function HideControl()
      78:           {
      79:              var myControl = document.getElementById("myControl" + counter.value);
      80:   
      81:              if (myControl!=null)
      82:              {
      83:                 map.HideControl(myControl);
      84:                 alert(myControl.id + " is now hidden from view.");
      85:              }
      86:              else
      87:              {
      88:                 alert("No control with ID " + counter.value + " was found.");
      89:                 return;
      90:              }
      91:           }
      92:           
      93:           function ShowControl()
      94:           {
      95:              var myControl = document.getElementById("myControl" + counter.value);
      96:     
      97:              if (myControl!=null)
      98:              {
      99:                 map.ShowControl(myControl);
     100:                 alert(myControl.id + " has been restored.");
     101:              }
     102:              else
     103:              {
     104:                 alert("No control with ID " + counter.value + " was found.");
     105:                 return;
     106:              }
     107:           }
     108:        </script>
     109:     </head>
     110:     <body onload="GetMap();" style="font-family:Arial;font-size:x-small">
     111:        <div id='myMap' style="position: relative;  400px; height: 400px;">
     112:        </div>
     113:        Control:&nbsp;
     114:        <input type="text" id="counter" size="20" value="0"/>
     115:        <br />
     116:        <input type="button" value="add control" onclick="AddControl();"/>
     117:        <input type="button" value="delete control" onclick="DeleteControl();"/>
     118:        <br/>
     119:        <input type="button" value="hide control" onclick="HideControl();"/>
     120:        <input type="button" value="show control" onclick="ShowControl();"/>
     121:     </body>
     122:  </html>
  • 相关阅读:
    MySQL常见问题(包括忘记root密码)
    MySQL运维面试基础题目
    系统根目录可用空间低于20%,清理mysql binary logs日志空间
    服务检测是否正常运行的shell脚本
    CentOS下安装 MySQL5.5
    问题处理--ceph集群告警: pgs inconsistent修复方案
    十、Spring中常用注解-分层整理
    七、SXSSFWorkbook生成大excle,避免内存溢出
    一、FreeMarker实现对js和css压缩
    九、web.xml理解
  • 原文地址:https://www.cnblogs.com/zhangdong/p/1646496.html
Copyright © 2011-2022 走看看