Vue+Openlayers 访问geoserver坐标系转换

Openlayers帮我们定义的投影坐标系projection只有EPSG:4326、EPSG:3857这两种参数,加入要引用其他的参数,则会报错。

newMap() {
      var container = this.$refs.map;
      this.layer = new Image({
        source: new ImageWMS({
          ratio: 1, //设置为 1
          url: "http://localhost:8080/geoserver/test/wms",
          params: {
            LAYERS: "test:demo",
            STYLES: "",
            VERSION: "1.1.1",
            FORMAT: "image/png",
            CRS: "EPSG:4490", //原数据是EPSG:4527的,通过openlayers转换为4490
          },
          serverType: "geoserver",
        }),
      });
      this.map = new Map({
        target: container,
        layers: [this.layer],
        view: new View({
          center: [39666666.0044, 3716666.444499994],
          zoom: 10,
          projection:'EPSG:4490' //采用 4490 坐标系显示
        }),
      });
    }

如果使用 EPSG:4490 这个openlayers未定义的参数,会报错:

报null值错误,也就是说明 openlayers并没有给我们定义 EPSG:4490 这个参数值。接下来我们自己定义这个参数,使用 proj4.js,我们通过proj4.defs()方法定义一个参数,然后使用register(proj4)就能够向其注册,但是自定义的投影坐标系必须在EPSG.io: Coordinate Systems Worldwide可以找到的才有效。

 按照他给参数进行定义:

proj4要先下载:npm i proj4。然后才能导入

proj4.defs('EPSG:4490', '+proj=longlat +ellps=GRS80 +no_defs');
register(proj4);

 还要记得改center 。转换坐标

center: [104.19500000,35.13000000],

最后完整代码

<template>
  <div id="map" style="height: 500px; width: 500px" ref="map"></div>
</template>

<script>
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import ImageWMS from "ol/source/ImageWMS";
import Image from "ol/layer/Image";
import proj4 from 'proj4'
import {register} from 'ol/proj/proj4';
export default {
  name: "showMap",
  data() {
    return {
      map: null,
      layer: null,
    };
  },
  mounted() {
    this.newMap();
  },
  methods: {
    //创建地图
    newMap() {
      proj4.defs('EPSG:4490', '+proj=longlat +ellps=GRS80 +no_defs');
      register(proj4);
      var container = this.$refs.map;
      this.layer = new Image({
        source: new ImageWMS({
          ratio: 1, //设置为 1
          url: "http://localhost:8080/geoserver/test/wms",
          params: {
            LAYERS: "test:demo",
            STYLES: "",
            VERSION: "1.1.1",
            FORMAT: "image/png",
            CRS: "EPSG:4490", //原数据是EPSG:4527的,通过openlayers转换为4490
          },
          serverType: "geoserver",
        }),
      });
      this.map = new Map({
        target: container,
        layers: [this.layer],
        view: new View({
          center: [104.19500000,35.13000000],
          zoom: 10,
          projection:'EPSG:4490' //采用 4490 坐标系显示
        }),
      });
    }

    
  },
};
</script>
<style>
</style>

然后就能出图了。

最后介绍一下EPSG:4527、EPSG:4490。这是我自己的理解,如果有兴趣可以去查看中国大地坐标系2000。4527名称:高斯大地坐标系_中国2000_39带3_北2,将中国划分为很多块 ,他是其中一块,之所以坐标x、y那么大,是因为单位时米。而4490则是经纬度。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值