首页 / 浏览问题 / WebGIS / 问题详情
openlayers如何加载iserver发布的wms服务,并且坐标不一致
21EXP 2023年09月07日

1.如何通过openlayer加载wms服务

2.服务的坐标系是4490坐标系,如何变为3857坐标系的呢,最好有示例代码

3.我看服务中的目标坐标系有三种,我如何通过代码选择3857坐标系呢

1个回答

您好,

1.加载wms图层您可以参考官方示例:

https://iclient.supermap.io/examples/openlayers/editor.html#WMSLayer

2.openlayers坐标转换可以采用ol.proj.transform(coordinate, sourceProjection, destinationProjection)方法。

  • coordinate:要转换的坐标点,可以是一个数组 [x, y] 或一个 ol.Coordinate 对象。
  • sourceProjection:源坐标系,可以是一个 EPSG 代码(如 'EPSG:4326' 表示 WGS84 坐标系)或一个 ol.proj.Projection 对象。
  • destinationProjection:目标坐标系,同样可以是一个 EPSG 代码或一个 ol.proj.Projection 对象。
  • 例如:ol.proj.transform([101.965, 34.627], 'EPSG:4326', 'EPSG:3857')

您可以参考以下示例代码:
var sourceProjection = new ol.proj.Projection({
  code: 'EPSG:3857'
});

var targetProjection = new ol.proj.Projection({
  code: 'EPSG:4326'
});

var cartesianCoordinate = [100, 200];

var lonLatCoordinate = ol.proj.transform(cartesianCoordinate, sourceProjection, targetProjection);

console.log(lonLatCoordinate);
希望可以帮助到您!

460EXP 2023年09月07日
不是呀,

我是想将4490的iserver图层转化为3867的图层

您好,

1.在前端中转换投影采用的方法是一致的,都是使用 ol.proj.transform。例如:

// 定义源投影和目标投影的坐标系对象
var sourceProjection = new ol.proj.Projection({
  code: 'EPSG:4490' // 源投影为 EPSG:4490
});

var targetProjection = new ol.proj.Projection({
  code: 'EPSG:3857' // 目标投影为 EPSG:3857
});

// 创建 iClient for OpenLayers 的图层
var layer = new ol.supermap.TileSuperMapRest({
  url: ' ', // iServer 地图服务的 URL
  projection: sourceProjection, // 指定图层的源投影
  attributions: 'Data © SuperMap iServer' // 图层的属性信息
});

// 创建地图容器
var map = new ol.Map({
  target: 'map', // HTML 元素的 ID,作为地图容器
  layers: [layer], // 添加 iClient for OpenLayers 图层
  view: new ol.View({
    center: ol.proj.fromLonLat([0, 0], targetProjection), // 初始中心点坐标(需要根据目标投影进行转换)
    zoom: 4 // 初始缩放级别
  })
});

2.在iserver服务页面修改坐标系后会生成各自的url和中心点,在加载地图和图层的时候可以直接使用各自的url和中心点。

建议您在编写代码时可以参考官网文档:

https://iclient.supermap.io/web/apis/openlayers.html

https://openlayers.org/en/v6.9.0/apidoc/

...