WebGIS开发

news2024/11/27 14:49:20

1.准备工作

高德开发API注册账号,创建项目拿到key和密钥
高德key

2.通过JS API引入高德API

<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

3.展示地图

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
                const map = new AMap.Map("container", {
                    viewMode: '3D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                });
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

4.展示图层

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
              //1.2 创建图层
                const layer = new AMap.createDefaultLayer({
                    zooms: [3, 20], //可见级别
                    visible: true, //是否可见
                    opacity: 1, //透明度
                    zIndex: 0, //叠加层级
                });
                const map = new AMap.Map("container", {
                    viewMode: '3D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                    //1.3 加载图层
                    layers: [layer], //layer为创建的默认图层
                });
                //1.4 创建实时交通路况图层
                const traffic = new AMap.TileLayer.Traffic({
                    autoRefresh: true, //是否自动刷新,默认为false
                    interval: 180, //刷新间隔,默认180s
                });
                map.add(traffic); //通过add方法添加图层
               // map.remove(traffic)//通过remove方法删除图层
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <button></button>
    <div id="container"></div>
  </body>
</html>

5.地图控件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
                const map = new AMap.Map("container", {
                    viewMode: '3D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                    pitch:45,//初始地图俯仰角度
                });
      
               // 5.1引入地图控制
               //异步加载方式,在需要的地方引入。通过AMap.plugin方法按需引入控件,在plugin回调之后使用控件功能。
               AMap.plugin(['AMap.ToolBar','AMap.Scale','AMap.HawkEye','AMap.MapType','AMap.ControlBar'],function () {
                    //ToolBar:集成了缩放,平移,定位
                    var toolbar = new AMap.ToolBar(); //缩放工具条实例化
                    var Scale = new AMap.Scale(); //比例尺
                    var HawkEye = new AMap.HawkEye(); //鹰眼
                    var MapType = new AMap.MapType(); //地图类型
                    var ControlBar = new AMap.ControlBar();//
                    //5.2添加控件
                    map.addControl(toolbar);//缩放工具
                    map.addControl(Scale);//Scale(比例尺):展示地图在当前层级和经纬度下的比例
                    map.addControl(HawkEye);//HawkEye(鹰眼):右下角地图的缩略图
                    map.addControl(MapType);
                    map.addControl(ControlBar);//ControlBar 方向盘
                });
               
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

6.地图事件

6.1获取经纬度

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
                const map = new AMap.Map("container", {
                    viewMode: '3D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                });
                //6.1监听地图的点击事件
                map.on('click',function(event){
                //获取经纬度
                console.log(`经度:${event.lnglat.lng},纬度:${event.lnglat.lat}`)
                })
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

7.点标记

比如省会城市会有Mark标注
在这里插入图片描述

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
      //7.3自定义样式
       .custom-content-marker {
            position: relative;
            width: 25px;
            height: 34px;
        }

        .custom-content-marker img {
            width: 100%;
            height: 100%;
        }

        .custom-content-marker .close-btn {
            position: absolute;
            top: -6px;
            right: -8px;
            width: 15px;
            height: 15px;
            font-size: 12px;
            background: #ccc;
            border-radius: 50%;
            color: #fff;
            text-align: center;
            line-height: 15px;
            box-shadow: -1px 1px 1px rgba(10, 10, 10, .2);
        }

        .custom-content-marker .close-btn:hover {
            background: #666;
        }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
                 //7.1创建地图
                const map = new AMap.Map("container", {
                    viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                });
                //7.2自定义Marker点标记显示内容
                const markerContent = `<div class="custom-content-marker">
<img src="https://a.amap.com/lbs/static/img/doc/doc_1678970777168_d2b5c.png">
<div class="close-btn" οnclick="clearMarker()">X</div>
</div>`
                //7.4创建Marker对象
                const position = new AMap.LngLat(116.397428, 39.90923); //Marke经纬度
                const marker = new AMap.Marker({
                    position: position,
                    content: markerContent, //将 html 传给 content
                    offset: new AMap.Pixel(-13, -30), //以 icon 的 [center bottom] 为原点
                });
                //7.5将Marker添加到地图上
                map.add(marker);
                //7.6给 Marker 绑定事件
                function clearMarker() {
                    map.remove(marker); //清除 marker
                }
                document.querySelector(".close-btn").onclick = clearMarker; //绑定点击事件
              })
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

8.交互式绘制点

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
      //7.3自定义样式
       .custom-content-marker {
            position: relative;
            width: 25px;
            height: 34px;
        }

        .custom-content-marker img {
            width: 100%;
            height: 100%;
        }

        .custom-content-marker .close-btn {
            position: absolute;
            top: -6px;
            right: -8px;
            width: 15px;
            height: 15px;
            font-size: 12px;
            background: #ccc;
            border-radius: 50%;
            color: #fff;
            text-align: center;
            line-height: 15px;
            box-shadow: -1px 1px 1px rgba(10, 10, 10, .2);
        }

        .custom-content-marker .close-btn:hover {
            background: #666;
        }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
                 //7.1创建地图
                const map = new AMap.Map("container", {
                    viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.397428, 39.90923], // 初始化地图中心点,
                });
                //7.2自定义Marker点标记显示内容
                const markerContent = `<div class="custom-content-marker">
<img src="https://a.amap.com/lbs/static/img/doc/doc_1678970777168_d2b5c.png">
<div class="close-btn" οnclick="clearMarker()">X</div>
</div>`
                map.on('click', function (e) {
                    //7.3创建Marker对象
                    const marker = new AMap.Marker({
                        position: e.lnglat,
                        content: markerContent, //将 html 传给 content
                        offset: new AMap.Pixel(-13, -30), //以 icon 的 [center bottom] 为原点
                    });
                    //7.4将Marker添加到地图上
                    map.add(marker);
                })
              })
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

9.灵活点标记

在这里插入图片描述

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width" />
    <title>HELLO,AMAP!</title>
    <style>
        html,
        body,
        #container {
            width: 90%;
            height: 90%;
        }

    </style>
    <script type="text/javascript">
        window._AMapSecurityConfig = {
            securityJsCode: "",
        };
    </script>
    <script src="https://webapi.amap.com/loader.js"></script>
    <script type="text/javascript">
        AMapLoader.load({
            key: "", //申请好的Web端开发者 Key,调用 load 时必填
            version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
            .then((AMap) => {
                //7.1创建地图
                const map = new AMap.Map("container", {
                    viewMode: '3D',
                    turboMode: false,
                    showIndoorMap: false,
                    defaultCursor: 'pointer',
                    showBuildingBlock: false,
                    zooms: [14, 20],
                    showLabel: false,
                    zoom: 16,
                    pitch: 55,
                    rotation: -45,
                    center: [116.408967, 39.880101],
                    forceVector: true,
                });
                //9.1 创建样式列表
                var stylesArray = [
                    {
                        icon: { //图标样式
                            img: "https://a.amap.com/jsapi_demos/static/resource/img/men3.png",
                            size: [16, 16], //图标的原始大小
                            anchor: "bottom-center", //锚点位置
                            fitZoom: 14, //最合适的级别 在此级别显示为图标原始大小
                            scaleFactor: 2, //地图放大一级的缩放比例系数 
                            maxScale: 2, //图片的最大放大比例,随着地图放大图标会跟着放大,最大为2
                            minScale: 1, //图片的最小缩小比例,随着地图缩小图标会跟着缩小,最小为1
                        },
                        label: { //文本标注
                            content: "百花殿", //文本内容
                            position: "BM", //文本位置相对于图标的基准点,"BM"为底部中央
                            minZoom: 15, //label的最小显示级别,即文本标注在地图15级及以上,才会显示
                        },
                    },
                    {
                        icon: {
                            img: "https://a.amap.com/jsapi_demos/static/resource/img/tingzi.png",
                            size: [48, 63],
                            anchor: "bottom-center",
                            fitZoom: 17.5,
                            scaleFactor: 2,
                            maxScale: 2,
                            minScale: 0.125,
                        },
                        label: {
                            content: "万寿亭",
                            position: "BM",
                            minZoom: 15,
                        },
                    },
                ];
                //9.2 创建样式列表的级别映射
                var zoomStyleMapping = {
                    14: 0, //14-17级使用样式 0
                    15: 0,
                    16: 0,
                    17: 0,
                    18: 1, //18-20级使用样式 1
                    19: 1,
                    20: 1,
                };
                // 9.3 加载灵活点标记的插件
                AMap.plugin(["AMap.ElasticMarker"], function () {
                    var elasticMarker = new AMap.ElasticMarker({
                        position: [116.405562, 39.881166], //点标记位置
                        styles: stylesArray, //指定样式列表
                        zoomStyleMapping: zoomStyleMapping, //指定 zoom 与样式的映射
                    });
                    map.add(elasticMarker); //添加到地图上
                    map.setFitView(); //缩放地图到合适的视野级别
                });
            })
            .catch((e) => {
                console.error(e); //加载错误提示
            });

    </script>
</head>

<body>

    <div id="container"></div>
</body>

</html>

10.矢量图形

10.1折线

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width" />
    <title>HELLO,AMAP!</title>
    <style>
        html,
        body,
        #container {
            width: 90%;
            height: 90%;
        }
    </style>
    <script type="text/javascript">
        window._AMapSecurityConfig = {
            securityJsCode: "",
        };
    </script>
    <script src="https://webapi.amap.com/loader.js"></script>
    <script type="text/javascript">
        AMapLoader.load({
            key: "", //申请好的Web端开发者 Key,调用 load 时必填
            version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
            .then((AMap) => {
                //10.1创建地图
                const map = new AMap.Map("container", {
                    zoom: 10, //地图级别
                    center: [116.397428, 39.90923], //地图中心点
                    viewMode: "2D", //地图模式
                });
                //10.2 折线的节点配置折线路径
                var path = [
                    new AMap.LngLat(116.368904, 39.913423),
                    new AMap.LngLat(116.382122, 39.901176),
                    new AMap.LngLat(116.387271, 39.912501),
                    new AMap.LngLat(116.398258, 39.9046),
                ];
                // 10.3 创建折线 Polyline 实例
                //创建 Polyline 实例
                var polyline = new AMap.Polyline({
                    path: path,
                    strokeWeight: 2, //线条宽度
                    strokeColor: "red", //线条颜色
                    lineJoin: "round", //折线拐点连接处样式
                });
                //1.4 将折线添加至地图实例
                map.add(polyline);
            })
            .catch((e) => {
                console.error(e); //加载错误提示
            });

    </script>
</head>

<body>
    <div id="container"></div>
</body>

</html>

10.2多边形polygon

在这里插入图片描述

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width" />
    <title>HELLO,AMAP!</title>
    <style>
        html,
        body,
        #container {
            width: 90%;
            height: 90%;
        }
    </style>
    <script type="text/javascript">
        window._AMapSecurityConfig = {
            securityJsCode: "",
        };
    </script>
    <script src="https://webapi.amap.com/loader.js"></script>
    <script type="text/javascript">
        AMapLoader.load({
            key: "", //申请好的Web端开发者 Key,调用 load 时必填
            version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
            .then((AMap) => {
                //10.1创建地图
                const map = new AMap.Map("container", {
                    zoom: 8.8, //地图级别
                    center: [116.397428, 39.90923], //地图中心点
                    viewMode: "2D", //地图模式
                });
                //10.2 设置多边形轮廓线的节点坐标数组
                //多边形轮廓线的节点坐标数组
                var path = [
                    new AMap.LngLat(116.368904, 39.913423),
                    new AMap.LngLat(116.387271, 39.912501),
                    new AMap.LngLat(116.398258, 39.9046),
                ];
                // 10.3  创建多边形 Polygon 实例
                //创建 Polyline 实例
                //创建多边形 Polygon 实例
                var polygon = new AMap.Polygon({
                    path: path, //路径
                    fillColor: "#fff", //多边形填充颜色
                    strokeWeight: 2, //线条宽度,默认为 2
                    strokeColor: "red", //线条颜色
                });
                //10.4 多边形 Polygon 对象添加到 Map
                //多边形 Polygon对象添加到 Map
                map.add(polygon);
                //将覆盖物调整到合适视野
                map.setFitView([polygon])
            })
            .catch((e) => {
                console.error(e); //加载错误提示
            });

    </script>
</head>

<body>

    <div id="container"></div>
</body>

</html>

11.计算距离

在这里插入图片描述

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>HELLO,AMAP!</title>
    <style>
      html,
      body,
      #container {
        width: 100%;
        height: 100%;
      }
    </style>
     <script type="text/javascript">
        window._AMapSecurityConfig = {
          securityJsCode: "「你申请的安全密钥」",
        };
      </script>
      <script src="https://webapi.amap.com/loader.js"></script>
      <script type="text/javascript">
        AMapLoader.load({
          key: "「你申请的应用Key」", //申请好的Web端开发者 Key,调用 load 时必填
          version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
        })
          .then((AMap) => {
               //JS API 加载完成后获取AMap对象
               //11.1创建地图
                const map = new AMap.Map("container", {
                    viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
                    zoom: 18, // 初始化地图层级
                    center: [116.434027, 39.941037], // 初始化地图中心点,
                });
                //11.2创建两个点(设置可以拖动)
                 const m1 = new AMap.Marker({
                       map:map,//将m1这个点添加到map地图上
                       draggable:true,//配置该点可以拖动
                       position:new AMap.LngLat(116.434027, 39.941037)
                    });
                  const m2 = new AMap.Marker({
                       map:map,//将m2这个点添加到map地图上
                       draggable:true,//配置该点可以拖动
                       position:new AMap.LngLat(116.461665, 39.941564)
                    });
                  //让地图根据覆盖物调整地图显示区域
                  //11.3准备一条线
                  var line = new AMap.Polyline({
                     strokeColor:'#80d8ff',//描边的颜色
                     isOutline:true,//包含轮廓
                     outerlineColor:'white'
                  })
                  line.setMap(map)
                  //11.4准备文本
                  var text = new AMap.Text({
                     text:'',
                     style:{
                       'background-color':'#29b6f6',
                       'border-color': "#e1f5fe",
                        'font-size':'16px'
                     }
                  })
                  text.setMap(map)
                   //11.5计算
                   function compute(){
                     var p1 = m1.getPosition()
                     var p2 = m2.getPosition()
                     var textPos = p1.divideBy(2).add(p2.divideBy(2))
                     var distance = Math.round(p1.distance(p2))
                     var path = [p1,p2]
                     line.setPath(path)//绘制线,根据p1,p2起始点和终点的坐标
                     text.setText('距离为:'+distance+'米')
                     text.setPosition(textPos)
                   }
                   compute()
                   m1.on('dragging',compute)
                   m2.on('dragging',compute)
                  })
                 
          .catch((e) => {
            console.error(e); //加载错误提示
          });
      </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

12.GeoJSON

GeoJSON是一种保存地理信息的数据格式
包含几何信息和自定义属性在这里插入图片描述
为什么使用GeoJSON
1️⃣数据持久化
地图上绘制了很多点, 刷新浏览器就没有了,绘制的点只是临时性的加载在地图中,这些数据是保存在内存中的,将数据保存到硬盘中这个过程叫数据持久化
2️⃣持久化
1.使用GDB数据库,将数据保存到地理数据库中
2.使用GeoJsON,将数据保存到 GeoJsoN 格式的文件中
对于小型应用,使用GeoJsON即可,相对于GDB更加方便简单
对于大型应用,更推荐GDB,功能更加强大,处理速度和效率更高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu上安装d4rl数据集

Ubuntu上安装d4rl数据集 D4RL的官方 github: https://github.com/Farama-Foundation/D4RL 一、安装Mujoco 1.1 官网下载mujoco210文件 如果装过可以跳过这步 链接&#xff1a;https://github.com/deepmind/mujoco/releases/tag/2.1.0 下载第一个文件即可。我这里是在windo…

【JAVA】精密逻辑控制过程(分支和循环语句)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a; 橘橙黄又青-CSDN博客 目标&#xff1a; 1. Java 中程序的逻辑控制语句 2. Java 中的输入输出方式 3. 完成…

动手学机器学习线性回归+习题

线性回归 矩阵求导&#xff1a; 左边是分子布局&#xff0c;右边是分母布局&#xff0c;一般都用分母布局 解析解与数值解&#xff1a; 解析解是严格按照公式逻辑推导得到的&#xff0c;具有基本的函数形式。给出任意的自变量就可以求出其因变量 数值解是采用某种计算方法&a…

写作类AI推荐(二)

本章要介绍的写作AI如下&#xff1a; 火山写作 主要功能&#xff1a; AI智能创作&#xff1a;告诉 AI 你想写什么&#xff0c;立即生成你理想中的文章AI智能改写&#xff1a;选中段落句子&#xff0c;可提升表达、修改语气、扩写、总结、缩写等文章内容优化&#xff1a;根据全文…

黑马鸿蒙笔记2

1.图片设置&#xff1a; 1 加载网络图片&#xff0c;申请权限。 申请权限&#xff1a;entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image&#xff0c; 点击show in API Reference interpolation&#xff1a;看起来更加清晰 resou…

【C++】string类(常用接口)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 修改操作 push_back append operator assign insert erase replace c_str find string类非成…

【ReadPapers】A Survey of Large Language Models

LLM-Survey的llm能力和评估部分内容学习笔记——思维导图 思维导图 参考资料 A Survey of Large Language Models论文的github仓库

【AcWing】蓝桥杯集训每日一题Day8|日期问题|前缀和|3498.日期差值(C++)

3498.日期差值 3498. 日期差值 - AcWing题库难度&#xff1a;简单时/空限制&#xff1a;1s / 64MB总通过数&#xff1a;5763总尝试数&#xff1a;18345来源&#xff1a;上海交通大学考研机试题算法标签模拟日期问题 题目内容 有两个日期&#xff0c;求两个日期之间的天数&…

ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力

什么是汽车级TVS二极管&#xff1f; TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护&#xff0c;防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中&#xff0c;由于车辆启…

22 多态

目录 多态的概念多态的定义及实现抽象类多态的原理单继承和多继承关系中的虚函数表继承和多态常见的面试问题 前言 需要声明的&#xff0c;下面的代码和解释的哦朴实vs2013x86环境&#xff0c;涉及指针是4bytes&#xff0c;如果要其他平台下&#xff0c;部分代码需要改动。比…

vue源码解析—— watch/computed的实现逻辑和区别

watch 和 computed 是 Vue 中的两个重要的响应式属性&#xff0c;它们在实现机制和使用上存在一些区别。 watch&#xff1a;用于监听数据的变化&#xff0c;并在数据变化时执行回调函数。可以使用 deep 配置项来开启深度监听&#xff0c;监听数据的子属性变化。可以使用 immedi…

安装 kubesphere 插件报错Error: UPGRADE FAILED: \“ks-minio\“ has no deployed releases

安装 kubesphere 插件报错Error: UPGRADE FAILED: “ks-minio” has no deployed releases TASK [common : Kubesphere | Creating manifests] ******************************** ok: [localhost] > (item{uname: ucustom-values-minio, ufile: ucustom-values-minio.yaml}…

Linux shell编程学习笔记43:cut命令

0 前言 在 Linux shell编程学习笔记42&#xff1a;md5sum 中&#xff0c;md5sum命令计算md5校验值后返回信息的格式是&#xff1a; md5校验值 文件名 包括两项内容&#xff0c;前一项是md5校验值 &#xff0c;后一项是文件名。 如果我们只想要前面的md5 校验值&#xff0c…

完整部署一套k8s-v.1.28.0版本的集群

一、系统情况 虚拟机版本&#xff1a;esxi 6.7 系统版本&#xff1a;centos7.9_2009_x86 配置&#xff1a;4核8G&#xff08;官网最低要求2核2G&#xff09; 192.168.0.137 master节点 192.168.0.139 node2节点 192.168.0.138 node1节点&#xff08;节点扩容练习&#xf…

拥抱挑战,开启增长:2024年全球产品团队的OKR策略

2024年&#xff0c;全球经济格局进入重塑阶段。消费者在消费选择上趋于严苛&#xff0c;企业需推出更具吸引力的产品与服务&#xff0c;以赢得消费者的青睐。同时&#xff0c;企业需通过持续创新&#xff0c;提升产品竞争力&#xff0c;方能在充满挑战的市场环境中实现持续增长…

Kaggle注册验证码问题(Captcha must be filled out.)

Kaggle注册验证码问题 Captcha must be filled out.使用Edge浏览器 Header Editor 插件安装 下载插件Header Editor 导入重定向脚本 点击扩展插件&#xff0c; 打开Header Editor插件&#xff0c;进行管理 点击导入输入下载链接进行下载或者导入本地json文件(二者任选其一…

文件操作(顺序读写篇)

1. 顺序读写函数一览 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说…

代码学习记录31---动态规划开始

随想录日记part31 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.29 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及四个方面&#xff1a; 理论基础 ; 斐波那契数 ;爬楼梯 ;使用最小花费爬楼梯。 理论基础 509. 斐…

代码随想录算法训练营第二十四天(回溯1)|77. 组合(JAVA)

文章目录 回溯理论基础概念类型回溯模板 77. 组合解题思路源码 回溯理论基础 概念 回溯是递归的副产品&#xff0c;本质上是一种穷举 回溯解决的问题可以抽象为一种树形结构 类型 回溯主要用来解决以下问题 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问…

自己动手用ESP32手搓一个智能机器人:ESP32-CAM AI Robot

目录 介绍 硬件需求 软件需求 步骤 总结 源码下载 介绍 ESP32-CAM是一款集成了Wi-Fi和蓝牙功能的微控制器模块&#xff0c;同时还集成了摄像头接口&#xff0c;使其成为一个非常适合构建智能机器人的选择。在本项目中&#xff0c;我将向您展示如何使用ESP32-CAM模块构建…