OpenLayers自定义圆锥投影中国地图

一、效果说明

 实现自定义圆锥投影中国地图,并且和相同投影下的点、线、面数据相叠加。 

二、原理说明

圆锥投影是横版中国地图常用的地图投影,正式名称为正轴等面积割圆锥投影。

  1. 正轴:投影面的轴线与地轴相同;
  2. 等面积:投影后的地图上各区域面积保持不变;
  3. 割圆锥:两条标准纬线。圆锥投影的等变形线与纬线保持平行,标准纬线上无长度变形,两条标准纬线可以让变形更为均匀。

横版中国地图具体参数为,中央经线110°E,标准纬线25°N、47°N。

OpenLayers中自定义投影需要调用proj4.js库,调用proj4即可实现自定义投影,以本文所用投影为例:

proj4.defs('EPSG:10000', '+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=110 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs');
  1.  proj:投影类型,aea指等面积圆锥投影;
  2.  lat_1、lat_2:两条标准纬线;
  3.  lon_0:中央经线。
横版中国地图

三、代码展示

自定义圆锥投影,在Map初始化时,将projection参数定义为该自定义投影即可。

js部分如下:

//自定义投影
proj4.defs('EPSG:10000', '+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=110 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs');
var proj10000 = ol.proj.get('EPSG:10000');

//定义地图范围
var displayExtent = ol.proj.transformExtent([80.198348, 16.348074, 135.571333, 49.866416], 'EPSG:4326', proj10000);

//点符号
var image = new ol.style.Circle({
    radius: 5,
    fill: null,
    stroke: new ol.style.Stroke({ color: 'red', width: 1 })
});

var style = new ol.style.Style({
    image: image,
    stroke: new ol.style.Stroke({
        color: 'blue',
        lineDash: [4],
        width: 3
    }),
    fill: new ol.style.Fill({
        color: 'rgba(0, 0, 255, 0.1)'
    })
});

var pointLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
        format: new ol.format.GeoJSON(),
        url: 'data/point.geojson',
        projection: 'EPSG:4326'
    }),
    style: style
});

var lineLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
        format: new ol.format.GeoJSON(),
        url: 'data/line.geojson',
        projection: 'EPSG:4326'
    }),
    style: style
});

var polygonLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
        format: new ol.format.GeoJSON(),
        url: 'data/polygon.geojson',
        projection: 'EPSG:4326'
    }),
    style: style
});

var map = new ol.Map({
    layers: [
        new ol.layer.Tile({
            source: new ol.source.OSM()
        }),
        polygonLayer,
        lineLayer,
        pointLayer,
    ],
    target: 'map',
    view: new ol.View({
        projection: proj10000,
        center: ol.extent.getCenter(displayExtent),
        zoom: 5,
        minZoom: 0,
        maxZoom: 10
    })
});
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers地图无法加载时,可能有以下几个原因: 1. 网络连接问题:请检查您的网络连接,确保能够正常访问地图服务器。如果您的网络连接存在问题,地图文件可能无法下载并加载。 2. 地图服务配置错误:请确保您正确配置了地图服务的URL和相关参数。您需要提供正确的地图服务地址,并在代码中设置正确的图层、投影地图范围参数。 3. 坐标系不匹配:如果您的地图数据使用了与OpenLayers默认坐标系不匹配的坐标系,您需要在代码中进行相应配置或转换。确保地图数据的投影OpenLayers一致,以便正确显示地图。 4. 地图数据文件损坏:请检查您的地图数据文件是否完整且没有损坏。如果地图数据文件损坏,OpenLayers可能无法正确解析和加载地图。 5. 代码错误:请仔细检查您的代码是否存在语法错误或逻辑错误。确保您正确引入了OpenLayers库文件,并正确配置和初始化地图对象。 在解决问题时,您可以尝试以下步骤: 1. 检查网络连接,确保您能够正常访问地图服务。 2. 检查地图服务配置,确保您正确配置了地图服务的URL和相关参数。 3. 检查坐标系设置,确保地图数据的投影OpenLayers一致。 4. 检查地图数据文件,确保地图数据文件完整且没有损坏。 5. 仔细检查您的代码,确保代码没有语法错误或逻辑错误,并正确引入和初始化OpenLayers库。 如果以上解决方法仍然无效,您可以查阅OpenLayers的官方文档、公开社区和相关教程,寻求更详细的帮助和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值