带你剖析WebGis的世界奥秘----瓦片式加载地图

转:https://zxhtom.oschina.io/zxh/20160805.html

 编程  java  2016/08/05 0留言, 0参与 view : 4次

本文于546天之前发表,文中内容可能已经过时。

WebGIS应用程序的页面能够通过HTML、JSP、ASP或任何任何类型的Web页文件构成

  • WebGIS应用程序的页面能够通过HTML、JSP、ASP或任何任何类型的Web页文件构成,其特殊之处在于,它的请求提交的方法并不是通过常用的 “超链接”形式,而是使用鼠标与Web浏览器上地图进行的,因此,我们开发WebGIS应用程序的过程,就是考虑如何向一台Web服务器发送地图请求或其 它类型请求,并将响应进行解释显示的过程
  • 加载瓦片最后我们是呈现出地图的形式,所以我们需要一个div带装在这个map,这个在前端很容易实现
  1. <div id="rcp2_map" class="smallmap" style="width: 100%; height: 100%;"></div>
  • 有了这个我们的地图就有了安身之所,下面我们就开始我们的加载步骤,具体步骤我放在脚本里面,在定义map的时候我们我们需要两个参数,第一个是div的名称,第二个是map的一些设置
  1. var options = {
  2. projection : "EPSG:4326",
  3. center : new OpenLayers.LonLat(105.5, 39.5)
  4. };
  5. var map = new OpenLayers.Map('rcp2_map', options);
  • 有了map我们继续向map里面加入我们的瓦片也就是所谓的layer(层)关键是我们的层去哪里拿,我先贴个我服务上的数据地图代码
  1. var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
  2. // geoserver所在服务器地址
  3. // "http://192.168.1.120:8080/geoserver/wms",
  4. "http://192.168.1.15:8088/geoserver/china-rail/wms", {
  5. layers : "china-rail:大公鸡"
  6. });
  • 如果你没有在GeoService上发布过,你也不用着急,人家官网给你提供了数据,你可以从官网拿层来用
  1. var wms= new OpenLayers.Layer.OSM();
  • 两种方式随便你选择,拿到图层我们只要进入map就行了
  1. // 添加wms图层
  2. map.addLayer(wms);

到此我们的地图就显示了,我们来看看想过吧,我拿的是我服务的地图,可以不怎么好看,我们只要效果

  • 滚动鼠标滚动键放大地图显示

  • 在地图显示方面我们可以设置的,比如说以什么地方中心显示呢,以多打的比例显示呢,设置中心点在上面的代码已经提到了,下面我贴个比例显示的代码

  1. map.zoomTo(5); // 以第5级方式显示地图
  • 有没有看到我上面地图左右下角的一些功能,相信你们现在是没有的,这些都是控制功能,需要我们手动加入
  1. // 添加control空间
  2. map.addControl(new OpenLayers.Control.LayerSwitcher());
  3. map.addControl(new OpenLayers.Control.MousePosition());
  4. map.addControl(new OpenLayers.Control.ScaleLine());
  5. map.addControl(new OpenLayers.Control.Scale);
  • 下面我们在看看点击Map事件和定位功能吧。

    • 定位说白了就是以某个点中心显示,然后在把这个点给高亮标注出来我们先标注这个点在这支中心点
  1. - 点击很容易只要我们注册一下事件就好了,我选择在Map控件上面注册这个点击事件,你们根据自己的需要选择控件注
  1. //拿到坐标
  2. var jd = Number(document.getElementById('jd').value);
  3. var wd = Number(document.getElementById('wd').value);
  4. if(document.getElementById('jd').value==""){
  5. jd=116.3;
  6. }
  7. if(document.getElementById('wd').value==""){
  8. wd=39.9;
  9. }
  10. //定义一个box层
  11. var boxes = new OpenLayers.Layer.Boxes("Boxes");
  12. if (this.box != null) {
  13. this.box.display(false); //清除上一次的区域标记
  14. }
  15. //定义一个Bounds
  16. bounds = new OpenLayers.Bounds();
  17. //有参数生成两个经纬度
  18. var lonlat1 = new OpenLayers.LonLat(jd, wd);
  19. var lonlat2 = new OpenLayers.LonLat(jd, wd);
  20. bounds.extend(lonlat1);
  21. bounds.extend(lonlat2);//生成一个经纬度范围的bounds
  22. box = new OpenLayers.Marker.Box(bounds);
  23. box.events.register("click", box, function(e) {
  24. this.setBorder("blue");
  25. });//注册box的点击事件
  26. boxes.addMarker(box);
  27. map.addLayer(boxes);
  28. map.centerLayerContainer(lonlat1,6);
  29. map.panTo(lonlat1); //平移到范围的中心点
  1. map.events.register("click", map, function(e) {
  2. var t=e;
  3. //获取经纬度
  4. var lonlat = map.getLonLatFromPixel(e.xy);
  5. });
  • 研究了这个Openlayers好几天感觉这个显示的地图不好,不好确定具体信息,下面介绍一个升级版本OpenLayers3的技术
  • 前面步骤一样,在注册map的时候有了不同
  1. var raster = new ol.layer.Tile({
  2. source: new ol.source.OSM()
  3. });
  4. var vector = new ol.layer.Vector({
  5. source: new ol.source.Vector({
  6. url: './source/china.json',
  7. format: new ol.format.GeoJSON()
  8. })
  9. });
  10. var view = new ol.View({
  11. // the view's initial state
  12. center: search,
  13. zoom: 5
  14. });
  15. var map = new ol.Map({
  16. layers: [raster, vector],
  17. target: 'map',
  18. view: view
  19. });
  • 看看效果

  • 双击放大地图显示

  • 这里的定位和点击就草草说说了

  1. 点击
  2. map.on('singleclick',mapClick);
  3. function mapClick(e){
  4. var pixel = map.getEventPixel(e.originalEvent);
  5. var featureInfo = map.forEachFeatureAtPixel(pixel,
  6. function (feature, layer) {
  7. return {feature:feature,layer:layer};
  8. });
  9. var coordinate = e.coordinate;
  10. var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
  11. coordinate, 'EPSG:3857', 'EPSG:4326'));
  12. if (featureInfo!==undefined&&featureInfo!==null
  13. &&featureInfo.layer!==null)
  14. {
  15. alert(hdms+"\n这里属于"+featureInfo.feature.get("name")+"省");//显示点击区域的
  16. console.log('打印选择要素');
  17. console.log(featureInfo .feature);
  18. console.log('打印选择要素所属Layer');
  19. console.log(featureInfo .layer);
  20. }else{
  21. alert(hdms+"\n这里不属于中国或者这里是大海");//显示点击区域的
  22. }
  23. }
  24. 定位
  25. view.setCenter(ol.proj.fromLonLat([Number(document.getElementById('jd').value), Number(document.getElementById('wd').value)]));

里面用到的china.json数据下载地址:http://download.csdn.net/detail/u013132051/9595986

下面本人继续更新WebGis的后续精准操作

带你剖析WebGis的世界奥秘----瓦片式加载地图(转)的更多相关文章

  1. 带你剖析WebGis的世界奥秘----瓦片式加载地图

    WebGIS应用程序的页面能够通过HTML.JSP.ASP或任何任何类型的Web页文件构成,其特殊之处在于,它的请求提交的方法并不是通过常用的 "超链接"形式,而是使用鼠标与Web ...

  2. 带你剖析WebGis的世界奥秘----Geojson数据加载(高级)(转)

    带你剖析WebGis的世界奥秘----Geojson数据加载(高级) 转:https://zxhtom.oschina.io/zxh/20160819.html  编程  java  2016/08/ ...

  3. 带你剖析WebGis的世界奥秘----Geojson数据加载(高级)

    前言:前两周我带你们分析了WebGis中关键步骤瓦片加载+点击事件(具体的看前两篇文章),下面呢,我带大家来看看Geojson的加载及其点击事件 Geojson数据解析 GeoJSON是一种对各种地理 ...

  4. 带你剖析WebGis的世界奥秘----点和线的世界(转)

    带你剖析WebGis的世界奥秘----点和线的世界 转:https://zxhtom.oschina.io/zxh/20160813.html  编程  java  2016/08/13 0留言, 0 ...

  5. 带你剖析WebGis的世界奥秘----点和线的世界

    前言 昨天写了好久的博文我没保存,今天在来想继续写居然没了,气死人啊这种情况你们见到过没,所以今天重新写,我还是切换到了HTML格式的书写上.废话不多说了,我们现在就进入主题,上周我仔细研究了WebG ...

  6. 局域网Cesium离线影像及瓦片影像地图加载

    1.Cesium简介 优点: cesium展示地图数据效果比较好,解析2D地图各种不同服务类型的数据源,比如百度地图.天地图.arcgis地图.BingMap.openStreetMap.MapBox ...

  7. Cesium中Clock控件及时间序列瓦片动态加载

    前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合.Cesium的强大之处也在于其 ...

  8. Cocos Creator 资源加载流程剖析【一】——cc.loader与加载管线

    这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运 ...

  9. Tomcat增加Context配置不带项目名访问导致启动的时候项目加载两次

    eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/.现在需要改成这样访问http://localhost.修 ...

随机推荐

  1. 一个通用Makefile详解

    我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文 件. 如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写 ...

  2. 使用MS VS的命令来编译C++程序

    以前,我是在linux下使用命令或者makefile来编译C++程序的,最近需要在windows上做点测试.于是使用ms VS来作为开发工具,这种大揽全包的IDE确实好用:点一下菜单,编译结果就出来了 ...

  3. SpringMVC 过滤器Filter使用解析

    SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码. 本节主要是研读SpringMVC框架中的 ...

  4. Codeforces 589F Gourmet and Banquet

    A gourmet came into the banquet hall, where the cooks suggested n dishes for guests. The gourmet kno ...

  5. 1138. Postorder Traversal (25)

    Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...

  6. 窗口玻璃特效,半透明窗口,使用DWM实现Aero Glass效果

    转自:http://blog.csdn.net/ntwilford/article/details/5656633 从Windows Vista开始,Aero Glass效果被应用在了Home Pre ...

  7. FastAdmin 学习线路 (2018-09-09 增加 Layer 组件)

    FastAdmin 学习线路 (2018-09-09 增加 Layer 组件) 基础 HTML CSS DIV Javascript 基础 jQuery php 基础 对象 命名空间 Apache 或 ...

  8. NOIp2018 D2T3 defense——树上倍增

    题目:https://www.luogu.org/problemnew/show/P5024 考场上只会写n,m<=2000的暴力,还想了想A1和A2的情况,不过好像只得了A1的分.然后仔细一看 ...

  9. Git的其他一些使用案例

    按照格式输出提交号 作者 时间 git log --pretty=format:"%h %an %cd" --date=iso 获取所有远程的tag和他的commit sha1 g ...

  10. Qt WebRTC demo

    This is a very simple demonstration of how to stream from a native application to the browser using ...