美文网首页
高的地图

高的地图

作者: PixelEyes | 来源:发表于2020-12-17 21:58 被阅读0次

    分享 高德地图的使用

    地图产品有: 谷歌 百度 高德 腾讯 ArcGis 超图 天地图 OSM Mapbox mapnik maptalks cesium deckgl G7
    1.准备页面
    2.创建一个最简单地图
    3.覆盖物和显示内容
    4.地图的交互
    5.地图事件
    6.自定义地图风格
    7.海量点标记和点聚合
    8.坐标系转换
    9.几何计算
    10.升级指南

    一.准备页面
    1.引入高德地图api
        <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script> 
    2.html>>>
        <div id="container"></div> 
    3.css>>>
        #container {width:300px; height: 180px; } 
    
    二.创建一个最简单地图
     var map = new AMap.Map('container');
    
    //或者
     var map = new AMap.Map('container', {
              zoom:11,//级别
              zooms:[3,18]
              center: [116.397428, 39.90923],//中心点坐标
              viewMode:'3D'//使用3D视图
      });
    
    三.覆盖物和显示内容

    显示内容: (bg区域面,point兴趣点,road道路及道路标注,building建筑物)
    1.点

    var map = new AMap.Map('container', {
             zoom:11,//级别
             zooms:[3,18]
             center: [116.397428, 39.90923],//中心点坐标
             viewMode:'3D'//使用3D视图
     });
    // 创建一个 Marker 实例:
    var marker = new AMap.Marker({
       position: new AMap.LngLat(116.39, 39.9),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
       title: '北京'
    });
    // 将创建的点标记添加到已有的地图实例:
    map.add(marker);
    // 移除已创建的 marker
    map.remove(marker);
    
    

    2.自定义图标标记

    //创建点
    var marker = new AMap.Marker({
        position: new AMap.LngLat(116.39,39.9),
        offset: new AMap.Pixel(-10, -10),
        icon: '//vdata.amap.com/icons/b18/1/2.png', // 添加 Icon 图标 URL
        title: '北京'
    });
    //自定义icon
    // 创建 AMap.Icon 实例:
    var icon = new AMap.Icon({
        size: new AMap.Size(40, 50),    // 图标尺寸
        image: '//webapi.amap.com/theme/v1.3/images/newpc/way_btn2.png',  // Icon的图像
        imageOffset: new AMap.Pixel(0, -60),  // 图像相对展示区域的偏移量,适于雪碧图等
        imageSize: new AMap.Size(40, 50)   // 根据所设置的大小拉伸或压缩图片
    });
    var marker = new AMap.Marker({
        position: new AMap.LngLat(116.39,39.9),
        offset: new AMap.Pixel(-10, -10),
        icon:icon , // 添加 Icon 实例
        title: '北京'
    });
    //也可以用js:
    marker.setIcon(icon);
    map.add(marker);
    

    3.面

           var circleMarker = new AMap.CircleMarker({
              center: [116.396923,39.918203],
              radius:10+Math.random()*10,//3D视图下,CircleMarker半径不要超过64px
              strokeColor:'white',
              strokeWeight:2,
              strokeOpacity:0.5,
              fillColor:'rgba(0,0,255,1)',
              fillOpacity:0.5,
              zIndex:10,
              bubble:true,
              cursor:'pointer',
              clickable: true
            })
            circleMarker.setMap(map)
    

    4.文本标记 Text

    // 创建纯文本标记
        var text = new AMap.Text({
            text:'纯文本标记',
            anchor:'center', // 设置文本标记锚点
            draggable:true,
            cursor:'pointer',
            angle:10,
            style:{
                'padding': '.75rem 1.25rem',
                'margin-bottom': '1rem',
                'border-radius': '.25rem',
                'background-color': 'white',
                'width': '15rem',
                'border-width': 0,
                'box-shadow': '0 2px 6px 0 rgba(114, 124, 245, .5)',
                'text-align': 'center',
                'font-size': '20px',
                'color': 'blue'
            },
            position: [116.396923,39.918203]
        });
    
        text.setMap(map);
    

    5.行政区划(国家,省,市,区县)背景,边框
    省市简易行政区图层

    //世界简易行政区图层
    var disWorld = new AMap.DistrictLayer.World({
        zIndex:10,
        styles:{
            'nation-stroke':function(props){
                if(props.type=='Nation_Border_China'){
                    return 'red'
                }else{
                    return 'white'
                }
            },
            'coastline-stroke': [0.8, 0.63, 1, 1], 
            'fill':function(props){
                return getColorBySOC(props.SOC)
            }
        }
    })
    //国家简易行政区图层
    var disCountry = new AMap.DistrictLayer.Country({
        zIndex:10,
        SOC:'CHN',
        depth:2,
        styles:{
            'nation-stroke':'#22ffff',
            'coastline-stroke':[0.8, 0.63, 0.94, 1],
            'province-stroke':'white',
            'city-stroke': 'rgba(255,255,255,0.5)',//中国特有字段
            'fill':function(props){//中国特有字段
               return getColorByDGP(props.adcode_pro)
            }
        }
    })
    //省市简易行政区图层
    var disProvince = new AMap.DistrictLayer.Province({
        zIndex:12,
        adcode:['130000'],
        depth:2,
        styles:{
            'fill':function(properties){
                var adcode = properties.adcode;
                return getColorByAdcode(adcode);
            },
            'province-stroke':'cornflowerblue',
            'city-stroke': 'white',//中国地级市边界
            'county-stroke': 'rgba(255,255,255,0.5)'//中国区县边界  
        }
    })
    
    四.地图的交互和事件
    事件
    覆盖物事件
    var clickHandler = function(e) {
        alert('您在[ '+e.lnglat.getLng()+','+e.lnglat.getLat()+' ]的位置点击了地图!');
    };
    // 绑定事件
    map.on('click', clickHandler);
    // 解绑事件
    map.off('click', clickHandler);
    
    五.自定义地图风格
    六.海量点标记和点聚合
    七.坐标系转换

    其他坐标转高德坐标
    地球上同一个地理位置的经纬度,在不同的坐标系中,会有少许偏移,国内目前常见的坐标系主要分为三种:

    地球坐标系——WGS84:常见于 GPS 设备,Google 地图等国际标准的坐标体系。
    火星坐标系——GCJ-02:中国国内使用的被强制加密后的坐标体系,高德坐标就属于该种坐标体系。
    百度坐标系——BD-09:百度地图所使用的坐标体系,是在火星坐标系的基础上又进行了一次加密处理。
    因此在使用不同坐标系前,我们需要使用 AMap.convertFrom() 方法将这些非高德坐标系进行转换。

    var gps = [116.3, 39.9];
    AMap.convertFrom(gps, 'gps', function (status, result) {
      if (result.info === 'ok') {
        var lnglats = result.locations; // Array.<LngLat>
      }
    });
    
    1.地图容器坐标 ,2.经纬度 , 3.平面地图像素坐标

    地图容器坐标与经纬度的互换
    经纬度与平面地图像素坐标的互换
    经纬度与三维坐标的互换

    image.png
    1. 容器坐标转经纬度坐标 map.containerToLnglat
    // 容器坐标,原点为左上角
    var px = 600;
    var py = 300;
    
    // 构造成 Pixel 对象后传入
    var pixel = new AMap.Pixel(px, py);
    var lnglat = map.containerToLngLat(pixel);  // 获得 LngLat 对象
    
    1. 经纬度坐标转容器坐标 map.lngLatToContainer
    // 地理经纬度坐标
    var lon = 116.4;
    var lat = 39.9;
    
    // 构造成 LngLat 对象后传入
    var lnglat = new AMap.LngLat(lon, lat);
    var pixel = map.lngLatToContainer(lnglat);  // 获得 Pixel 对象
    
    image.png
    1. 经纬度转换平面地图像素坐标 map.lnglatToPixel
    var lon = 116.4;
    var lat = 39.9;
    
    // 数组格式传入,第二个参数指定缩放等级
    var pixel = mapObj.lnglatToPixel([lon, lat], 3); // 返回 Pixel 对象
    
    // 构造成 LngLat 对象后传入,第二个参数指定缩放等级
    var pixel = mapObj.lnglatToPixel(new AMap.LngLat(lon, lat), 3); // 返回 Pixel 对象
    
    1. 平面地图像素坐标转换经纬度 map.pixelToLngLat
    var x = 420;
    var y = 195;
    
    // 构造成 Pixel 对象传入,第二个参数指定缩放等级
    var lnglat = mapObj.pixelToLngLat(new AMap.Pixel(x, y), 3); // 返回 LngLat 对象
    
    image.png
    1. 经纬度转换为三维坐标系下的 XY 坐标 map3D.lngLatToGeodeticCoord
    var lnglat = [116.4, 39.9];
    // 返回 3D 坐标系下的 Pixel
    var coord = map.lngLatToGeodeticCoord(lnglat);
    
    1. 三维坐标系下的 XY 坐标转换为经纬度 map3D.geodeticCoordToLngLat
    // 返回 3D 坐标系下的 LngLat
    var lnglat = map.geodeticCoordToLngLat(new AMap.Pixel(5571367.773333311, -5023481.09450531));
    
    八.几何计算

    1.计算两点间的实际距离
    2.计算点到线段的最短距离
    3.计算点到路径的最短距离
    4.计算路径的实际长度
    5.计算封闭区域的面积
    6.判断点是否在面内
    7.判断点是否在线段上
    8.计算两个面的交叉区域

    九.升级指南

    相关文章

      网友评论

          本文标题:高的地图

          本文链接:https://www.haomeiwen.com/subject/knhtnktx.html