一个GISER 6.7的祝福

来源:互联网 发布:淘宝拍图技巧 编辑:程序博客网 时间:2024/06/11 03:25

概述:

一年一度的高考今天开始了,回想10年前,那是我第一次高考;10年后,作为一个GISER,在此给大家献上一个GISER的祝福,祝愿各位考生:考神附体,考完报考GIS专业(LZUの,给自己的母校打个广告)……


内容:

1、爬取全国的高校的数据;

2、根据天地图的接口,获取高校的经纬度;

3、将数据制作成shp,并转换为geojson;

4、制作全国高校WEBGIS展示图。


效果:


爬取数据,保存为txt


将txt用Excel打开并另存为


在Arcmap中转换为shp


将shp转换为geojson


WEBGIS中展示

实现:

1、获取高校数据

public JSONObject getUrlContent(String url) throws IOException, JSONException{JSONObject json = null;InputStream is = null;try {is = new URL(url).openStream();BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));    StringBuilder sb = new StringBuilder();    int cp;    while ((cp = rd.read()) != -1) {        sb.append((char) cp);    }    String strJson = sb.toString().substring(7,sb.toString().length()-2);    json = new JSONObject(strJson);    is.close();} catch (IOException e) {e.printStackTrace();}return json;}public String[] getLonLatByName(String name){String[] lonlat = new String[]{"99","99"};String url = "http://api.tianditu.com/apiserver/ajaxproxy?proxyReqUrl=http://map.tianditu.com/query.shtml?postStr={'keyWord':'"+name+"','level':'3','mapBound':'29.88281,-23.56399,170.50781,53.54031','queryType':'7','start':'0','count':'1'}&type=query";InputStream is = null;try {is = new URL(url).openStream();BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));    StringBuilder sb = new StringBuilder();    int cp;    while ((cp = rd.read()) != -1) {    sb.append((char) cp);}String strJson = sb.toString().substring(19,sb.toString().length()-1);    JSONObject json = new JSONObject(strJson);    JSONArray arr = new JSONArray();    if(!json.isNull("pois")){    arr = json.getJSONArray("pois");    JSONObject poiinfo = (JSONObject) arr.get(0);    lonlat = poiinfo.get("lonlat").toString().split(" ");    is.close();    }}catch (IOException | JSONException e) {    e.printStackTrace();    }    return lonlat;}

2、用GDAL实现shp转geojson

# -*- coding: utf-8 -*-import sysfrom osgeo import gdalfrom osgeo import ogr#读取shap文件def shp2json():    #为了支持中文路径,请添加下面这句代码     gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO")      #为了使属性表字段支持中文,请添加下面这句    gdal.SetConfigOption("SHAPE_ENCODING","")      #注册所有的驱动     ogr.RegisterAll()      #数据格式的驱动    driver = ogr.GetDriverByName('ESRI Shapefile')    ds = driver.Open(r'D:\data\gdal\university.shp');    if ds is None:        print "打开文件失败!"        sys.exit(1)    dv = ogr.GetDriverByName("GeoJSON")    if dv is None:        print "打开驱动失败!"        sys.exit(1)    dv.CopyDataSource(ds, r"D:\data\gdal\university.geojson")    ds.Destroy()    print "转换成功!"def main():    shp2json();    if __name__ == "__main__":    main();

3、展示数据

<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>百度样式地图</title><link rel="stylesheet" href="https://openlayers.org/en/v4.1.1/css/ol.css" type="text/css"><style type="text/css">body, #map {border: 0px;margin: 0px;padding: 0px;width: 100%;height: 100%;font-size: 13px;overflow: hidden;}#map{ background: url("../../images/bgImg.gif");background-repeat: inherit;}</style><!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>    <script src="https://openlayers.org/en/v4.1.1/build/ol.js"></script>    <script type="text/javascript" src="../../../../plugin/jquery/jquery-1.8.3.js"></script><script type="text/javascript">function init(){    var projection = ol.proj.get("EPSG:3857");    var resolutions = [];    for(var i=0; i<19; i++){        resolutions[i] = Math.pow(2, 18-i);    }    var tilegrid  = new ol.tilegrid.TileGrid({        origin: [0,0],        resolutions: resolutions    });        function getBaiduCustomimage(customid){    var baidu_source = new ol.source.TileImage({        projection: projection,        tileGrid: tilegrid,        tileUrlFunction: function(tileCoord, pixelRatio, proj){            if(!tileCoord){                return "";            }            var z = tileCoord[0];            var x = tileCoord[1];            var y = tileCoord[2];            if(x<0){                x = "M"+(-x);            }            if(y<0){                y = "M"+(-y);            }            return "http://api2.map.bdimg.com/customimage/tile?&x="+x+            "&y="+y+"&z="+z+            "&udt=20170428&scale=1&ak=E4805d16520de693a3fe707cdc962045&customid="+customid;        }    });    return new ol.layer.Tile({        source: baidu_source    });    }/** * 默认地图样式(normal) * 清新蓝风格(light) * 黑夜风格(dark) * 红色警戒风格(redalert) * 精简风格(googlelite) * 自然绿风格(grassgreen) * 午夜蓝风格(midnight) * 浪漫粉风格(pink) * 青春绿风格(darkgreen) * 清新蓝绿风格(bluish) * 高端灰风格(grayscale) * 强边界风格(hardedge) */    var baidu_layer = getBaiduCustomimage("midnight");var province = new ol.layer.Image({        source: new ol.source.ImageWMS({          ratio: 1,          url: 'http://10.16.48.185:8086/geoserver/bj_grid/wms',          params: {          'FORMAT': 'image/png',                'VERSION': '1.1.1',                STYLES: '',                LAYERS: 'bj_grid:province_line',          }        })    });    $.get("../data/university.geojson",null,function(result){result = eval("("+result+")");    var features = (new ol.format.GeoJSON()).readFeatures(result);    for(var i=0;i<features.length;i++){    var _feature = features[i];    var _geom = features[i].getGeometry();_geom.transform('EPSG:4326', 'EPSG:3857');    _feature.setGeometry(_geom);    }    var vectorSource = new ol.source.Vector({        features: features    });var vector = new ol.layer.Vector({source: vectorSource,style: new ol.style.Style({          image: new ol.style.Circle({        radius: 3,        fill: new ol.style.Fill({color: "rgba(0,255,255,0.5)"})    })        })});var map = new ol.Map({        target: 'map',        layers: [baidu_layer, province, vector],        view: new ol.View({            center: ol.proj.transform([104.214, 35.847], 'EPSG:4326', 'EPSG:3857'),            zoom: 4        })    });});   }</script></head><body onLoad="init()"><div id="map"></div></body></html>

---------------------------------------------------------------------------------------------------------------

技术博客

CSDN:http://blog.csdn.NET/gisshixisheng

博客园:http://www.cnblogs.com/lzugis/

在线教程

http://edu.csdn.Net/course/detail/799

Github

https://github.com/lzugis/

联系方式

q       q:1004740957

e-mail:niujp08@qq.com

公众号:lzugis15

Q Q 群:452117357(webgis)

             337469080(Android)