Access

 MS Access. Darmowa mapa UMP-pcPL oraz OpenStreetMap.

UMP pcPL i OpenStreetMap

Co to jest mapa UMP-pcPL?

UMP-pcPL - jest to darmowa mapa przeznaczona do współpracy z urządzeniami GPS firmy Garmin. Tworzona i udostępniana jest na zasadach Creative Commons. Licencją objęte są zarówno źródła (łącznie z systemem zgłaszania poprawek), jak i wersja gotowa do użytku w odbiornikach GPS. 

UMP-pcPL jest mapą prawie całej Polski (stąd skrót „pcPL”). Prawie całej - ponieważ UMP-pcPL nie jest kompletnym i skończonym dziełem, ale wciąż rozwijającym się i aktualizowanym polskim projektem społecznościowym mającym na celu stworzenie otwartej mapy wektorowej. Projekt opiera się na podobnych zasadach co OpenStreetMap, ale ze względu na polski rodowód terytorium Polski jest opracowane zdecydowanie lepiej, niż obszary innych krajów Europy i świata.

Skąd się wzięła?

Mapa UMP powstała jako mapa kilku miast, uzupełniająca nie istniejące w płatnych mapach tereny. Wkrótce urosła do rozmiarów całego kraju, temat objął Tomek Surmacz (serwer już nie działa). Grupa warszawska tworzyła najpierw mapę terenów tylko Warszawy i bliskich okolic (znaną jako UMP-Wawa). Nauczyliśmy się wykorzystywać wszystkie możliwości odbiorników GPS, w szczególności routing (wyznaczanie tras po drogach), oraz z czasem objęliśmy cały teren kraju, a potem całej Europy.
źródło:UMP pcPL

Licencja mapy UMP-pcPL

Znak Informacja dodatkowa Fragment licencji mapy UMP pcPL:

   ... Tak czy owak, chcemy dzielić się efektami pracy na zasadach:
   This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License.
   Przy dalszym "puszczaniu w obieg" naszych danych, prosimy o podawanie ich źródła (UMP-pcPL)...

Pełny tekst licencji znajduje się na stronie: Licencja, czyli co możesz zrobić z naszą pracą


Co to jest OpenStreetMap (OSM)?

OpenStreetMap (OSM) − projekt społeczności internetowej mający na celu stworzenie darmowej, swobodnie dostępnej, edytowalnej przez zarejestrowanych użytkowników mapy całej kuli ziemskiej. Inspiracją do stworzenia OpenStreetMap były projekty takie jak Wikipedia. Każde miejsce po zbliżeniu może być edytowane po naciśnięciu przycisku "Edytuj". Edycja może odbywać się na podstawie zapisanych wcześniej śladów GPS, zdjęć satelitarnych, map do których wygasły prawa autorskie oraz własnej wiedzy na temat edytowanego obszaru.
źródło:Wikipedia o OpenStretMap

Licencja mapy OSM

Znak Informacja dodatkowa OpenStreetMap® to projekt open data, rozpowszechniany na licencji:
Open Data Commons Open Database License (ODbL) przez OpenStreetMap Foundation (OSMF).

Mapy w postaci graficznej, a także dokumentacja rozpowszechniane na warunkach licencji:
Uznanie autorstwa na tych samych warunkach 2.0 (CC BY-SA 2.0)

Pełny tekst licencji znajduje się na stronie: © OpenStreetMap autorzy

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.

Znak Uwaga 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.

Znak Informacja dodatkowa 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.


Mapa OpenStreetMap
Obraz.1   Pierwsza mapa OpenStreetMap 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.