GIS工具maptalks开发手册(二)01——渲染点、文字和图片

GIS工具maptalks开发手册(二)01——渲染点、文字和图片

1、渲染点

效果

在这里插入图片描述

2、渲染文字

效果

在这里插入图片描述

3、渲染图片

效果

在这里插入图片描述

4.1、html单页面
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>图形 - Marker</title>
<style type="text/css">
    html,
    body {
        margin: 0px;
        height: 100%;
        width: 100%;
    }

    .container {
        width: 900px;
        height: 500px;
        margin: 50px;
    }
</style>
<link rel="stylesheet" href="https://unpkg.com/maptalks/dist/maptalks.css">
<script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>

<body>

    <div id="map" class="container"></div>

    <script>
        var map = new maptalks.Map('map', {
            center: [-0.113049, 51.498568],
            zoom: 14,
            baseLayer: new maptalks.TileLayer('base', {
                urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
                subdomains: ['a', 'b', 'c', 'd'],
                attribution: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>'
            })
        });

        var point = new maptalks.Marker(
            [-0.113049, 51.498568],
            {
                visible: true, // 可见的
                editable: true, // 可编辑的
                cursor: 'pointer', // 光标
                shadowBlur: 0, // 阴影模糊
                shadowColor: 'black', // 阴影颜色
                draggable: false, // 拖动
                dragShadow: false, // display a shadow during dragging (拖动时显示阴影)
                drawOnAxis: null,  // force dragging stick on a axis, can be: x, y (轴上的力拖动杆,可以是:x,y)
                
                //  symbol-记号样式
                // 1、渲染文本
                // symbol: {
                // 文本呈现的样式,默认是: monospace, 当你设置 textFont时会覆盖这个属性
                //     'textFaceName': 'sans-serif',  // 文本面名称
                //     'textName': 'MapTalks', // 文本名称
                //     'textFill': '#34495e',  // 文本填充色(字体颜色) 
               //       textLineSpacing: 1,  // 行距
                //     'textHorizontalAlignment': 'right',  // 文本水平对齐方式
                // 文本标签与marker的距离,也就是与打点的位置的距离
                 //    'textDx': 20,
                //     'textSize': 40  // 文本大小
                // }

                // 2、渲染图片
                // symbol: {
                //     'markerFile': 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg', // 标记图片文件地址
                //     'markerWidth': 58,// 标记宽度
                //     'markerHeight': 80, // 标记高度
                //     'markerDx': 0, // 标记X轴
                //     'markerDy': 0, // 标记y轴
                //     'markerOpacity': 1 // 标记不透明度
                // }
            }
        );

        new maptalks.VectorLayer('vector', point).addTo(map);

    </script>
</body>

</html>

效果-渲染图片格式

在这里插入图片描述

代码

index.html

<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>图形样式 - 图片标注</title>
<style type="text/css">
  html,
  body {
    margin: 0px;
    height: 100%;
    width: 100%;
  }

  .container {
    width: 900px;
    height: 500px;
    margin: 50px;
  }
</style>
<link rel="stylesheet" href="https://unpkg.com/maptalks/dist/maptalks.css">
<script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>

<body>

  <div id="map" class="container"></div>
  <script>
    var map = new maptalks.Map('map', {
      center: [-0.113049, 51.49856],
      zoom: 14,
      baseLayer: new maptalks.TileLayer('base', {
        urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
        subdomains: ['a', 'b', 'c', 'd'],
        attribution: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>'
      })
    });

    var center = map.getCenter();

    var layer = new maptalks.VectorLayer('vector').addTo(map);

    var marker1 = new maptalks.Marker(
      center.sub(0.009, 0),
      {
        'symbol': {
          'markerFile': './01.svg',
          'markerWidth': 300,
          'markerHeight': 400,
          'markerDx': 0,
          'markerDy': 0,
          'markerOpacity': 1
        }
      }
    ).addTo(layer);

  </script>
</body>

</html>

获取中心点-getCenter()

https://maptalks.org/maptalks.js/api/0.x/Map.html#getCenter

设置中心点-setCenter(coordinate)

https://maptalks.org/maptalks.js/api/0.x/Map.html#setCenter

4.2、vue单页面

index.vue

<template>
  <!-- maptalks渲染线 -->
  <div id="map" class="container"></div>
</template>
<script>
import "maptalks/dist/maptalks.css";
import * as maptalks from "maptalks";
export default {
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },
  methods: {
    init() {
       var map = new maptalks.Map('map', {
            center: [-0.113049, 51.498568],
            zoom: 14,
            baseLayer: new maptalks.TileLayer('base', {
                urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
                subdomains: ['a', 'b', 'c', 'd'],
                attribution: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>'
            })
        });

        var point = new maptalks.Marker(
            [-0.113049, 51.498568],
            {
                visible: true, // 可见的
                editable: true, // 可编辑的
                cursor: 'pointer', // 光标
                shadowBlur: 0, // 阴影模糊
                shadowColor: 'black', // 阴影颜色
                draggable: false, // 拖动
                dragShadow: false, // display a shadow during dragging (拖动时显示阴影)
                drawOnAxis: null,  // force dragging stick on a axis, can be: x, y (轴上的力拖动杆,可以是:x,y)
                
                //  symbol-记号样式
                // 1、渲染文本
                // symbol: {
                //     'textFaceName': 'sans-serif',  // 文本面名称
                //     'textName': 'MapTalks', // 文本名称
                //     'textFill': '#34495e',  // 文本填充颜色
                //     'textHorizontalAlignment': 'right',  // 文本水平对齐方式
                //     'textSize': 40  // 文本大小
                // }

                // 2、渲染图片
                // symbol: {
                //     'markerFile': 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg', // 标记图片文件地址
                //     'markerWidth': 58,// 标记宽度
                //     'markerHeight': 80, // 标记高度
                //     'markerDx': 0, // 标记X轴
                //     'markerDy': 0, // 标记y轴
                //     'markerOpacity': 1 // 标记不透明度
                // }
            }
        );

        new maptalks.VectorLayer('vector', point).addTo(map);
    },
  },
};
</script>
<style lang="scss">
html,
body {
  margin: 0px;
  height: 100%;
  width: 100%;
}
.container {
  width: 1200px;
  height: 700px;
  margin: 50px;
}
</style>
5、vue版-图片
5.1、渲染图片-铺满视野

铺满api

extent: map.getExtent(),  //  图片大小:铺满地图视野

注意:

url链接如果出现跨域,请求头需要进行配置

src/utils/request.js

'Access-Control-Allow-Origin': '*'  // 允许任何域访问

请求响应头

// request拦截器
service.interceptors.request.use(config => {
  // config.mode = 'no-cors',
  config.headers['Access-Control-Allow-Origin']= '*'
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际
    try {
      config.headers['orgId'] = store.getters.userInfo.orgId//
    } catch (e) {
      alert('当前orgId不存在,请重新登录!')
      //TODO handle the exception
    }


  }
  return config
}, error => {
  console.log(error)
  Promise.reject(error)
})

后端-Response Headers响应头也需要进行处理:允许任何域访问

在这里插入图片描述

效果1

在这里插入图片描述

index.vue

<template>
  <!-- maptalks初始化 -->
  <div id="map" class="container"></div>
</template>
<script>
import "maptalks/dist/maptalks.css";
import * as maptalks from "maptalks";
export default {
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },
  methods: {
    // 初始化
    init() {
      const map = new maptalks.Map("map", {
        // 默认中心点点位
        center: [116.3972282409668, 39.90960456049752],
        // 缩放层级
        zoom: 14,
        // 倾斜度
        pitch: 50,
        // 轴承
        // bearing: 90,
        // 最小缩放层级
        minZoom: 1,
        // 最大缩放层级
        maxZoom: 22,
        // baseLayer 表示基础图层,它可以添加多个,逗号隔开
        baseLayer: new maptalks.TileLayer("base", {
          //   // 出现跨域问题,要设置这个,一定是undefined
          //   crossOrigin: undefined,
          // 电子地图图层
          urlTemplate:
            "http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png", // 初始常规主题
          // urlTemplate:"https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}", // 彩色主题
          // urlTemplate: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',// 黑色主题
          subdomains: ["a", "b", "c", "d"],
          attribution:
            '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>',
        }),
      });
      console.log("map: ", map);
       let layerImg = new maptalks.ImageLayer("images", [
        {
          url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',  // 饿了么图片
        //   url: this.$store.state.user.imgValue,
          extent: map.getExtent(), // 图片大小
          // extent: [114.40184088740602, 37.002608169667695, 114.4028259092072, 37.00181114116637],  // 左上  右下
          opacity: 0.5, // 不透明度
        },
      ]);
      layerImg.addTo(map);

    },
  },
};
</script>
<style lang="scss">
html,
body {
  margin: 0px;
  height: 100%;
  width: 100%;
}
.container {
  width: 1200px;
  height: 700px;
  margin: 50px;
}
</style>
5.2、渲染图片-限制图片渲染大小

和地图层级结合使用,可以获取坐标数据

效果-限制图片大小

在这里插入图片描述

index.vue

<template>
  <!-- maptalks初始化 -->
  <div id="map" class="container"></div>
</template>
<script>
import "maptalks/dist/maptalks.css";
import * as maptalks from "maptalks";
export default {
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },
  methods: {
    init() {
      const map = new maptalks.Map("map", {
        // 默认中心点点位
        center: [116.3972282409668, 39.90960456049752],
        // 缩放层级
        zoom: 18,
        // 倾斜度
        // pitch: 50,
        // 轴承
        // bearing: 90,
        // 最小缩放层级
        minZoom: 1,
        // 最大缩放层级
        maxZoom: 22,
        // baseLayer 表示基础图层,它可以添加多个,逗号隔开
        baseLayer: new maptalks.TileLayer("base", {
          //   // 出现跨域问题,要设置这个,一定是undefined
          //   crossOrigin: undefined,
          // 电子地图图层
          urlTemplate:
            "http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png", // 初始常规主题
          // urlTemplate:"https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}", // 彩色主题
          // urlTemplate: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',// 黑色主题
          subdomains: ["a", "b", "c", "d"],
          attribution:
            '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>',
        }),
      });
      console.log("map: ", map);

let  extent = map.getExtent();

      // console.log(extent);
      // console.log(extent.xmax); // -0.0012234410202154322
      extent.xmax =
        extent.xmax -
        0.0009520458196448089 -
        0.0013465535936347806 -
        0.0013146624997943945;
      extent.xmin = extent.xmin + 0.0008865151057761977 - 0.0013146624997943945;
      extent.ymax = extent.ymax - 0.0013408400707248802 - 0.0013465535936347806;
      extent.ymin = extent.ymin + 0.0013416043410643397;

       let layerImg = new maptalks.ImageLayer("images", [
        {
          url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',  // 饿了么图片
        //   url: this.$store.state.user.imgValue,
          extent: extent,
          // extent: [114.40184088740602, 37.002608169667695, 114.4028259092072, 37.00181114116637],  // 左上  右下
          opacity: 0.5,
        },
      ]);
      layerImg.addTo(map);

    },
  },
};
</script>
<style lang="scss">
html,
body {
  margin: 0px;
  height: 100%;
  width: 100%;
}
.container {
  width: 1200px;
  height: 700px;
  margin: 50px;
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值