`
bnmnba
  • 浏览: 293518 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Openlayer 加载Echarts省市轮廓,XYZ方式加载TMS瓦片底图

 
阅读更多

首先说明几个概念。

GIS:地理信息系统(Geographic Information System)、Geo、地图、地理系统。

坐标系:XY、坐标参考系、crs(coordinate reference system)、坐标参考系、把地球放到坐标系里才能做成数字地图,通常分为球形和投影平面;

常见坐标系:WGS84地理坐标系(地理学和谷歌地球)、WGS84 web 墨卡托投影坐标系(国外地图常用)、GCJ02(国内地图常用)、BD09(百度自定义坐标系)、CGCS2000(基于高斯2000坐标系)

坐标:通常有两个数值组成的数值、coordinate、[116, 38]、只知道坐标不知道坐标系无法使用。

投影:projection、把球形坐标系按照一个算法,把每一个点投射到二维平面XY坐标系的方法叫做投影算法。EPSG:Coordinate Systems Worldwide、世界地理坐标系标准组织。

wgs84:球形坐标系、地理坐标系、经纬度坐标、World Geodetic System 1984 、单位是度、EPSG:4326、

lonlat(lon经度、lat维度)

wgs84 墨卡托投影坐标系:Mercator Projection 、把wgs84经纬度坐标按照墨卡托投影得到的平面投影坐标系、EPSG:3857、EPSG:900913、Google Maps Projection, OpenStreetMap, Bing都是用这个投影、https://epsg.io/3857、单位是米

GCJ02:中国国测局制定的坐标系、火星坐标。

CGCS2000:国家大地2000坐标系、EPSG:1024。

瓦片:Tile、包括TMS瓦片、MBTitles、使用很多小图片来表示地图的层级;瓦片使用的是墨卡托投影坐标系(EPSG:3857)

层级:瓦片分为22个层级,每深入一层,图片数量增加四倍。

图层:layer、一个地图分为很多图层,包括矢量图层和影像图层(通常称为底图),两个图层叠加可以表示丰富的信息,两个影像图层叠加前需要确认是互相覆盖还是背景透明。

特征:矢量图层里有很多特征Feature,每个特征是一个形状(点Point、线Line、多边形Polygon),特征的根据坐标决定的。

样式:每个特征有对应的绘制样式Style,例如边框Stroke、填充Fill、圈Circle等等。

GeoJSON :使用JSON格式带说明一个特征集合FeatureCollection,使用的的是WGS84地理坐标系。

TopoJSON:是扩展的GeoJSON。

坐标统一:所有数据包括矢量、影像、特征、GEOJSON都要自动或手动转换为同一个坐标系才能显示无偏移。

偏移:包括水平偏移、旋转偏移、缩放偏移。

openlay:一个把切片加载到web项目里的前端工具包,功能强大。

leaflet:比openlayer更小巧。

 

 

openlayer v4.6.5 + echarts 河南地图json的展示示例:

 

<!doctype html>
<html lang="cn">
  <head>
    <link rel="stylesheet" href="js/openlayer/v4.6.5/css/ol.css" type="text/css">
    <style>
      .map {
        height: 400px;
        width: 100%;
      }
    </style>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<script type="text/javascript" src="js/jQuery1.3.1.js"></script>
    <script type="text/javascript" src="js/openlayer/v4.6.5/build/ol.js"></script>
	<script type="text/javascript" src="js/coordtransform.js"></script>
	<script type="text/javascript" src="js/cm.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script type="text/javascript">

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


      var styles = {
 		'station_1': new ol.style.Style({
 	          image: new ol.style.Circle({
 	            radius: 3,
 	            fill: null,
 	            stroke: new ol.style.Stroke({color: '#bada55', width: 1})
 	          })
 	        }),
 	    'station_2': new ol.style.Style({
 	          image: new ol.style.Circle({
 	            radius: 6,
 	            fill: null,
 	            stroke: new ol.style.Stroke({color: '#bada55', width: 1})
 	          })
 	        }),
 	 	    'station_3': new ol.style.Style({
 	 	          image: new ol.style.Circle({
 	 	            radius: 9,
 	 	            fill: null,
 	 	            stroke: new ol.style.Stroke({color: '#bada55', width: 1})
 	 	          })
 	 	        }),
	 	 	    'station_4': new ol.style.Style({
	  	          image: new ol.style.Circle({
	  	            radius: 12,
	  	            fill: null,
	  	            stroke: new ol.style.Stroke({color: '#bada55', width: 1})
	  	          })
	  	        }),
	  	 	    'station_5': new ol.style.Style({
	   	          image: new ol.style.Circle({
	   	            radius: 15,
	   	            fill: null,
	   	            stroke: new ol.style.Stroke({color: '#bada55', width: 1})
	   	          })
	   	        }),
        'Point': new ol.style.Style({
          image: image
        }),
        'LineString': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'green',
            width: 1
          })
        }),
        'MultiLineString': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'green',
            width: 1
          })
        }),
        'MultiPoint': new ol.style.Style({
          image: image
        }),
        'MultiPolygon': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'yellow',
            width: 1
          }),
          fill: new ol.style.Fill({
            color: 'rgba(255, 255, 0, 0.1)'
          })
        }),
        'Polygon': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'blue',
            lineDash: [4],
            width: 3
          }),
          fill: new ol.style.Fill({
            color: 'rgba(0, 0, 255, 0.1)'
          })
        }),
        'GeometryCollection': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'magenta',
            width: 2
          }),
          fill: new ol.style.Fill({
            color: 'magenta'
          }),
          image: new ol.style.Circle({
            radius: 10,
            fill: null,
            stroke: new ol.style.Stroke({
              color: 'magenta'
            })
          })
        }),
        'Circle': new ol.style.Style({
          stroke: new ol.style.Stroke({
            color: 'red',
            width: 2
          }),
          fill: new ol.style.Fill({
            color: 'rgba(255,0,0,0.2)'
          })
        })
      };

      var styleFunction = function(feature) {
          	return styles[feature.getGeometry().getType()];
          	
        };
		//fs.concat(new SGGTool(211,false,[{lon:12645670.400179092,lat:4137598.634327903}]).getFeatures())
        var geojsonObject = {
          'type': 'FeatureCollection',
          'crs': {
            'type': 'name',
            'properties': {
              'name': 'EPSG:900913'
            }
          },
          'features': 
           [{
            'type': 'Feature',
            'geometry': {
              'type': 'Point',
              'coordinates': [0, 0]
            }
          }, {
            'type': 'Feature',
            'geometry': {
              'type': 'LineString',
              'coordinates': [[4e6, -2e6], [8e6, 2e6]]
            }
          }, {
            'type': 'Feature',
            'geometry': {
              'type': 'LineString',
              'coordinates': [[4e6, 2e6], [8e6, -2e6]]
            }
          }, {
            'type': 'Feature',
            'geometry': {
              'type': 'Polygon',
              'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], [-3e6, -1e6]]]
            }
          }, {
            'type': 'Feature',
            'geometry': {
              'type': 'MultiLineString',
              'coordinates': [
                [[-1e6, -7.5e5], [-1e6, 7.5e5]],
                [[1e6, -7.5e5], [1e6, 7.5e5]],
                [[-7.5e5, -1e6], [7.5e5, -1e6]],
                [[-7.5e5, 1e6], [7.5e5, 1e6]]
              ]
            }
          }, {
            'type': 'Feature',
            'geometry': {
              'type': 'MultiPolygon',
              'coordinates': [
                [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], [-3e6, 6e6]]],
                [[[-2e6, 6e6], [-2e6, 8e6], [0, 8e6], [0, 6e6]]],
                [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], [3e6, 6e6]]]
              ]
            }
          },  {
            'type': 'Feature',
            'geometry': {
              'type': 'GeometryCollection',
              'geometries': [{
                'type': 'LineString',
                'coordinates': [[-5e6, -5e6], [0, -5e6]]
              }, {
                'type': 'Point',
                'coordinates': [4e6, -5e6]
              }, {
                'type': 'Polygon',
                'coordinates': [[[1e6, -6e6], [2e6, -4e6], [3e6, -6e6]]]
              }]
            }
          }]
          
          
          
        };

        //var sgt=new SGGTool(202,false,[{lon:12645670.400179092,lat:4137598.634327903}]).getFeature();
        
        var vectorSource = new ol.source.Vector({
          features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
          //features: new SGGTool(202,false,[{lon:12645670.400179092,lat:4137598.634327903}]).getFeatures()
        });

        //vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([5e6, 7e6], 1e6)));
        
        var vectorLayer = new ol.layer.Vector({
            source: vectorSource,
            style: styleFunction
          });

    var map = new ol.Map({
       target: 'map',
       layers: [
         new ol.layer.Tile({
           source: new ol.source.XYZ({
             url: 'henanArcgisTitle/{z}/{x}/{-y}.png'
           })
         })
         
       ],
       view: new ol.View({
          center: [12284632, 3682763],
          zoom: 3
       }),
       projection: ol.proj.get('EPSG:900913'),
       
    });
    
    map.addControl(new ol.control.MousePosition());
    

    map.addLayer(vectorLayer);
    /* var styleFunction = function(feature) {
      return styles[feature.getGeometry().getType()];
    }; */

    //$.getJSON('mapJson/henan.json', function (json) {
    $.getJSON('mapJson/henan.json', function (json) {   
        var vectorSource = new ol.source.Vector();
        vectorSource.addFeatures(new ol.format.GeoJSON().readFeatures(decode(json), {featureProjection: ol.proj.get('EPSG:900913')}));
        // vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([5e6, 7e6], 1e6)));

        var vectorLayer = new ol.layer.Vector({
          source: vectorSource
          //,style: styleFunction
        });
        
        map.addLayer(vectorLayer);
    });
    
    
    
    </script>
  </body>
</html>

 

 

参考:

https://openlayers.org

 

 

  • js.zip (2.1 MB)
  • 下载次数: 24
分享到:
评论

相关推荐

    Openlayer地图叠加瓦片

    瓦片地图是将大图切割成多个小块(通常为256x256像素),以便于网络传输和高效加载。OpenLayers 提供了丰富的功能,允许开发者轻松地在地图上叠加不同的瓦片图层。 在OpenLayers中,叠加瓦片主要涉及以下几个关键...

    baiduMap_openlayer(openlayer加载百度地图和高德地图例子)

    本示例“baiduMap_openlayer”是关于如何利用OpenLayers加载和展示百度地图与高德地图的教程。这个教程对开发者来说具有很高的参考价值,特别是那些想要在自己的Web应用中集成地图功能的人员。 首先,让我们深入...

    TMS瓦片、Mbtiles文件互转以及集合到OL3中说明

    - 使用OpenLayers提供的`TileLayer`和`XYZ`图层源,通过指定Mbtiles服务的URL来加载瓦片。 - 示例代码如下: ```javascript var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: ...

    openlayers自定义规则切片TMS浏览实例

    3. 加载TMS图层:`var tmsLayer = new OpenLayers.Layer.TMS("Your Layer Name", "TMS Service URL", {layername: 'Your Layer', type: 'png', isBaseLayer: true})`,其中'Your Layer Name'是你给图层起的名字,'...

    openlayers发布离线地图DEMO

    OpenLayers 支持TiledMapService (TMS) 和XYZ两种常见的瓦片地图服务模式。 在DEMO中,你将看到以下关键步骤: 1. **引入OpenLayers库**:在HTML文件中,你需要链接到OpenLayers的库文件。这通常通过CDN或本地文件...

    openlayer加载本地切片

    此外,OpenLayers还支持其他类型的地图切片源,如TMS(Tile Map Service),其URL模板中的顺序是`{y}-{x}-{z}`,与XYZ略有不同。 总结起来,OpenLayers加载本地切片涉及到创建TileSource实例,配置URL模板,以及将...

    自己开发的瓦片地图下载器(TMS),64位系统用

    自己发开的地图下载器,免费绿色,支持高德地图、谷歌地图、智图地图、Open Street Map等数据源的瓦片地图下载,支持影像图和电子地图等多种类型地图,64位系统版

    arcgis for js 加载本地离线瓦片数据

    首先,离线瓦片数据通常是按照特定的分块结构(如XYZ或TMS模式)存储的,每一块对应地图上的一个特定区域。91卫图作为国内知名的在线地图服务提供商,其提供的瓦片数据格式可能遵循了标准的Web Mercator投影,以便与...

    osgearth加载本地离线影像瓦片地图

    2. **获取瓦片数据**: 离线瓦片地图通常存储在特定的文件结构中,如XYZ或TMS格式。你需要有一个完整的瓦片集,包括所有级别的图像文件。 **第二步:创建osgEarth瓦片源** osgEarth提供了多种瓦片源,例如GDAL、...

    基于openlayer的军事动态标绘.7z

    1. 地图初始化:设置地图底图,通常可以使用OpenStreetMap、Google Maps等公开服务,或者自定义的WMS服务。 2. 动态数据加载:定期从服务器获取最新军事态势数据,更新到地图的矢量图层中。这可以通过Ajax请求实现...

    openlayer在线标绘,并实现增删改查

    在这个"openlayer在线标绘,并实现增删改查"的主题中,我们将深入探讨如何利用OpenLayers加载离线地图,进行在线标绘,以及如何实现标绘要素的增删改查功能,同时还会涉及地图图层切换和定位功能。 1. **加载离线...

    google离线API调用google瓦片叠加TMS瓦片源码及数据

    与Google Maps API的XYZ坐标系统不同,TMS的瓦片顺序是自底向上、从左到右的。在叠加TMS瓦片时,需要将这两种瓦片系统的坐标转换逻辑整合到代码中,以确保正确地显示来自不同源的瓦片。 "源码"部分可能包含了实现...

    使用c++17写的,将xyz格式的栅格瓦片转换为单个.mbtiles文件,便于数据迁移的程序。.zip

    XYZ格式的栅格瓦片是一种常见的地图切片存储方式,通常由多个小图像文件组成,每个文件代表地图上的一个特定区域。而MBTiles文件则是一种集中的、数据库式的文件格式,它将所有瓦片和元数据存储在一个SQLite数据库中...

    专业的瓦片地图下载工具

    - OSM(OpenStreetMap):开放街图是一个免费的地理数据库,很多瓦片地图下载工具支持直接下载OSM数据。 - GeoTIFF和MBTiles:这两种格式常用于存储瓦片地图,GeoTIFF是单个大图像,MBTiles则是将所有瓦片打包在一...

    openLayers geoserver常见问题

    TMS(Tile Map Service)是一种分块加载地图图像的服务,OpenLayers支持TMS图层,通过`OpenLayers.Layer.TMS`创建。 设置瓦片大小主要在TileCache或WMS服务配置中完成。 大数据量线绘制可以考虑分段加载、动态加载...

    利用Leaflet+heatmap加载本地google瓦片地图实现热力图

    谷歌离线瓦片地图是一种将大型地图分割成小块图像(通常为256x256像素)的方式,以便于快速加载和离线使用。这些瓦片通常按照层级(Zoom Level)和经纬度坐标进行组织。为了在Leaflet中使用这些瓦片,我们需要创建一...

    openlayer 官网 v6.1 例子代码与api参考文档

    它支持多种数据源,包括WMS、WMTS、TMS、GeoJSON等,使得开发者能够轻松地将地理信息集成到Web应用中。这个压缩包包含的是OpenLayers v6.1版本的相关例子代码和API参考文档,对于学习和理解OpenLayers的功能和用法...

    openlayers3 调用离线谷歌切片地图 示例

    4. **定义图层源**:创建一个`ol.source.XYZ`对象,用于加载谷歌地图的离线切片。你需要提供一个URL模板,该模板应包含切片的层级信息(z,x,y),例如:`'http://yourserver.com/tiles/{z}/{x}/{y}.png'`。在本例...

Global site tag (gtag.js) - Google Analytics