ckanext-geoview

功能簡介


  • OpenLayers Viewer

    • 此功能可以地圖方式呈現 WMS、WFS、GeoJSON、GML、KML、Google Fusion Tables 等地理資料/服務涵括的地理範圍。
    • 欲使用此功能,請在 ckan.plugins 加入 resource_proxy 與 geo_view (2.2 含以下版本則為 geo_preview)。
    • 若僅想預覽部分格式,可在 CKAN 設定檔加入 ckanext.geoview.ol_viewer.formats 變數,詳細設定方式可參考 擴充套件的說明
  • Leaflet GeoJSON Viewer

    • 以地圖檢視 GeoJSON 檔案。支援 geojson 與 gjson 兩種檔案格式名稱定義。
    • 欲使用此功能,請在 ckan.plugins 加入 resource_proxy 與 geojson_view (2.2 含以下版本則為 geojson_preview)。
  • Leaflet WMTS Viewer

    • 以地圖檢視 WMTS 服務圖層。支援 wmts 格式名稱定義。
    • 欲使用此功能,請在 ckan.plugins 加入 resource_proxy 與 wmts_view (2.2 含以下版本則為 wmts_preview)。

安裝


  • 自 github ckeckout source 並安裝:
$ cd /usr/lib/ckan/default/src/ckan/ckanext/
$ git clone https://github.com/ckan/ckanext-geoview.git
$ cd ckanext-geoview
(pyenv) $ pip install -e .

組態設定


  • 因此 plugin 預設使用 MapQuest-OSM 作為底圖,並不需要 API Key 作為讀取底圖的內容,但此政策已經被修改,因此自 2016/7/11 起,已不在支援無 key 的底圖讀取。

  • 建議改用 Mapbox 作為底圖,可以透過修改 production.ini 來達成

  • 底下使用 ckanext-geoview 的 OpenLayers Viewer 功能

# 於 ckan plugin 中加入 resource_proxy geo_view
ckan.plugins = resource_proxy geo_view

# 並於下方加入地圖組態
ckanext.spatial.common_map.type = mapbox
ckanext.spatial.common_map.mapbox.map_id = project-id
ckanext.spatial.common_map.mapbox.access_token = pk.xxxx

客製化地圖 : geo_view plugin


  • 修改路徑,如下 (定義在 public/resource.config 中)
/usr/lib/ckan/default/src/ckan/ckanext/
  |- ckanext-geoview/ckanext/geoview/public/
    |- css/ol_preview.css
    |- js/vendor/underscore/underscore.js
    |- js/vendor/openlayers2/OpenLayers.js
    |- js/vendor/openlayers2/theme/default/style.css    # 定義地圖 css, control sidebar (hidden)
    |- js/vendor/ol-helpers/EsriGeoJSON.js
    |- js/vendor/ol-helpers/ol-helpers.js               # 定義 node 樣式
    |- js/ol2_preview.js                                # openlayers 主框架
  • 修改 mapbox 中 OSM 底圖樣式 : 修改 mapbox.outdoors (ol2_preview.js)
if (mapConfig.type == 'mapbox') {
// MapBox base map
if (!mapConfig['mapbox.map_id'] || !mapConfig['mapbox.access_token']) {
  throw '[CKAN Map Widgets] You need to provide a map ID ([account].[handle]) and an access token when using a MapBox layer. ' +
        'See http://www.mapbox.com/developers/api-overview/ for details';
}

// change mapbox map types
urls = [
'//a.tiles.mapbox.com/v4/mapbox.outdoors/${z}/${x}/${y}.png?access_token=' + mapConfig['mapbox.access_token'],
'//b.tiles.mapbox.com/v4/mapbox.outdoors/${z}/${x}/${y}.png?access_token=' + mapConfig['mapbox.access_token'],
'//c.tiles.mapbox.com/v4/mapbox.outdoors/${z}/${x}/${y}.png?access_token=' + mapConfig['mapbox.access_token'],
'//d.tiles.mapbox.com/v4/mapbox.outdoors/${z}/${x}/${y}.png?access_token=' + mapConfig['mapbox.access_token'],
];
attribution = 'Mapbox © OpenStreetMap';
baseMapLayer = new OpenLayers.Layer.XYZ('MapBox', urls, {
    sphericalMercator: true,
    wrapDateLine: true,
    attribution: attribution
});
} else if (mapConfig.type == 'custom') {
  • 修改 geojson 的 style 為 /js/vendor/ol-helpers/ol-helpers.js

    ...

    OL_HELPERS.createGeoJSONLayer = function (url) {

        var geojson = new OpenLayers.Layer.Vector(
            "GeoJSON",
            {
                projection: EPSG4326,
                strategies: [new OpenLayers.Strategy.Fixed()],
                protocol: new OpenLayers.Protocol.HTTP({
                    url: url,
                    format: new OpenLayers.Format.GeoJSON()
                }),
                styleMap: new OpenLayers.StyleMap({'default':{
                    /*
                    * add text to layers
                    strokeColor: "#00FF00",
                    strokeOpacity: 1,
                    strokeWidth: 1,
                    fillColor: "#FF5500",
                    fillOpacity: 0.5,
                    label : "123",
                    fontSize: "8px",
                    fontFamily: "Courier New, monospace",
                    labelXOffset: "0.5",
                    labelYOffset: "0.5"
                    */

                    /* add circle */
                    strokeColor: "rgba(100,100,100,1)",
                    fillColor: "rgba(255,127,39,0.5)",
                    strokeOpacity: 1,
                    fillOpacity: 0.5,
                    strokeWidth: 1,
                    pointRadius: 5,
                    graphicName: "circle"
                }})
            }
        );

        //TODO add styles

        return geojson
    }

    ...
  • 隱藏 Control box css/ol_preview.css
#map {
  width: 100%;
  height: 450px;
}

/* ... */

#data-preview .olControlLayerSwitcher {
     ...
      -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2);
      box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2);

      /* hidden box */
      visibility: hidden;
}

/* ... */

@media only screen and (max-width: 767px) {
 #map{
  width: 100%;
 }
}

results matching ""

    No results matching ""