Geoportal raz jeszcze - warstwa wizualizacji BDOT
Ponieważ miałem chwilę wolnego czasu postanowiłem przerobić tutejszy skrypt dodający warstwy geoportalu do WME o nową warstwę - wizualizację BDOT - żeby mi ktoś nie zarzucił, że jestem programistą i się nie udzielam... (tak naprawdę to skończyłem inne studia i pracuję zupełnie w innym temacie...)
Kto ma tampermonkey może wkleić sobie zawartość tego skryptu i włączyć warstwę Geoportal - topo#1
Mam nadzieję, że Patryk Ściborek i Paweł Pyrczak wybaczą mi taką ingerencję w kod źródłowy - tak naprawdę niewiele się zmieniło, ot dodany nowy layer do openlayers'ów.
Włączone są następujące warstwy:
LasZadrz_A,Kolej_L,Zabudowa_A,NazUl_L,Bud_A,PktAdr_P,Autost_L,Tunel_L,DrEksp_L,DrGl_L,DrZb_L,DrLokUtw_L
Oczywiście, każdy może zmodyfikować ten kod i włączyć swoje, które woli. Do wyboru :
Capabilities servera WMS dla wizualzacji BDOT (schemat XML)
albo po polsku :
To nie są wszystkie warstwy, ale większość najbardziej interesująca z tej wizualizacji.
PROBLEMY:
- jak zwykle - geoportal długo renderuje niektóre tile, co powoduje wypadanie ich z obrazu - jeszcze nie wiem jak to pogodzić.
- rozdzielczość renderowanych kwadratów pozostawia trochę/wiele do życzenia
- potrzeba stworzenia menu w którym każdy wybrałby warstwy które chce mieć nałożone na mapę
- przejście na OpenLayer 3 ??? (może to rozwiąże kilka problemów)
Kto ma tampermonkey może wkleić sobie zawartość tego skryptu i włączyć warstwę Geoportal - topo#1
Code: Select all
// ==UserScript==
// @name geoportal.gov.pl layers for WME without translating PROXY
// @version 0.2.10.1
// @description Displays layers from geoportal.gov.pl in WME
// @grant none
// @grant GM_info
// @include https://*.waze.com/*/editor/*
// @include https://*.waze.com/editor/*
// @include https://*.waze.com/map-editor/*
// @include https://*.waze.com/beta_editor/*
// @include https://editor-beta.waze.com/*
// @copyright 2013,2014+, Patryk Ściborek, Paweł Pyrczak
// @run-at document-end
// @namespace https://greasyfork.org/users/193
// ==/UserScript==
function GEOPORTAL_bootstrap()
{
var bGreasemonkeyServiceDefined = false;
try {
var ver = window.navigator.appVersion.match(/Chrome\/(.*?) /)[1];
} catch(err) {
var ver = null;
}
if (null !== ver) {
var itschrome = true;
///ver = "27.0.1438.7"; // last old working version
// example: 32.0.1700.107
// [0] - major versin
// [2] - minor version
ver = ver.split(".");
ver[0] = parseInt(ver[0]);
ver[2] = parseInt(ver[2]);
if (ver[0] > 27) {
var newmethod = true;
} else if (ver[0] == 27) {
if (ver[2] <= 1438) {
var newmethod = false;
} else {
var newmethod = true;
}
} else {
var newmethod = false;
}
} else {
var itschrome = false;
var newmethod = false;
}
try
{
if ("object" === typeof Components.interfaces.gmIGreasemonkeyService) // Firefox tells that "Components" is deprecated
{
bGreasemonkeyServiceDefined = true;
}
} catch (err) { };
try
{
if ("object" === typeof GM_info)
{
bGreasemonkeyServiceDefined = true;
}
} catch (err) { };
if ( "undefined" === typeof unsafeWindow || ! bGreasemonkeyServiceDefined)
{
try {
unsafeWindow = ( function ()
{
var dummyElem = document.createElement('p');
dummyElem.setAttribute ('onclick', 'return window;');
return dummyElem.onclick ();
} ) ();
}
catch (err)
{
//Ignore.
}
}
//And check again for new chrome, and no tamper(grease)monkey
if ( itschrome && newmethod && !bGreasemonkeyServiceDefined)
{
console.log("Geoportal: no Tampermonkey/Greasemonkey found - injecting code to page.");
//use "dirty" but effective method with injection to document
var DLscript = document.createElement("script");
DLscript.textContent =''+
geoportal_run.toString()+'unsafeWindow=window; \n'+
'geoportal_run() \n';
DLscript.setAttribute("type", "application/javascript");
document.body.appendChild(DLscript);
} else {
/* begin running the code! */
console.log("Geoportal: unsafeWindow found - runing code.");
setTimeout(geoportal_run,100);
}
}
function geoportal_run() {
GEOPORTAL = { ver: "0.2.9" };
GEOPORTAL.init = function(w)
{
console.log('Geoportal: start init ');
//wms_service="http://sdi.geoportal.gov.pl/wms_orto/wmservice.aspx?"; // layer: ORTOFOTO,ORTOFOTO_ISOK
wms_service_orto="http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer?"; // layer: Raster
//wms_service_orto_2="http://mapproxy.sciborek.com/service?"; // layer: geoportal_orto
wms_service_orto_2="http://sdi.geoportal.gov.pl/wms_orto/wmservice.aspx?"; // layer: ORTOFOTO,ORTOFOTO_ISOK
wms_service_prng="http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_PRNG_WMS/MapServer/WMSServer?"; // nazwy
wms_service_bud="http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_BDOT_BUD_2010/MapServer/WMSServer?"; // budynki
wms_service_topo_1="http://mapy.geoportal.gov.pl/wss/service/pub/guest/kompozycjaG2_TBD_WMS/MapServer/WMSServer?"; // topo
var my_wazeMap = w;
if (typeof my_wazeMap == undefined) my_wazeMap = unsafeWindow.Waze.map;
var epsg900913 = new unsafeWindow.OpenLayers.Projection("EPSG:900913");
var epsg4326 = new unsafeWindow.OpenLayers.Projection("EPSG:4326");
var tileSizeG = new unsafeWindow.OpenLayers.Size(512,512);
getUrl4326 = function (bounds) {
/* this function is modified Openlayer WMS CLASS part */
/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
* full list of contributors). Published under the 2-clause BSD license.
* See license.txt in the OpenLayers distribution or repository for the
* full text of the license. */
bounds = bounds.clone(); // Zrobione dlatego że tranformacja była dziedziczona do parenta i się sypało aż niemiło
bounds = this.adjustBounds(bounds);
var imageSize = this.getImageSize(bounds);
var newParams = {};
bounds.transform(this.epsg900913,this.epsg4326);
// WMS 1.3 introduced axis order
var reverseAxisOrder = this.reverseAxisOrder();
newParams.BBOX = this.encodeBBOX ?
bounds.toBBOX(null, reverseAxisOrder) :
bounds.toArray(reverseAxisOrder);
newParams.WIDTH = imageSize.w;
newParams.HEIGHT = imageSize.h;
var requestString = this.getFullRequestString(newParams);
//this.setZIndex(3);
//this.map.getLayersBy("uniqueName","satellite_imagery").first().setZIndex(1);
return requestString;
};
getFullRequestString4326 = function(newParams, altUrl) {
/* this function is modified Openlayer WMS CLASS part */
/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
* full list of contributors). Published under the 2-clause BSD license.
* See license.txt in the OpenLayers distribution or repository for the
* full text of the license. */
var mapProjection = this.map.getProjectionObject();
var projectionCode = this.projection.getCode();
var value = (projectionCode == "none") ? null : projectionCode;
if (parseFloat(this.params.VERSION) >= 1.3) {
this.params.CRS = value;
} else {
this.params.SRS = "EPSG:4326"; //na sztywno najlepiej
}
if (typeof this.params.TRANSPARENT == "boolean") {
newParams.TRANSPARENT = this.params.TRANSPARENT ? "TRUE" : "FALSE";
}
return unsafeWindow.OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(
this, arguments);
};
var geop_orto = new unsafeWindow.OpenLayers.Layer.WMS("Geoportal - orto#1",
wms_service_orto,
{
layers: "Raster",
format: "image/jpeg"
},{
tileSize: tileSizeG,
isBaseLayer: false,
visibility: false,
transitionEffect: "resize",
uniqueName: "orto1",
epsg900913: epsg900913,
epsg4326: epsg4326,
getURL: getUrl4326,
getFullRequestString: getFullRequestString4326
});
I18n.translations.en.layers.name["orto1"] = "Geoportal - orto#1";
var geop_orto2 = new OpenLayers.Layer.WMS("Geoportal - orto#2",
wms_service_orto_2,
{
layers: "ORTOFOTO,ORTOFOTO_ISOK",
format: "image/jpeg"
},{
tileSize: tileSizeG,
isBaseLayer: false,
visibility: false,
transitionEffect: "resize",
uniqueName: "orto2",
epsg900913: epsg900913,
epsg4326: epsg4326,
getURL: getUrl4326,
getFullRequestString: getFullRequestString4326
})
I18n.translations.en.layers.name["orto2"] = "Geoportal - orto#2";
// geoportal
var geop_topo1 = new OpenLayers.Layer.WMS("Geoportal - topo#1",
wms_service_topo_1,
{
layers: "LasZadrz_A,Kolej_L,Zabudowa_A,NazUl_L,Bud_A,PktAdr_P,Autost_L,Tunel_L,DrEksp_L,DrGl_L,DrZb_L,DrLokUtw_L",
format: "image/jpeg",
transparent: "false",
},{
tileSize: tileSizeG,
isBaseLayer: false,
visibility: false,
opacity: 0.3,
transitionEffect: "resize",
uniqueName: "topo1",
epsg900913: epsg900913,
epsg4326: epsg4326,
getURL: getUrl4326,
getFullRequestString: getFullRequestString4326
})
I18n.translations.en.layers.name["topo1"] = "Geoportal - topo#1";
//geoportal_prng
var geop_prng = new OpenLayers.Layer.WMS("Geoportal - nazwy",
wms_service_prng,
{
layers: "Wies,Miasto,Drogi",
transparent: "true",
format: "image/png"
},{
tileSize: tileSizeG,
isBaseLayer: false,
visibility: false,
uniqueName: "nazwy",
epsg900913: epsg900913,
epsg4326: epsg4326,
getURL: getUrl4326,
getFullRequestString: getFullRequestString4326
});
I18n.translations.en.layers.name["nazwy"] = "Geoportal - nazwy";
var geop_adresy = new OpenLayers.Layer.WMS("Geoportal - adresy",
wms_service_bud,
{
layers: "12,11,10,9,8,7,6,5,4,3,2,1,0",
transparent: "true",
format: "image/png"
},{
tileSize: tileSizeG,
isBaseLayer: false,
visibility: false,
uniqueName: "adresy",
epsg900913: epsg900913,
epsg4326: epsg4326,
getURL: getUrl4326,
getFullRequestString: getFullRequestString4326
});
I18n.translations.en.layers.name["adresy"] = "Geoportal - adresy";
console.log('Geoportal: adding layers');
if(my_wazeMap.getLayersByName("Geoportal - orto").length == 0)
{
my_wazeMap.addLayer(geop_orto);
my_wazeMap.addLayer(geop_orto2);
my_wazeMap.addLayer(geop_topo1);
my_wazeMap.addLayer(geop_prng);
my_wazeMap.addLayer(geop_adresy);
console.log('Geoportal: layers added');
this.OrtoTimer();
}
}
GEOPORTAL.OrtoTimer = function() {
setTimeout(function(){
var a = unsafeWindow.Waze.map.getLayersBy("uniqueName","orto1");
if (a[0]) a[0].setZIndex(1);
var b = unsafeWindow.Waze.map.getLayersBy("uniqueName","orto2");
if (b[0]) b[0].setZIndex(2);
var c = unsafeWindow.Waze.map.getLayersBy("uniqueName","topo1");
if (c[0]) c[0].setZIndex(3);
unsafeWindow.Waze.map.getLayersBy("uniqueName","satellite_imagery").first().setZIndex(1); // mapy Googla
GEOPORTAL.OrtoTimer();
},500);
}
GEOPORTAL.initBootstrap = function() {
try {
if (undefined != typeof unsafeWindow.Waze.map.getLayersByName) {
this.init(unsafeWindow.Waze.map);
} else {
console.log("Geoportal: WME not initialized yet, trying again later.");
setTimeout(function(){
GEOPORTAL.initBootstrap();
},700);
}
} catch (err) {
console.log("Geoportal: WME not initialized yet, trying again later.");
setTimeout(function(){
GEOPORTAL.initBootstrap();
},700);
}
}
GEOPORTAL.initBootstrap();
}
GEOPORTAL_bootstrap()
Włączone są następujące warstwy:
LasZadrz_A,Kolej_L,Zabudowa_A,NazUl_L,Bud_A,PktAdr_P,Autost_L,Tunel_L,DrEksp_L,DrGl_L,DrZb_L,DrLokUtw_L
Oczywiście, każdy może zmodyfikować ten kod i włączyć swoje, które woli. Do wyboru :
Capabilities servera WMS dla wizualzacji BDOT (schemat XML)
albo po polsku :
Code: Select all
Warstwy BDOT:
RoslKrzew_A - Roslinność krzewiasta
LasZadrz_A - Teren leśny i zadrzewiony
Zabudowa_A - Zabudowa
TerPodDr_A - Tereny pod drogami kołowymi, szynowymi i lotniskami
KomplKom_A - Kompleks komunikacyjny
Przem_gosp_A - Kompleks przemysłowo - gospodarczy
Pozost_ter_niezab_A - Pozostały teren niezabudowany
WyrobZwal_A - Wyrobisko i zwałowisko
Nieuzytk_A - Grunt nieużytkowany
UprTrw_A - Uprawa trwała
TrawaUprRolna_A - Roślinność trawiasta i uprawa rolna
Plac_A - Plac
IUrzTechn_A - inne urządzenia techniczne
ObOrient_A - Obiekty o znaczeniu orientacyjnym w terenie (powierzchnia)
ZbTech_A - Zbiorniki techniczne
Mokradlo_A - Mokradło
Szuwary_A - Szuwary
PrzewRur_L - Przewody rurowe
CiekOkr_L - Ciek wodny okresowy
RzekKanal_L - Odcinki rzek i kanałów
RzekiEt - Odcinki rzek i kanałów - etykiety
Woda_A - Woda powierzchniowa
Rezer_A - Granice rezerwatu przyrody
PK_A - Park krajobrazowy
PN_A - Granice parku narodowego
Gmina - Granica gminy lub miasta na prawach gminy
DzielnicaDelMiasta - Granica dzielnicy lub delegatury miasta
BudHydro_A - Budowla hydrotechniczna
BudCment_A - Budowla cmentarna
BudSport_A - Budowla sportowa
Bud_A - Budynek
BudWys_A - Budynek wysoki
BudSport_L - Budowla sportowa (linia)
ObPrzy_L - Obiekt przyrodniczy (linia)
BudZiemn_L - Budowla ziemna
UmocnKolej_L - Umocnienie drogowe kolejowe i wodne
BudHydro_L - Budowla hydrotechniczna (linia)
Przeprawa_L - Przeprawa
PomMolo_L - pomost molo
MurHist_L - Mur historyczny
PeronRampa_A - Peron lub rampa kolejowa
Trybuna_A - Trybuna
UrzTrans_L - Urzadzenie transportowe (linia)
Tramw_L - Linia tramwajowa
KolejWBud_L - Linia kolejowa w budowie
koleiWask_L - Linia kolei wąskotorowej
kolej_L - linia kolejowa
Sciez_L - Ścieżka
Aleja_L - Alejka lub pasaż
DrDoj_L - Droga dojazdowa lub inna gruntowa
DrLokGr_L - Droga lokalna gruntowa
DrLokNieutw_L - Jezdnia drogi lokalnej dojazdowej lub innej o nawierzchni utwardzonej
DrLokUtw_L - Jezdnia drogi lokalnej dojazdowej lub innej o nawierzchni twardej
DrZb_L - Jezdnia drogi zbiorczej o nawierzchni twardej
DrGl_L - Jezdnia drogi głównej
DrEksp_L - Jezdnia drogi ekspresowej lub głównej ruchu przyśpieszonego
Autost_L - Jezdnia autostrady
Tunel_L - Tunel
MostWiaduk_L - Most, wiadukt lub estakada
NazUl_L - Nazwy_ulic
PktAdr_P - Punkt adresowy
PROBLEMY:
- jak zwykle - geoportal długo renderuje niektóre tile, co powoduje wypadanie ich z obrazu - jeszcze nie wiem jak to pogodzić.
- rozdzielczość renderowanych kwadratów pozostawia trochę/wiele do życzenia
- potrzeba stworzenia menu w którym każdy wybrałby warstwy które chce mieć nałożone na mapę
- przejście na OpenLayer 3 ??? (może to rozwiąże kilka problemów)
Re: Geoportal raz jeszcze - warstwa wizualizacji BDOT