Jak osadzić mapę OpenStreetMap na stronie WWW
Artykuł w fazie projektowania. Zainspirowany został postami Macieja Tokarza w wątku „Ewidencja danych na mapie” na grupie dyskusyjnej pl.comp.bazy-danych.msaccess.
Uwaga: Jest to mój pierwszy (prototypowy) przykład związany z mapami. Kod JavaScript „jest, jaki jest” i może być tylko lepszy. To co jest proste w VBA, nie jest już takie łatwe JS.
Te nawiasy, deklaracje, tablice {}: ; += var = new ... var arr = new Array(); var arr = new Array('ala','ola','ula') arr[0]='ala'; arr[1]='ola'; arr[2]='ula'; for (var i=0;i<=arr.length-1;i++) {txt=txt+arr[i];} zupełnie inaczej niż w VBA. Ale postanowiłem powalczyć z JavaScriptem aż do skutku.
Pierwsza wersja tego artykułu powstała pod koniec 2012 roku.
Minęło sporo czasu i postanowiłem nieco odświeżyć temat, aczkolwiek przez ten czas nie miałem czasu i chęci na zgłębianie tajników języka Javascript. Uwaga powyżej jest w dalszym ciągu aktualna!
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Przykład 01_accdb. Darmowa mapa OpenStreetMap na stronie WWW.</title>
<!-- Adres do biblioteki OpenLayers.js na oficjalnym serwerze projektu -->
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<!-- styl elementów strony -->
<style type="text/css">
#container, #basicMap {
width:800px; height:600px;
border:1px solid #666;
}
#container{
margin: 10px auto 0 auto;
padding:10px; border-width:2px;
}
</style>
<!-- skrypt wyświetlający mapę -->
<script type="text/javascript">
var map = null;
/* Funkcja init() wyświetla zdefiniowaną mapę OSM w bloku <div id = 'basicMap'>,
wycentrowaną w/m punktu o współrzędnych geograficznych w układzie ("EPSG:4326")
centerLat/centerLon i powiększeniu zoomLevel */
function init() {
// współrzędne geograficzne środka mapy w układzie współrzędnych ("EPSG:4326")
var centerLat = 6673820.1176; var centerLon = 2504913.0762;
// początkowe powiększenie mapy
var zoomLevel = 14;
// utwórz nowy obiekt typu Map w kontenerze HTML (tutaj <div id="basicMap">)
map = new OpenLayers.Map("basicMap");
// utwórz nową warstwę 'layerOSM' odwołującą się darmowej mapy OpenStreetMap
var layerOSM = new OpenLayers.Layer.OSM("Mapa OSM");
// dodaj utworzoną warstwę do obiektu map
map.addLayer(layerOSM);
// w podobny sposób możemy utworzyć nową warstwę odwołującą się darmowej mapy UMP-pcPL
var layerUMP = new OpenLayers.Layer.OSM("Mapa UMP",
"http://1.tiles.ump.waw.pl/ump_tiles/${z}/${x}/${y}.png")
// dodaj utworzoną warstwę do obiektu map
map.addLayer(layerUMP);
/* UWAGA! Widoczna będzie tylko warstwa utworzona jako pierwsza (z mapą OpenStreetMap)
Należy dodać, że mapa UMP-pcPL nie działa prawidłowo z biblioteką
OpenLayers.js znajdującą się na serwerze projektu OpenLayers
Na samodzielnej stronie, lokalnie na dysku mapa nie jest widoczna (brak kafelków).
Formant Microsoft Web Browser klasy Shell.Explorer.2 prawidłowo wyświetla mapę UMP.
*/
// wycentruj mapę w/m środka i odpowiednio powiększ
map.setCenter(new OpenLayers.LonLat(centerLon, centerLat), zoomLevel);
}
</script>
</head><body>
<div id="container">
<!-- kontener na mapę -->
<div id="basicMap"></div>
</div>
<!-- uruchom funkcję init() -->
<script type="text/javascript">init();</script>
</body></html>
Zobacz Demo - 01. Darmowa mapa OpenStreetMap OpenStreetMap na stronie WWW.
W bardzo łatwy sposób możemy zaimplementować powyższy kod, by wyświetlić darmową mapę OpenStreetMap w formularzu MS Access. Tak naprawdę, można powyższy kod zastosować bez żadnych zmian. Ja dokonałem tylko drobnych, kosmetycznych poprawek. Zmieniłem styl elementu <html> i <body> i zlikwidowałem zbędny element <#container> i jego styl.
<!doctype html><html lang="pl">
<head>
<meta charset="UTF-8">
<title>Przykład 01_accOSM. MS Access i darmowa mapa OpenStreetMap</title>
<!-- Adres do biblioteki OpenLayers.js na oficjalnym serwerze projektu -->
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<!-- styl elementów strony -->
<style type="text/css">
html, body {overflow: hidden; padding: 0; margin: 0;}
#basicMap {width:800px; height:600px;}
</style>
<!-- skrypt wyświetlający mapę -->
<script type="text/javascript">
var map = null;
/* Funkcja init() wyświetla zdefiniowaną mapę OSM w bloku <div id = 'basicMap'>,
wycentrowaną w/m punktu o współrzędnych geograficznych w układzie ("EPSG:4326")
centerLat/centerLon i powiększeniu zoomLevel
*/
function init() {
// współrzędne geograficzne środka mapy w układzie współrzędnych ("EPSG:4326")
var centerLat = 6673820.1176; var centerLon = 2504913.0762;
// początkowe powiększenie mapy
var zoomLevel = 14;
// utwórz nowy obiekt typu Map w kontenerze HTML (tutaj <div id="basicMap">)
map = new OpenLayers.Map("basicMap");
// utwórz nową warstwę 'layerOSM' odwołującą się darmowej mapy OpenStreetMap
var layerOSM = new OpenLayers.Layer.OSM("Mapa OSM");
// dodaj utworzoną warstwę do obiektu map
map.addLayer(layerOSM);
// wycentruj mapę w/m środka i odpowiednio powiększ
map.setCenter(new OpenLayers.LonLat(centerLon, centerLat), zoomLevel);
}
</script>
</head>
<body>
<!-- kontener na mapę -->
<div id="basicMap"></div>
<!-- uruchom funkcję init() -->
<script type="text/javascript">init();</script>
</body></html>
Kod zapisujemy w pliku pod nazwą 01_accOSM.html w folderze roboczym bazy MS Access.
W roboczej bazie danych MS Access tworzymy formularz startowy zawierający osadzony formant Microsoft Web Browser klasy Shell.Explorer.2 o nazwie oMsWebBrowser.
Private Sub Form_Open(Cancel As Integer) Dim sHtmlPath As String sHtmlPath = CurrentProject.Path & "\01_accOSM.html" ' załaduj dokument do formantu Web Browser klasy Shell.Explorer.2 o nazwie oMsWebBrowser Call Me.oMsWebBrowser.Object.Navigate(sHtmlPath) End Sub
Kod umieszczamy w module klasy formularza startowego.
Po uruchomieniu formularza startowego możemy się cieszyć pierwszą darmową mapą OpenStreetMap osadzoną w formularzu MS Access.
Jak widać na obrazku, mapa wygląda bardzo ubogo. Jedyne co możemy zrobić, to tylko zmieniać powiększenie (Zoom) przyciskami +/- widocznymi na mapie, lub za pomocą kółka myszy. Mapę możemy przesuwać mapę we wszystkich kierunkach za pomocą myszki z wciśniętym lewym przyciskiem. Trzymając wciśnięty Shift i lewy przycisk myszy możemy zaznaczyć obszar, który za zostać powiększony. I na razie nic więcej. Ale to się zmieni na następnej stronie.
Fragment licencji mapy UMP pcPL:
Uwaga: Jest to mój pierwszy (prototypowy) przykład związany z mapami. Kod JavaScript „jest, jaki jest”
i może być tylko lepszy. To co jest proste w VBA, nie jest już takie łatwe JS.
Do pobrania: