Access

 MS Access i OpenLayers - punkty na śladzie (tracku) w formacie GPX.

OpenLayers - zaznaczanie punktów na śladzie w formacie *.gpx.

Zaprezentowany przykładzie „Styl śladu GPX na mapach OSM i UMP-pcPl” ślad GPX praktycznie nie zawiera żadnych informacji. Widoczna jest jedynie niebieska linia przedstawiająca przebytą trasę. Pierwszą rzeczą, którą możemy zrobić, to narysowanie na śladzie GPX własnych punktów informacyjnych.
By to zrobić, musimy utworzyć nową wektorową warstwę o wdzięcznie brzmiącej nazwie „Punkty na śladzie Marysin” i określić współrzędne geograficzne każdego punktu, który chcemy narysować na śladzie GPX.

Punkty na śladzie GPX.

Wygląd rysowanych punktów na śladzie GPX możemy zdefiniować używając własnego stylu, wzorując się na przykładzie Ślad GPX na mapie UMP i OSM, w którym zdefiniowany został styl linii tworzącej ślad GPX. Więcej informacji o stylu warstwy OpenLayers.Layer.Vector i atrybutach punktu OpenLayers.Geometry.Point można uzyskać na stronie OpenLayers.Feature.Vector.style

Poniżej przedstawiam niektóre (moim zdaniem najistotniejsze) atrybuty wyświetlanego punktu. Atrybuty te można będzie zmieniać dla każdego tworzonego punktu przekazując wartości atrybutów w funkcji tworzącej nowy punkt.
Mniej istotne (jak dla mnie) atrybuty punktu zostaną zdefiniowane jako domyślne, w „publicznych” tablicach asocjacyjnych styleLabel{...} oraz stylePoint{...}.

Niektóre atrybuty punktu (OpenLayers.Geometry.Point)
label:
{String} tekst etykiety, która ma być wyświetlona.
labelAlign:
{String} Sposób wyrównanie etykiety. Określa punkt wstawienia etykiety względem tekstu. Jest to ciąg złożony z dwóch znaków. Pierwszy znak służy do wyrównania w poziomie, a drugi do wyrównania w pionie.
Poprawne wartości dla wyrównania w poziomie: "l" = do lewej, "c" = centralnie, "r" = do prawej.
Poprawne wartości dla wyrównania pionowego: "t" = do góry, "m" = po środku, "b" = na dół.
Przykładowe wartości: "lt", "cm", "rb". Domyślna wartość to "cm".
labelXOffset:
{Number} Poziome przesunięcie etykiety (w pikselach).
labelYOffset:
{Number} Pionowe przesunięcie etykiety (w pikselach).
graphicName:
{String} Nazwa rodzaju (kształtu) grafiki jaki ma zostać zastosowany do wyświetlenia punktu. Obsługiwane wartości to: circle (domyślny), square, star, x, cross, triangle.
Uwaga: Istnieje możliwość zdefiniowania własnych kształtów (grafiki) wyświetlanych punktów.
stroke:
{Boolean} Należy ustawić na false, jeżeli pędzel nie jest potrzebny.
strokeColor :
{String} Kolor pędzla w zapisie heksadecymalnym. Domyślnym kolorem pędzla jest kolor  '#ee9900' (*).
strokeWidth:
{Number} Szerokość pędzla (w pikselach) Domyślnie 1 piksel.
fillColor:
{String} Kolor wypełnienie w zapisie heksadecymalnym. Domyślnym kolorem wypełnienia jest kolor  '#ee9900'(*)
strokeDashstyle:
{String} Styl linii. Domyślna wartość = 'solid'.
  • dot - linia wielopunktowa (.....),
  • dash - linia kreskowa (-----),
  • dashdot - linia punktowa (-.-.-),
  • longdash - linia kreskowa długa, (— — — — —),
  • longdashdot - linia kreskowo-punktowa długa, (—.—.—.),
  • solid - linia ciągła (_____).
strokeOpacity:
{Number} Stopień krycia pędzla w zakresie 0÷1. Domyślnie = 1 (nieprzezroczysty).
strokeWidth:
{Number} Szerokość pędzla wyrażona w pikselach. Domyślnie = 1.
pointRadius:
{Number} Promień punktu (w pikselach), domyślnie 6 pikseli.
rotation:
{Number} Obrót graficznego punktu zgodnie z ruchem wskazówek zegara wokół jego punktu środkowego, lub punktu poza środkiem, określonym przez atrybuty GraphicXOffset i graphicYOffset.

(*) To nie jest VBA. Wartość koloru nie jest liczbą, tylko ciągiem znaków i dlatego wartość kolor należy ująć w cudzysłów lub apostrofy.


 

Styl (wygląd) punktów w warstwie OpenLayers.Layer.Vector

Aby utworzyć styl definiujący wygląd punktu musimy określić poszczególne atrybuty punktu. Mniej istotne atrybuty punktu zdefiniowane są jako domyślne, w „publicznych” tablicach asocjacyjnych styleLabel{...} oraz stylePoint{...}. Ważniejsze atrybuty punktu będą zmieniane poprzez przypisanie wartość atrybutu przekazanego w argumentach funkcji createPoint(...).


// deklaracja warstwy wektorowej zawierającej punkty 'myPoint'
var vectorPointsLayer;
var myPoint;

// mniej istotne (domyślne) atrybuty punktu
var stylePoint = {
		'strokeOpacity': 0.75,
		'fillOpacity':0.90,
		'strokeDashstyle':'solid',
		'cursor': 'pointer'
};

// mniej istotne (domyślne) atrybuty etykiety przypisanej do punktu
 var styleLabel={
		'fontColor':'#800',
		'fontOpacity':0.7,
		'fontFamily':'',
		'fontSize':'1em',
		'fontStyle':'italic',
		'fontWeight':'bold'
}

// utwórz domyślny styl punktu,
// zapis 'atrybut': '${nazwaAtrybutu}' oznacza, że można dla każdego punktu
// zmieniać wartość atrybutu przypisując mu wartość przekazaną w argumentach funkcji
var stylePointDefault =new OpenLayers.Style({
		'label': '${label}',
		'labelAlign':'${labelAlign}',
		'labelXOffset':'${labelXOffset}',
		'labelYOffset':'${labelYOffset}',
		'strokeColor': '${strokeColor}',
		'strokeOpacity': stylePoint['strokeOpacity'],
		'strokeWidth': '${strokeWidth}',
		'strokeDashstyle':stylePoint['strokeDashstyle'],
		'fillColor': '${fillColor}',
		'fillOpacity':stylePoint['fillOpacity'],
		'pointRadius': '${pointRadius}',
		'graphicName': '${graphicName}',
		'rotation': '${rotation}',
		'fontColor':styleLabel['fontColor'],
		'fontOpacity':styleLabel['fontOpacity'],
		'fontFamily':styleLabel['fontFamily'],
		'fontSize':styleLabel['fontSize'],
		'fontStyle':styleLabel['fontStyle'],
		'fontWeight':styleLabel['fontWeight'],
		'cursor': stylePoint['cursor']
});

Tworzenie punktów w warstwie wektorowej.

Biblioteka OpenLayers umożliwia utworzenie 6 różnych punktów o zdefiniowanych kształtach:
circle (domyślny), square, star, x, cross, triangle.

Kształty punktów   
1. Zdefiniowane kształty punktów.

Aby utworzyć nowe punkty, musimy wcześniej, za pomocą funkcji createPointsLayer(...) utworzyć warstwę OpenLayers.Layer.Vector, a następnie za pomocą funkcji createPoint(...) utworzyć na tej warstwie punkty z indywidualnie dopasowanymi atrybutami, przekazywanymi w argumentach funkcji.


// utwórz warstwę wektorową na przyjęcie punktów o domyślnym stylu punktów 'stylePointDefault'
function createPointsLayer(id, nameLayer, displayInLayerSwitcher, setVisibility){
	vectorPointsLayer = new OpenLayers.Layer.Vector(nameLayer, {
								styleMap: new OpenLayers.StyleMap({
													'default': stylePointDefault})
	});
	// przypisz identyfikator warstwy
	vectorPointsLayer.id = id;
	// pokaż warstwę w oknie przełącznika warstw
	vectorPointsLayer.displayInLayerSwitcher = displayInLayerSwitcher;
	// pokaż warstwę na mapie
	vectorPointsLayer.setVisibility(setVisibility);
}

// funkcja tworząca pojedyncze punkty w warstwie wektorowej 'vectorPointsLayer'
// o atrybutach określonych w argumentach funkcji
function createPoint(lon, lat, label, labelAlign, labelXOffset, labelYOffset, pointRadius,
									rotation, strokeColor, strokeWidth, fillColor, graphicName){
	var point = new OpenLayers.Geometry.Point(lon, lat).transform(epsg4326, epsg900913);
	myPoint = new OpenLayers.Feature.Vector(point);
	myPoint.attributes={
									'label': label,
									'labelAlign':labelAlign,
									'labelXOffset':labelXOffset,
									'labelYOffset':labelYOffset,
									'pointRadius':pointRadius,
									'rotation':rotation,
									'strokeColor':strokeColor,
									'strokeWidth':strokeWidth,
									'fillColor':fillColor,
									'graphicName':graphicName
									};
	// dodaj punkt do warstwy 'vectorPointsLayer'
	vectorPointsLayer.addFeatures(myPoint);
}

Znak Informacja dodatkowa Uwaga: W dalszym ciągu aktualne jest, że oglądając przykład offline, tzn. korzystając z zasobów lokalnych, śladu GPX nie zobaczymy w przeglądarce Chrome, Internet Explorer oraz Opera. Jedynie przeglądarka Firefox umożliwia lokalne oglądanie śladów GPX.
W przypadku przeglądarki „badzIEw” funkcję rysującą ślad GPX fDrawTrack() należy wywołać jako ostatnią, gdyż występuje poniżej przedstawiony błąd i „badzIEw” odmawia dalszej współpracy, nie przetwarzając następnych instrukcji.
Błąd przeglądarki IE

Niestety, nie wszystko wychodzi tak, aby było dobrze. Formant Microsoft Web Browser nie wiem czemu, nie wyświetla etykiet przypisanych do punktów, a właściwie wyświetla je, ale jako 2-3 pikselowę punkty. No trudno, widocznie tak ma być.

    MS Access brak etykiet
   2. MS Access - niewidoczne etykiety przy punktach
Firefox widoczne etykiety   
3. Firefox - przy każdym punkcie widoczna etykieta
function fDrawPoints(id, nameLayer){
	// utwórz warstwę wektorową o domyślnym stylu punktów 'stylePointDefault'
	createPointsLayer(id, nameLayer,true, true);

// tworzenie poszczególnych punktów w warstwie wektorowej 'vectorPointsLayer'
createPoint(22.50059,51.287121,'<= Start','lm',10,-3,6,17,'#000',2,'#ff0','triangle');
createPoint(22.50610,51.2921,'Cmentarz wojenny, \n kapliczka, \n krzyż',
				'lm',15,0,12,0,'#000',2,'#f00','star');
createPoint(22.50503,51.29536,'Sklep','lm',12,0,5,0,'#080',2,'#f00','square');
createPoint(22.50423,51.29688,'Krzyż','rm',-12,0,10,0,'#f0f',2,'#088','cross');
createPoint(22.50310,51.30102,'Wysypisko','lm',12,0,10,0,'#f0f',2,'#080','circle');
createPoint(22.50162,51.30518,'Krzyż','lm',12,0,10,0,'#f00',2,'#088','triangle');
createPoint(22.49047,51.30705,'Krzyż','rm',-8,-10,10,0,'#f0f',2,'#080','star');
createPoint(22.49197,51.30215,'Kapliczka','rm',-12,0,10,0,'#088',2,'#0f0','circle');
createPoint(22.49300,51.29900,'Przystanek \n Snopków','lm',-65,0,10,0,'#f00',2,'#080','cross');
createPoint(22.49544,51.29239,'Parking','lm',10,0,10,0,'#088',2,'#800','x');
createPoint(22.49716,51.28763,'Dom Ojców Białych \n Misjonarzy Afryki w Lublinie',
															 'rm',-20,5,10,0,'#f0f',2,'#080','square');
createPoint(22.49834,51.28675,'Koniec =>','lm',-55,0,6,0,'#f00',2,'#0ff','x');

// dodaj warstwę 'vectorPointsLayer' do obiektu 'map'
map.addLayer(vectorPointsLayer);
}