问题源于使用4528投影按照官网示例定义view时地图一片空白,于是开始了对Proj4js和投影转换的抽丝剥茧,这里记录下了解的知识和最后的结论。

官网示例和Proj4js的使用

OL示例见wms-image-custom-proj
这里简单介绍下proj4,我认知的proj4是基于一些约定参数组成的用于定义坐标参考的一组参数,和WKT相比更简约,省略了WKT里的完整参数定义。比如4528的wkt

PROJCRS["CGCS2000 / 3-degree Gauss-Kruger zone 40",BASEGEOGCRS["China Geodetic Coordinate System 2000",DATUM["China 2000",ELLIPSOID["CGCS2000",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4490]],CONVERSION["3-degree Gauss-Kruger zone 40",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",120,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",1,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",40500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["northing (X)",north,ORDER[1],LENGTHUNIT["metre",1]],AXIS["easting (Y)",east,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large scale)."],AREA["China - onshore between 118°30'E and 121°30'E."],BBOX[24.43,118.5,53.33,121.5]],ID["EPSG",4528]]

它的proj4

+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs

详细介绍见参考
我对该示例做了简化,去掉了范围,更换图层为OSM,在vue里测试

import Map from "ol/Map";
import View from "ol/View";
import * as Layer from "ol/layer";
import * as Source from "ol/source";
import Projection from "ol/proj/Projection";
import { fromLonLat } from "ol/proj";
import proj4 from "proj4";
import { register } from "ol/proj/proj4";
  private mounted() {// 这里定义编码和proj4参数proj4.defs("EPSG:4549","+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs");// 注册之后就可以使用epsg编码调用register(proj4);// 定义了底图 用的OSMconst base = new Layer.Tile({source: new Source.OSM(),});const projection = new Projection({code: "EPSG:4549",units: "m",});// 初始化地图对象const map = new Map({layers: [base],target: "map",view: new View({projection,center: fromLonLat([120.015, 36.408], "EPSG:4549"),zoom: 8,}),});}

获取Proj4的方法

比较方便的方法是在https://epsg.io/里查询,但我一直访问不了,作为替代可以在QGIS里查询
点击右下角的坐标参考按钮,很直观,亲测和网站里获取的是一样的

2000带投影的Proj4的问题

如果使用epsg:4528的proj4和编码,地图会一片空白还不报错。我尝试了其他坐标系,有的行有的不行,对比之后发现凡是以‘CGCS2000 / 3-degree Gauss-Kruger zone’开头的都不行,而同样是两千带投影的‘CGCS2000 / 3-degree Gauss-Kruger CM’系列就没事


这两个坐标系范围啥的都一样,我对比了下他俩的proj4

4528(CGCS2000 / 3-degree Gauss-Kruger zone 40)
+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs
4549(CGCS2000 / 3-degree Gauss-Kruger CM 120E)
+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs

除了+x_0的值,其他都一毛一样,所以问题八成出在这个参数上

如何治标不治本

研究了下,4528(CGCS2000 / 3-degree Gauss-Kruger zone 40)的+x_0的值40500000,代表40带,偏移500000米,如果去掉前边代表带号的40,就和4549的完全一样了。
估计是这种带号+偏移量的赋值方式不被支持,所以在使用4528的proj4时地图空白。
那么一种治标不治本的解决方法就来了,直接使用4549代替4528,或者使用4528,但是移除‘+x_0=40500000’里代表带号的‘40’。

如果有更好的建议欢迎提出,也欢迎指出错误,毕竟当初学的东西基本忘光了,很多都是基于猜测。

Openlayers使用Proj4js坐标转换cgcs2000分带(zone)投影的问题相关推荐

  1. ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  2. ARCGIS中坐标转换及地理坐标、投影坐标的定义(转载)

    转自http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或是说坐 ...

  3. (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  4. OpenLayers中文文档2栅格重投影

    目录 栅格重投影 使用方法 Usage 实例 Examples 自定义 Custom projection 视图投影的改变 瓦片网格和 外延 它是如何工作的 动态三角测量 高级Advanced 三角测 ...

  5. 【Metashape精品教程3】坐标系选择 坐标转换

    [Metashape精品教程3]坐标系选择 坐标转换 文章目录 [Metashape精品教程3]坐标系选择 坐标转换 前言 一.软件设置 二.坐标系选择 1.有带号坐标系选择 2.无带号坐标系选择 二 ...

  6. B站/博客园/CSDN/知乎:@秋意正寒 地球坐标系(WGS84),火星坐标系(GCJ02), 百度坐标系(BD09)坐标转换

    https://blog.csdn.net/skh2015java/article/details/68486756 聊聊GIS中那些坐标系 转载请声明到标题. B站/博客园/CSDN/知乎:@秋意正 ...

  7. ARCMAP里面关于地理投影方面的知识

    目录 一.地理坐标系与投影坐标系的基础知识 二.在arcmap里详细坐标系方面的实验操作 1.关于图层数据源属性 2.关于数据框属性的说明 3.关于arctoolbox里面的关于投影工具的整体说明 4 ...

  8. WGS84经纬度坐标6度分带高斯投影正算

    WGS84坐标系下的经纬度坐标经过投影可以转换为平面坐标,本文采用高斯投影正算,6度带投影. 中央子午线的概念: 由于控制投影变形的大小,所以引入中央子午线的概念控制投影变形. 分带:投影带分为3度带 ...

  9. ArcGIS中地理坐标系与投影坐标系以及投影转换

    ArcGIS中地理坐标系与投影坐标系 前言 一.基本概念 1.地理坐标系 2.投影坐标系 二.相关操作 1.查看数据框坐标信息 常见问题1:加载数据进来,数据不显示 常见问题2:想更改数据坐标显示的格 ...

最新文章

  1. 2010年下半年网络工程师考试上午试卷与参考答案(3)
  2. Oracle宣布终止所有Intel Itanium平台上的软件开发
  3. 【洛谷P1186】玛丽卡(断边+最短路)
  4. 【原创】erlang 模块之 epmd
  5. Android之给控件添加水纹波效果
  6. 汇编语言(三十五)之输入字符串以$结束然后输出字母个数
  7. Linux Shell基础 - Shell 脚本的执行方式
  8. 深度学习—写作Dataset时是否应该使用shuffle
  9. 你绝对猜不到 Java 14 有什么新特性?
  10. 3分钟教你绘制一个围棋棋盘
  11. 生产环境服务CPU飙升问题分析
  12. 微信企业号和微信公众号使用js-sdk说明和注意事项
  13. 安信实验室呼吁键盘厂商申请windows徽标认证(WHQL)
  14. [NameError]: name ‘F’ is not defined
  15. AutoCAD.NET API2018二次开发第十一章
  16. Python学习笔记 - Python数据类型
  17. 文件随机或顺序读写原理深入浅出
  18. Android行情走势图
  19. Android 上网本上使用3G上网卡的可行性
  20. JAVA中的remote接口_JAVA基础:TravelAgentRemote(远程接口)

热门文章

  1. ue 小知识点 开启垂直同步 vsync
  2. 处理ceph osd incomplete
  3. Elasticsearch7.17学习笔记
  4. Alexa 笑了,她到底在笑什么?
  5. 1. Python的基本数据类型-字符串
  6. 美和易思高校学生素养提升平台
  7. 二层环路详解:交换机环路产生的过程和原因
  8. eval 函数 java_JavaScript eval()函数定义及使用方法详解
  9. java基础总结-第五部分 (pAq)
  10. 风扇空调等 低功耗抗干扰三键/3键3路3通道触摸(Touch)触控IC-VK3603 ESOP8 灵敏度高抗干扰能力强,FAE技术支持,带16S自动复位防呆功能