From: Aki Koskinen Date: Sat, 30 Jan 2010 14:53:33 +0000 (+0200) Subject: Initial import X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=d48946835ec9d02589e877f27a23b18e08902bb5;hp=7cefe7990ef46a5fee83dae8dd78995460fe5af4;p=ptas Initial import --- diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..36d7ace --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Maemo Team diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f083aa1 --- /dev/null +++ b/COPYING @@ -0,0 +1,22 @@ +Copyright (C) 2009 Nokia Corporation. All rights reserved. + +This maemo code example is licensed under a following MIT-style license. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..bff24a6 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +2009-06-24 Maemo Team + + * Autotoolized and debianized diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..8b20f18 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,15 @@ +# We invent desktoplib_LTLIBRARIES instead of the normal lib_LTLIBRARIES, +# so we can specify the non-standard installation directory. +desktoplib_LTLIBRARIES = lib-timeout-home-widget.la +desktoplibdir = $(HILDON_DESKTOP_LIB_DIR) + +lib_timeout_home_widget_la_SOURCES = lib-timeout-home-widget.c lib-timeout-home-widget.h location-provider.h location-provider.c +lib_timeout_home_widget_la_LIBADD = $(EXAMPLE_LIBS) + +AM_CFLAGS = -Wall $(EXAMPLE_CFLAGS) + +# .desktop file +desktopdir = $(HILDON_HOME_DESKTOP_DIR) +desktop_DATA = timeout-home-widget.desktop + +DISTCLEANFILES = $(desktop_DATA) diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..1c7902a --- /dev/null +++ b/README @@ -0,0 +1 @@ +Example Home widget. Provides TimeOut applet for the Home Area of the desktop. diff --git a/antigen.sh b/antigen.sh new file mode 100644 index 0000000..b877a0b --- /dev/null +++ b/antigen.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -ex +if test -f Makefile; then + make distclean +fi +rm -f *.tar.* *.tgz +rm -Rf autom4te.cache +rm -f Makefile.in aclocal.m4 configure depcomp install-sh missing ltmain.sh config.guess config.sub config.h.in mkinstalldirs INSTALL diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..27a68ef --- /dev/null +++ b/autogen.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +set -ex +autoreconf --install --force diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..ebe86df --- /dev/null +++ b/configure.ac @@ -0,0 +1,26 @@ +AC_PREREQ(2.61) +AC_INIT([hildon-timeout-desktop-widget-example], [0.1]) +AC_CONFIG_SRCDIR([lib-timeout-home-widget.c]) +AM_INIT_AUTOMAKE +AC_CONFIG_HEADER([config.h]) + +AC_PROG_CC +AC_HEADER_STDC +AC_PROG_INSTALL +AM_PROG_LIBTOOL + +PKG_CHECK_MODULES(EXAMPLE, hildon-1 libhildondesktop-1 gtk+-2.0 liblocation) +AC_SUBST(EXAMPLE_CFLAGS) +AC_SUBST(EXAMPLE_LIBS) + +# Discover where to install the .desktop file: +HILDON_HOME_DESKTOP_DIR=`pkg-config libhildondesktop-1 --variable=hildonhomedesktopentrydir` +AC_SUBST(HILDON_HOME_DESKTOP_DIR) + +# Discover where to install the status widget's lib file: +HILDON_DESKTOP_LIB_DIR=`pkg-config libhildondesktop-1 --variable=hildondesktoplibdir` +AC_SUBST(HILDON_DESKTOP_LIB_DIR) + + +AC_OUTPUT(Makefile) +AC_OUTPUT(timeout-home-widget.desktop) diff --git a/coordinate-system.c b/coordinate-system.c new file mode 100644 index 0000000..fefb1c4 --- /dev/null +++ b/coordinate-system.c @@ -0,0 +1,21 @@ +#include "coordinate-system.h" + +void wgs84_to_kkj2(double inLatitude, double inLongitude, double *outLatitude, double *outLongitude) +{ + if (outLatitude) { + *outLatitude = 100; + } + if (outLongitude) { + *outLongitude = 100; + } +} + +void kkj2_to_wgs84(double inLatitude, double inLongitude, double *outLatitude, double *outLongitude) +{ + if (outLatitude) { + *outLatitude = 100; + } + if (outLongitude) { + *outLongitude = 100; + } +} diff --git a/coordinate-system.h b/coordinate-system.h new file mode 100644 index 0000000..78a4620 --- /dev/null +++ b/coordinate-system.h @@ -0,0 +1,8 @@ +#ifndef COORDINATE_SYSTEM_H +#define COORDINATE_SYSTEM_H + +void wgs84_to_kkj2(double inLatitude, double inLongitude, double *outLatitude, double *outLongitude); + +void kkj2_to_wgs84(double inLatitude, double inLongitude, double *outLatitude, double *outLongitude); + +#endif diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..2865792 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,6 @@ +hildon-timeout-home-widget-example (0.1-1) unstable; urgency=low + + * Autotoolized and debianized + + -- Maemo Team Wed, 24 Jun 2009 16:22:18 +0300 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..3f5f1df --- /dev/null +++ b/debian/control @@ -0,0 +1,12 @@ +Source: hildon-timeout-home-widget-example +Section: user/desktop +Priority: optional +Maintainer: Maemo Team +Build-Depends: debhelper (>= 5), autotools-dev, libhildondesktop1-dev (>= 2.1.16) +Standards-Version: 3.7.2 + +Package: hildon-timeout-home-widget-example +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Example home widget + An example home widget for Maemo. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..cba57fe --- /dev/null +++ b/debian/copyright @@ -0,0 +1,25 @@ +This package was debianized by Maemo Team on +Wed, 24 Jun 2009 16:22:18 +0300. + +Copyright (C) 2009 Nokia Corporation. All rights reserved. + +This maemo code example is licensed under a following MIT-style license. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE diff --git a/debian/rules b/debian/rules new file mode 100644 index 0000000..399ccd8 --- /dev/null +++ b/debian/rules @@ -0,0 +1,107 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + # Add here commands to configure the package. + ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" + + +build: build-stamp + +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/hildon-timeout-home-widget-example.sgml > hildon-timeout-home-widget-example.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/hildon-timeout-home-widget-example. + $(MAKE) DESTDIR=$(CURDIR)/debian/hildon-timeout-home-widget-example install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/doc/coordinate_systems/JHS153.pdf b/doc/coordinate_systems/JHS153.pdf new file mode 100644 index 0000000..e8f19a7 Binary files /dev/null and b/doc/coordinate_systems/JHS153.pdf differ diff --git a/doc/coordinate_systems/JHS154.pdf b/doc/coordinate_systems/JHS154.pdf new file mode 100644 index 0000000..64ba018 Binary files /dev/null and b/doc/coordinate_systems/JHS154.pdf differ diff --git a/doc/coordinate_systems/JHS154_liite1.pdf b/doc/coordinate_systems/JHS154_liite1.pdf new file mode 100644 index 0000000..32fd19b Binary files /dev/null and b/doc/coordinate_systems/JHS154_liite1.pdf differ diff --git a/doc/coordinate_systems/JHS154_liite2.pdf b/doc/coordinate_systems/JHS154_liite2.pdf new file mode 100644 index 0000000..8136b07 Binary files /dev/null and b/doc/coordinate_systems/JHS154_liite2.pdf differ diff --git a/doc/coordinate_systems/coordtrans.fgi.fi b/doc/coordinate_systems/coordtrans.fgi.fi new file mode 100644 index 0000000..8112c5a --- /dev/null +++ b/doc/coordinate_systems/coordtrans.fgi.fi @@ -0,0 +1,5 @@ +[Desktop Entry] +Icon=text-html +Type=Link +URL[$e]=http://coordtrans.fgi.fi/ +X-Ubuntu-Gettext-Domain=desktop_kdebase diff --git a/doc/coordinate_systems/kkjgps.htm b/doc/coordinate_systems/kkjgps.htm new file mode 100644 index 0000000..5a3a833 --- /dev/null +++ b/doc/coordinate_systems/kkjgps.htm @@ -0,0 +1,1239 @@ + + + + + + + +Suomalaiset koordinaatistot + + + +

Eino +Uikkasen kotisivu > Suomalaiset +koordinaatistot - +päivitetty 18.10.2009

+ +
+ +

Suomessa käytössä olevat +vaakakoordinaatistot

+ +
+

Tämä artikkeli on lyhyt + kuvaus Suomessa käytetyistä vaakakoordinaatistoista, joista + lista taulussa 1.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 1, Suomalaiset koordinaatistot
TunnusNimiKäytetty + kartantuotannossaKommentti
VVJHelsingin + järjestelmä-1970Edelleen + käytössä eräissä kaupungeissa
ED50European Datum 1950 + Ei koskaanKansallinen + tasoitus 1966
KKJKartastokoordinaattijärjestelmä1970-2005Perustuu ED50 + koordinaatistoon
EUREF-FINEUREF-FIN2003- merikartat, + 2005- maastokartatETRS89 realisaatio + Suomessa
+

Artikkelista löytyy + englanninkielinen versio sivulta: Finnish coordinate systems

+

Suomessa käytössä + olevista korkeusjärjestelmistä löytyy kirjoitus sivulta: Suomen + korkeusjärjestelmät

+

Vastaan mieluusti + artikkeliin liittyviin kysymyksiin ja kommentteihin + osoitteessa eino.uikkanen@iki.fi.

+
+ +

KKJ:n edeltäjä, Helsingin +järjestelmä alias VVJ, -1970

+ +
+

Ennen KKJ:n käyttöönottoa + kartastotöissä käytettiin järjestelmää nimeltä 'Helsingin + järjestelmä' alias VVJ, Vanha Valtion Järjestelmä. + Siirtyminen VVJ:stä KKJ:hin aloitettiin 1970, mutta VVJ:n + mukaisia koordinaatteja on vieläkin käytössä eräissä + kunnissa.

+

KKJ ei millään tavalla + pohjaudu VVJ:hin, vaan ED50-koordinaatistoon ja sen + kansalliseen laajennukseen, mutta KKJ määriteltiin + kierrettäväksi tasossa siten, että se mahdollisimman hyvin + yhtyy vanhaan VVJ-koordinaatistoon. Tällä saavutettiin se + etu, että vanhoja karttoja voitiin käyttää ylimenokauden + ajan tarvitsematta ottaa huomioon koordinaattijärjestelmän + muutosta. Jos siis kartassa on VVJ-koordinaatisto, sitä voi + käsitellä kuten kartta olisi tehty KKJ-koordinaatiston + mukaisesti, huomioiden kuitenkin seuraavat erot VVJ- ja KKJ-koordinaattien + arvoissa ja esitysmuodoissa:

+
    +
  • VVJ-koordinaattien ja + KKJ-koordinaattien ero on keskimäärin 2 m (Suomen + kartasto, vihko 112, sivu 11, 1984). Eroissa + kannattaa varautua suuriin alueellisiin vaihteluihin + ja suurimmillaan 10 m virheisiin.
  • +
  • VVJ y-koordinaatti + esitetään ilman edeltävää kaistanumeroa, jonka + sijalla saattaa olla keskimeridiaanin arvo asteina, + esim. jos KKJ y-koordinaatti on 3511666, niin VVJ y-koordinaatti + voidaan esittää muodossa 511666 tai 27°511666
  • +
  • VVJ-koordinaatiston + koordinaateista jätettiin usein pois tuhannet ja + jopa sadat kilometrit
  • +
+
+ +

ED50-järjestelmä, +European datum 1950, Suomen kansallinen tasoitus 1966

+ +
+

European Datum 1959 (ED50) + perustuu 1950-luvulla tehtyyn Euroopan laajuiseen + kolmioverkkojen yhteistasoitukseen. Suomen ED50-järjestelmä + perustuu v. 1966 tehtyyn ensimmäisen luokan kolmioverkkojen + tasoitukseen, jonka lähtöpisteet otettiin eurooppalaisesta + tasoituksesta (Korhonen Jorma, 1967). Tämän kansallisen + tasoituksen lopputulosta, ED50-koordinaatistoa, ei ole + Suomessa koskaan käytetty karttatuotannossa ja siksi ei ole + missään tilanteessa mielekästä laittaa GPS-laitteeseen + tai karttaohjelmaan ED50:n mukaisia asetuksia, vaikka monissa + lähteissä näin kehotetaan tekemään. ED50 koordinaatisto + on kuitenkin varsin merkityksellinen, sillä se on ollut + pohjana Suomessa vuonna 1970 käyttöönotetulle KKJ-koordinaatistolle.

+
+ +

KKJ-koordinaatisto, kartastokoordinaattijärjestelmä, 1970 +- 2003/2005

+ +
+

KKJ-koordinaatisto on + johdettu ED50-koordinaatistosta (Suomen kansallinen tasoitus + 1966) siirtämällä ja kiertämällä ED50-koordinaatistoa + siten, että se mahdollisimman hyvin yhtyy KKJ:n + edeltäjään eli VVJ-koordinaatistoon.

+

KKJ:n yhteydessä + käytetään referenssiellipsoidina Hayfordin ellipsoidia, + joka tunnetaan myös nimellä International 1924. Taulussa 2 + on kuvattu Hayfordin ellipsoidin parametrit, isoakselin + puolikkaan pituus metreinä ja litistyssuhde eli flattening, + joka lasketaan kaavalla (isoakseli-pikkuakseli)/isoakseli. + Näitä arvoja ei usein ilmoiteta suoraan, vaan + vähennettynä WGS84-ellipsoidin vastaavista luvuista, + jolloin litistyssuhteiden erotus kerrotaan vielä luvulla + 10000. Siksi taulussa 2 esitetään myös WGS84 ellipsoidin + parametrit sekä parametrien arvojen erotukset (DA,DF) .

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 2, Hayford eli International 1924 ja WGS84 + ellipsoidit
ParametriSeliteYksikköWGS84HayfordWGS84-Hayford
A, DAIsoakselin puolikasmetri63781376378388-251
F, DFLitistyssuhde 1/298.2572235631/297-0.14192702256
+

KKJ-koordinaatit voidaan + esittää joko maantieteellisinä koordinaatteina (leveys, + pituus) tai tasokoordinaatteina (pohjois- ja itäkoordinaatti), + jotka johdetaan maantieteellisistä koordinaateista Gauss-Krüger-projektiokaavalla. + Koska KKJ on kaksiulotteinen koordinaatisto, siihen ei liity + mitään määritelmää korkeudesta. Jos KKJ:n yhteydessä + kuitenkin annetaan korkeus, se on aina ortometrinen korkeus + kansallisessa korkeussysteemissä (esim. N60).

+

KKJ-tasokoordinaatisto + koostuu kuudesta (0-5) kolme astetta leveästä kaistasta. + Usein esitetään vain kaistat 1-4, jotka peittävät melkein + koko Suomen, mutta joskus esitetään myös kaistat 0 ja 5. + Tätä kuudesta kolme astetta leveästä kaistasta koostuvaa + koordinaatistoa kutsutaan nimellä 'Peruskoordinaatisto'. + Tämän lisäksi kaistan 3 parametreja käytetään + valtakunnanlaajuisesti. Tätä valtakunnanlaajuista yhden + kaistan koordinaatistoa kutsutaan nimellä 'Yhtenäiskoordinaatisto'. + Maastokartoissa peruskoordinaatisto esitetään mustalla + ruudukolla ja yhtenäiskoordinaatisto punaisella ruudukolla.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 3, KKJ peruskoordinaatisto, musta ruudukko
ProjektioEllipsoidiKaistaKeskusmeridiaaniValeitäMittakaavakerroin + keskusmeridiaanillaKaistan + leveys
ProjectionEllipsoidZoneCentral + meridianFalse + EastingScale + factor at Central MeridianZone width
KKJInternational 19240185000001.0003
KKJInternational 192412115000001.0003
KKJInternational 192422425000001.0003
KKJInternational 192432735000001.0003
KKJInternational 192443045000001.0003
KKJInternational 192453355000001.0003
+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 4, KKJ yhtenäiskoordinaatisto YKJ, punainen ruudukko
ProjektioEllipsoidiKaistaKeskusmeridiaaniValeitäMittakaavakerroin + keskusmeridiaanillaKaistan + leveys
ProjectionEllipsoidZoneCentral + MeridianFalse + EastingScale + factor at Central MeridianZone width
YKJInternational 192432735000001.000Koko Suomi (13)
+

Ylläkuvattujen parametrien + lisäksi laitteissa esiintyy usein myös parametrit + valepohjoinen eli False Northing sekä Latitude of Origin - + näiden arvot ovat KKJ-koordinaattien laskennassa nollia.

+

Pisteen suorakulmaisten KKJ-koordinaattien + arvojen voidaan ajatella syntyvän seuraavasti:

+
+ +
+
    +
  1. Siirrytään pisteestä + suorinta tietä keskimeridiaanille - matka metreinä + on y-koordinaatin alkuarvo. Arvo asetetaan + negatiiviseksi keskimeridiaanin länsipuolella ja + positiiviseksi itäpuolella. Esimerkiksi y=45107.
  2. +
  3. Siirrytään tästä + pisteestä edelleen keskimeridiaania myöten + päiväntasaajalle - matka metreinä on x-koordinaatin + arvo. Esimerkiksi x=6717563.
  4. +
  5. Jotta y-koordinaatin + arvo tulisi positiiviseksi molemmin puolin + keskimeridiaania, siihen lisätään 500000 metriä. + Tämä luku on nimeltään valeitä eli false easting. + Esimerkiksi y=545107.
  6. +
  7. Jotta kaistan + tunnistaisi suoraan koordinaattien arvosta, + lisätään y-koordinaatin eteen kaistan numero. + Esimerkiksi y=2545107.
  8. +
  9. Näin saatiin + koordinaattien arvoksi: x=6717563 ja y=2545107
  10. +
+
+ +
+

Kohtia 3 ja 4 ei yleensä + ajatella erillisinä, vaan kaistan numeron lisäys + huomioidaan valeidän arvossa. Esimerkiksi yllä valeitä + olisi 2 500 000 metriä.

+

Koska maapallo ei ole taso, + eivät suorakulmaiset xy-koordinaatit voi kuvata täsmälleen + pisteiden metrisiä etäisyyksiä, vaan + koordinaattipisteistä tasogeometrian keinoin lasketut + keskinäiset etäisyydet poikkeavat todellisista metrisistä + etäisyyksistä sitä enemmän, mitä kauempana ollaan + keskimeridiaanista. Tätä eroa kutsutaan nimellä 'projektiovirhe'. + Kyseessä ei kuitenkaan ole "virhe" vaan ero, joka + on tarkasti laskettavissa ja joka tulee ymmärtää ja + huomioida tarkoissa sovelluksissa. Normaalikäyttäjälle + projektiovirheellä ei ole vähäisintäkään merkitystä + edes yhtenäiskoordinaatistossa, jonka laidoilla se esiintyy + suurimpana. Huomaa erityisesti, että projektiovirhe + vaikuttaa vain mittakaavaan, eikä lainkaan koordinaattien + arvoihin. Koordinaattien arvot eivät siis ole epätarkempia + kaistan reunoilla.

+

Taulussa 5 esimerkkinä + samasta pisteestä eri muodoissa esitettyjä koordinaatteja.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 5, esimerkkejä koordinaattien arvoista
Koordinaattityyppileveyspituus
WGS84 + maantieteelliset60.56607724.819210
KKJ + maantieteelliset60.56589424.822422
 xy
KKJ suorakulmaiset, + kaista 267175632545107
KKJ suorakulmaiset, + kaista 3/YKJ67192583380581
+
+ +
+

Muuntoparametrit EUREF-FIN(WGS84) ja -KKJ-koordinaatistojen + väliseen + yhdenmuotoisuusmuunnokseen

+
+ +
+

Datumin, tässä tapauksessa + KKJ-koordinaatiston kuvaamiseen tarvitaan kahdenlaisia lukuja. + Toiset luvut kertovat, miten EUREF-FIN ja KKJ-koordinaatiston + pisteet muutetaan toisikseen kolmiulotteisissa X,Y,Z-koordinaatistoissa. + Toiset luvut kuvaavat ellipsoidin, jonka mukaan + kolmiulotteiset X,Y,Z-koordinaatit muunnetaan + maantieteellisiksi koordinaateiksi ja päinvastoin.

+

Muunnos datumien, esim. + EUREF-FIN:n ja KKJ:n välillä tapahtuu lähes kaikissa + harrastajalaitteissa kolmiulotteisella + yhdenmuotoisuusmuunnoksella. Yhdenmuotoisuusmuunnos tapahtuu + siten, että toisen koordinaatiston pisteitä siirretään ja + kierretään siten, että ne mahdollisimman hyvin yhtyvät + toisen koordinaatiston pisteisiin. Siirtojen ja kiertojen + lisäksi yhdenmuotoisuusmuunnokseen saattaa liittyä + mittakaavan muunnos. Näin ollen kaikki + yhdenmuotoisuusmuunnokset voidaan kuvata seitsemällä + luvulla: siirrot kolmeen suuntaan (3), kierrot kolmen akselin + ympäri (3) ja mittakaavamuunnos (1). Useissa + harrastajalaitteissa yhdenmuotoisuusmuunnoksesta tehdään + pelkästään siirrot eli yhdenmuotoisuusmuunnos kuvataan + vain kolmella luvulla, mikä heikentää muunnoksen + tarkkuutta.

+

Taulussa 6 on kuvattu + parhaat muunnosarvot seitsenparametristä ja + kolmiparametristä KKJ-WGS84-yhdenmuotoisuusmuunnosta varten. + Yhdenmuotoisuusmuunnosta tarkempia menetelmiä on kuvattu + julkisen hallinnon tiedotteessa 154: JHS154

+

Seitsenparametrisen + muunnoksen parametrit (sarake 1) ovat Geodeettisen Laitoksen + 3D-muunnokselle KKJ-ETRF89 laskemat arvot. Laskenta on + suoritettu pienimmän neliösumman menetelmällä käyttäen + 90 pistettä, jotka Geodeettinen Laitos on mitannut ETRF89-koordinaatiston + realisoinnin yhteydessä. Koko Suomea koskevan + yhdenmuotoisuusmuunnoksen parametreja siis tuskin juurikaan + voidaan tästä parantaa.

+

Taulukon kolmiparametristen + muunnosten parametrit (sarakkeet 2-4) olen laskenut itse + käyttäen Geodeettisen Laitoksen mittaamaa pisteistöä, + joka siis teki mahdolliseksi uusien tarkempien parametrien + laskennan myös kolmiparametrisille muunnoksille. Suoritin + laskennan yksinkertaisesti minimoimalla X-, Y- ja Z-akselien + suuntaisten virheiden aritmeettiset keskiarvot. Pyöristin + parametrien arvot kokonaisluvuiksi, koska useat GPS-laitteet + eivät ota vastaan desimaaleja siirtymäarvoissa. Sarakkeessa + 2 kuvaan parametrit, jotka olen laskenut käytettäväksi + koko valtakunnan alueella. Sarakkeissa 3 ja 4 kuvaan + parametrit, jotka olen laskenut erikseen Etelä- ja Pohjois-Suomessa + käytettäväksi (leveys <65 ja >65 astetta).

+

Vertailun vuoksi olen + sarakkeessa 5 (harmaa sarake) esittänyt parametrit, jotka + ovat käytössä useimmissa GPS-laitteissa, joissa KKJ-muunnos + on valmiina. Nämä parametrit on laskenut Jukka Varonen / + Merenkulkulaitos vuonna 1989. Tämän jälkeen niitä on + sovellettu useimmissa GPS-laitteissa ja monissa + karttaohjelmissa lähes teollisuusstandardina. Parametrit on + laskettu käytettäväksi pelkästään merialueilla, mutta + ne pätevät silti koko Suomen alueella niin hyvin, ettei + tarkkuuserolla uusiin ja vartavasten koko Suomea varten + laskettuihin kolmiparametrisiin muunnoksiin ole mitään + käytännön merkitystä.

+

Taulukkoon liitetyt + tarkkuusarvot ovat laskemiani epävirallisia ja + tarkistamattomia arvoja. Olen laskenut kolmiparametristen + muunnosten tarkkuusarvot pyöristetyille parametrien arvoille + eli olen ensin pyöristänyt parametrit ja vasta sitten + laskenut tarkkuusarvot. Keski- ja maksimivirheestä on + huomattava, että ne tarkoittavat keskimääräistä ja + suurinta virhettä laskennassa käytetyssä, vaikkakin + edustavassa aineistossa - ei yleisesti keskimääräistä ja + suurinta mahdollista virhettä.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 6, Yhdenmuotoisuusmuunnoksen KKJ-WGS84(ETRF89) + parametreja
ParametriSeliteYksikkö12345
 Sovellusalueen + leveysasteet   <65>65 
DXSiirto X-akselin + suunnassametri-96.062-75-74-76-78
DYSiirto Y-akselin + suunnassametri-82.428-230-229-232-231
DZSiirto Z-akselin + suunnassametri-121.754-89-88-91-97
rxKierto X-akselin + ympärisekunti-4.801    
ryKierto Y-akselin + ympärisekunti-0.345    
rzKierto Z-akselin + ympärisekunti+1.376    
mMittakaavakerroin = + (mittakaava-1)*10^6 +1.496    
        
 Virheen keskiarvometri0.81.61.40.81.8
 Maksimivirhemetri23.32.51.83.4
+

Seitsenparametrisen 3D-yhdenmuotoisuusmuunnoksen + kaavoista on käytössä useita toisistaan hieman poikkeavia + versioita, joista toinen ei ole sen oikeampi tai väärempi + kuin toinen; oleellista on vain se, että parametrit on + annettu vastaamaan kulloinkin käytössä olevaa kaavaa. + Siksi esitän taulussa 7 3D-yhdenmuotoisuusmuunnoskaavan, + jota ajatellen edelläesitetyt muunnosparametrit on + määritelty. Valtaosa eri lähteissä tarjolla olevista + muunnosparametreistä esitetään joko tämän kaavan + mukaisina tai sellaisen kaavan mukaisina, joissa + kiertokulmien etumerkit ovat vastakkaiset tälle kaavalle. + Kannattaa siis erityisesti tarkistaa, että kiertokulmien + etumerkit ja käytetty kaava vastaavat toisiaan. + Muunnoskaavan kiertokulmien yksikkö on radiaani, mutta + kiertokulmat on parametreissa esitetty kaarisekunteina, koska + ne useimmiten ilmoitetaan laitteille ja ohjelmille + kaarisekunteina.

+ + + + + + + +
Taulu 7, 3D-yhdenmuotoisuusmuunnoskaava, + jota vastaan muunnosparametrit on määritelty
 |X2|   |DX|                | 1   Rz -Ry |   |X1|
+
 |Y2| = |DY| + (1+m/10^6) * |-Rz  1   Rx | * |Y1|
+
 |Z2|   |DZ|                | Ry -Rx  1  |   |Z1|
+
+
+ +

 

+ +

Kuntien ja kaupunkien omat +koordinaatistot

+ +
+

Useissa kunnissa on + käytössä oma koordinaatisto. Oheisessa + Maanmittauslaitoksen artikkelissa on esitetty varsin kattava + luettelo kuntien omista koordinaatistoista sekä + muunnoskaavat kuntien omien koordinaatistojen ja KKJ-koordinaatiston + välillä. Artikkelista löytyy myös yhteystiedot + lisätietojen saamista varten.

+ +

Eräät kunnat ovat + laittaneet nettiin online-muunnosohjelmia tai tietoja + muunnoksista:

+ +
+ +

EUREF-FIN, ETRS89-realisaatio +Suomessa, 2003/2005-

+ +
+

Suomessa on käynnissä + koordinaatistouudistus, jossa nykyinen + kartastokoordinaattiärjestelmä KKJ korvataan + yleiseurooppalaisella ETRS89-koordinaatistojärjestelmällä.

+

Yleiseurooppalaisen ETRS90-koordinaatistojärjestelmän + mukaisen ETRF89-koordinaatiston realisaatio Suomessa (EUREF-FIN) + on määritelty Julkisen hallinnon suosituksessa 153: JHS153. JHS153 suosittelee kansallisissa + kartoitustöissä ja paikannusjärjestelmissä + käytettäväksi ETRS89 koordinaattijärjestelmää KKJ-koordinaattijärjestelmän + sijasta.

+

ETRS89-järjestelmään + liittyvät karttaprojektiot, tasokoordinaatistot ja + karttalehtijako sekä tarkat muunnoskaavat ja -parametrit + esitetään julkisen hallinnon suosituksessa 154: JHS154

+

Geodeettinen + laitos on luonut + Suomeen yleiseurooppalaiseen EUREF89-koordinaatistoon sidotun + EUREF-FIN-koordinaatiston. ETRS89 yhtyy + senttimetritarkkuudella WGS84-koordinaatistoon, joten + paikannuksen ja navigoinnin vaatimissa tarkkuuksissa ei + enää tarvita muunnosta WGS84:n ja suomalaisen + koordinaatiston välillä. Yhteys EUREF-FIN koordinaatiston + ja KKJ:n välillä on kuvattu edellä KKJ-koordinaatiston + kuvauksen yhteydessä.

+

Koko valtakuntaa koskevissa + kartoitus- ja muissa paikkatietotöissä suositetaan + käytettäväksi koko Suomen kattavaa poikittaista + lieriöprojektiota (Transverse Mercator), jonka + keskimeridiaani on 27 astetta itäistä pituutta ja joka + noudattaa UTM standardia lukuunottamatta kaistanleveyttä, n. + 13 astetta. Projektiota kutsutaan nimellä ETRS-TM35FIN. + Nimessä ETRS viittaa datumiin, TM35 tarkoittaa Transverse + Mercatorin kaistaa 35 ja FIN kertoo poikkeamasta UTM-standardista.

+

Paikallisiin töihin voidaan + edelleen käyttää Gauss-Krüger-projektioita + projektiovääristymien pienentämiseksi. Keskimeridiaanina + käytetään lähintä tasa-astetta. Gauss-Krüger-projektiota + kutsutaan nimellä ETRS-GKn. Nimessä ETRS viittaa datumiin, + ja GKn tarkoittaa Gauss-Krügerin kaistaa, jonka + keskimeridiaani on n astetta.

+

Taulussa 8 esitetään + Suomessa käytettävien tasokoordinaatistojen + projektioparametrit, joiden mukaan suoritetaan muunnokset + maantieteellisistä koordinaateista tasokoordinaateiksi ja + päinvastoin. Vertailun vuoksi taulukon lopussa esitetään + myös vastaavat KKJ-parametrit.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 8, Projektioparametrit Suomessa käytetyille + tasokoordinaatistoille
ProjektioEllipsoidiKeskimeridiaaniValeitäMittakaava + keskimeridiaanillaKaistanleveys
ProjectionEllipsoidCentral + MeridianFalse + EastingScale + factor at Central MeridianZone width
ETRS-TM35FINGRS8027500000 0.999613
ETRS-TMnGRS8021,27,335000000.99966
ETRS-GK GRS8019,20,...,31n500000, n=19,20,...,311.00001
KKJInternational + 192418,21,24,27,30,33n500000, + n=0,1,...,51.00003
+

Muunnos kolmiulotteisista X,Y,Z-koordinaateista + maantieteellisiin koordinaatteihin tehdään ETRS89-koordinaatistojen + yhteydessä käyttäen referenssiellipsoidia GRS80. GRS80 on + niin lähellä WGS84:n käyttämää WGS84 ellipsoidia, että + ero voidaan käytännön sovelluksissa unohtaa. Taulussa 8 + kuitenkin GRS80:n parametrit ja vertailu vastaaviin WGS84:n + parametreihin.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 9, GRS80 ja WGS84 ellipsoidit
ParametriSeliteYksikköWGS84GRS80WGS84-GRS80
A, DAIsoakselin puolikasmetri637813763781370
F, DFLitistyssuhde 1/298.2572235631/298.257222101-0.000000164423..
+

Uudet kartat

+

Vuoden 2003 alusta alkaen Merenkulkulaitos on julkaissut uudet merikartat WGS84-koordinaatistossa + ja käyttäen kansainvälisesti sovitun INT-karttasymboliikan + mukaisia symboleja ja värejä. Uudessa värityksessä leimaa-antavin + väri on matalan veden sininen väri ja vanhassa + värityksessä maa-alueiden vihreä väri. Siksi uusia + merikarttoja kutsutaan sinisiksi merikartoiksi erotukseksi + nykyisistä KKJ-koordinaatistoon perustuvista vihreistä + merikartoista. Siniset merikartat tulevat korvaamaan vihreät + merikartat 4-5 vuoden sisällä. Kuitenkin niistä alueista, + joista ei ole vielä sinistä merikarttaa, ylläpidetään + ajantasaista vihreää merikarttaa.

+

Maanmittauslaitos siirtyi kartantuotannossaan uuteen + koordinaattijärjestelmään ja lehtijakoon vuonna 2005. + Uudistuksen myötä muuttuu myös maastokarttojen mittakaava; + uudet maastokartat julkaistaan mittakaavoissa 1:25 000 ja 1:50 + 000. Siirtymävaihe kartantuotannossa vienee vuosia ja sinä + aikana on käytössä rinnakkain KKJ:n ja EUREF-FIN:n + mukaisia karttoja. Uusissa maastokartoissa ETRS-TM35FIN + ruudukko on merkitty mustilla risteillä, kolme UTM-ruudukkoa + TM34, TM35 ja TM36 on painettu punaisella värillä ja + maantieteelliset koordinaatit sinisellä värillä. ETRS-GK-ruudukkoa + ei esitetä maastokartoilla lainkaan.

+
+ +

Koordinaatistojen väliset +muunnokset

+ +
+

Parametrien asetus + GPS-laitteeseen tai navigointi-/paikannusohjelmaan

+

Kun suomalaisia karttoja + käytetään GPS-laitteiden tai navigointi/paikannusohjelmien + kanssa, täytyy ohjelmaan tai laitteeseen asettaa taulun 10 + mukaiset datum- tai tasokoordinaattimuunnosparametrit. Tyhjä + kohta tarkoittaa, että voidaan soveltaa yleisiä + oletusarvoja; datum=WGS84 tai vastaava, esim EUREF-FIN, + ellipsoidi=WGS84 tai GRS80.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 10, Suomalaisten karttojen tarvitsemat datum- ja + tasokoordinaattikonversiot
KarttatyyppiKoordinaattityyppiDatum-muunnosEllipsoidiTasokoordinaattimuunnos
Vanhat maakartat, KKJ, 1970-2005MaantieteellinenKKJ <> EUREF-FINInternational 1924 
TasokoordinaattiKKJ <> EUREF-FINInternational 1924KKJ1-KKJ5 / YKJ
Vanhat + "vihreät" merikartat, KKJ, -2002MaantieteellinenKKJ <> EUREF-FINInternational 1924 
Uudet maakartat, EUREF-FIN, 2005-Maantieteellinen   
Tasokoordinaatti  ETRS-TM35FIN / ETRS-GK(n)
Uudet + "siniset" merikartat, EUREF-FIN, 2003-Maantieteellinen   
+

Muunnos WGS84(n. EUREF-FIN)-koordinaatistosta + KKJ-koordinaatistoon on useissa laitteissa ja ohjelmissa + sisäänrakennettuna ja se pitää yleensä sisällään + sekä 3D-yhdenmuotoisuusmuunnoksen (datum-muunnos) että + muunnoksen 3D-X,Y,Z-koordinaattien ja maantieteellisten + koordinaattien välillä (ellipsoidin mukaan). GPS:ssä + koordinaatistoja kutsutaan nimellä datum ja muunnos onkin + yleensä helppo asettaa valitsemalla GPS:n datumiksi KKJ. + Ongelmana on vain se, että KKJ-koordinaatistoa kutsutaan eri + laitteissa eri nimillä, mm. KKJ, Finland Hayford, Finnish + Nautical Chart jne.

+

Useimmissa GPS-laitteissa on + valmiina projektioparametrit KKJ-yhtenäiskoordinaatistoa (YKJ) + varten, eli samalla peruskoordinaatiston kaistaa 3 varten, + mutta harvoin peruskoordinaatiston muita kaistoja varten. + Myös KKJ-tasokoordinaateista käytetään eri laitteissa eri + nimiä, esim. KKJ3, KKJ27, Finnish grid. Jos laitteesta + löytyy KKJ-projektioparametrit, aiheuttaa niiden valinta + yleensä samalla myös datumin vaihdon KKJ:hin.

+

Jos tasokoordinaatteja + vastaavia projektioparametreja ei ole valmiiksi + määriteltynä, ne voi yleensä syöttää käyttäjän + määritteleminä ns. "user grid"-parametreina. Jos + laitteessa on valittavana useita eri user grid-tyyppejä, + esimerkiksi Transverse Mercator, Lambert Conic Conformal, + Mercator jne., tulee valita tyyppi 'Transverse Mercator'. + Vastaavat parametrit otetaan tauluista 3, 4 tai 8. Tässä + kannattaa huomata, että keskimeridiaania kutsutaan sekä + nimellä 'Central Meridian" että 'Longitude of Origin'. + Valepohjoinen eli 'False northing' on nolla kaikissa + tapauksissa (sekä vanhoissa että uusissa + tasokoordinaatistoissa). Eräissä laitteissa esiintyy + Transverse Mercator projektion yhteydessä myös parametri 'Latitude + of Origin'; tämän arvon tulee olla nolla.

+

Muunnosketju, kaavat ja + parametrit

+

Taulussa 11 on esitetty + kaikki muunnosvaiheet kaavoineen ja parametreineen KKJ-tasokoordinaateista + EUREF-FIN tasokoordinaatteihin ja päinvastoin. Esitetty + ketju on yleinen ja on siksi sovellettavissa myös muihin + vastaaviin koordinaatistoihin vaihtamalla parametreja tai + mahdollisesti vaihtamalla muunnoskaava taso- ja + maantieteellisten koordinaattien välillä vastaamaan ko. + koordinaatistosysteemiä.

+

Jos vaadittu muunnostarkkuus + ei ole suuri, voidaan käyttää huomattavasti + yksinkertaisempia kaavoja, jotka on rakennettu suoraan + tiettyjen koordinaattimuotojen välille, esimerkiksi suoraan + KKJ-maantieteellisten ja EUREF-FIN-maantieteellisten välille. + Jos tarvitaan suurta tarkkuutta, voidaan soveltaa Julkisen hallinnon suosituksen 154 liitteessä 5 esitettyä + kolmioittaista affiinimuunnosta YKJ- ja ETRS-GK-koordinaattien + välillä. Kattavasti suomalaisten geodeettisten + koordinaatistojen väliset muunnokset on kuvattu Geodeettisen laitoksen tiedotteessa + numero 30.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taulu + 11, Muunnosketju KKJ-tasokoordinaatit > ETRS-pohjaiset + tasokoordinaatit (taulu 8) > KKJ-tasokoordinaatit
MistäMihinMuunnosKaavaParametrit
KKJ + tasokoordinaatitKKJ + maantieteellisetTransverse Mercator + projektio JHS154, liite 1KKJ-tasokoordinaatit, + taulu 3
KKJ + maantieteellisetKKJ 3D-X,Y,Z-koordinaatitMaantieteelliset + > 3D-X,Y,ZJHS153, 5.2Hayfordin + ellipsoidi, taulu 2
KKJ 3D-X,Y,Z-koordinaatitEUREF-FIN 3D-X,Y,Z-koordinaatitDatum-muunnos, 3D- + yhdenmuotoisuusmuunnosTaulu 7Taulu 6, sarake 1
EUREF-FIN 3D-X,Y,Z-koordinaatitEUREF-FIN + maantieteelliset3D-X,Y,Z > + maantieteellisetJHS153, 5.2GRS80 ellipsoidi, + taulu 9
EUREF-FIN + maantieteellisetETRS-pohjaiset + tasokoordinaatitTransverse Mercator + projektioJHS154, liite 1ETRS-pohjaiset + tasokoordinaatit, taulu 8
     
ETRS-pohjaiset + tasokoordinaatitEUREF-FIN + maantieteellisetTransverse Mercator + projektioJHS154, liite 1ETRS-pohjaiset + tasokoordinaatit, taulu 8
EUREF-FIN + maantieteellisetEUREF-FIN 3D-X,Y,Z-koordinaatitMaantieteelliset + > 3D-X,Y,ZJHS153, 5,2GRS80 ellipsoidi, + taulu 9
EUREF-FIN 3D-X,Y,Z-koordinaatitKKJ 3D-X,Y,Z-koordinaatitDatum-muunnos, 3D- + yhdenmuotoisuusmuunnosTaulu 7Taulu 6, sarake 1
KKJ 3D-X,Y,Z-koordinaatitKKJ + maantieteelliset3D-X,Y,Z > + maantieteellisetJHS153, 5.2Hayfordin + ellipsoidi, taulu 2
KKJ + maantieteellisetKKJ + tasokoordinaatitTransverse Mercator + projektioJHS154, liite 1KKJ-tasokoordinaatit, + taulu 3
+

 

+

Muunnospalveluja

+

Geodeettinen + laitos on tuottanut + koordinaattien muunnospalvelun http://coordtrans.fgi.fi/. Palvelu tukee Suomessa + valtakunnallisesti käytössä olevia koordinaatistoja ja + korkeusjärjestelmiä.

+

Muunnosten tarkkuudesta

+

KKJ-koordinaatiston + sisäisistä mittakaava- ja orientointivirheistä johtuen + jää EUREF-FIN - KKJ- yhdenmuotoisuusmuunnoksesta + parhaillakin siirtoparametreilla suurimmillaan kahden metrin + jäännösvirheitä. Harrastelijakäyttöön tarkoitetuissa + GPS-laitteissa käytetään useimmiten kolmiparametrista + yhdenmuotoisuusmuunnosta, jossa jäännösvirheet nousevat + suuremmiksi. Useissa navigointisovelluksissa nämä virheet + eivät kuitenkaan ole merkittäviä, eivätkä useinkaan + suurimpia koko navigointiketjussa.

+

Muunnos tasokoordinaattien + ja maantieteellisten koordinaattien samoin kuin muunnos + maantieteellisten ja 3D-X,Y,Z-koordinaattien välillä on + yleensä yksinkertaisimmillakin käytössä olevilla + kaavoilla niin tarkka, ettei virheillä ole mitään + merkitystä käytännön sovelluksissa.

+

Kannattaa huomata, että + koordinaatistomuunnosten virheet ovat vain osa + kokonaisvirhettä. Geodeettinen ja kartografinen perustyö, + GPS-tekniikka sekä käyttäjän navigointityö ovat kaikki + mittaamista mittaamisen perään ja aina kun mitataan, + tehdään virheitä. Kokonaisvirhe on eri vaiheissa tehtyjen + virheiden summa. Alla lueteltuna vaiheita, joissa syntyy + väistämättä mitta- tai laskentavirheitä, vaikka itse + toiminta olisi virheetöntä. Tämän lisäksi tulevat + tietysti käyttäjän tai tekijän omat virheet - + väärinkäsitykset, merkintävirheet, tulkintavirheet jne.

+ +
  • virheet koordinaatiston + mittaamisessa ja merkitsemisessä maastoon
  • +
  • kartantuotannossa + tapahtuvat virheet
  • +
  • virhe, kun käyttäjä + määrittää kartalla olevan pisteen koordinaatit + tai koordinaattien perusteella kartan pisteen
  • +
  • koordinaatistojen + välisten muunnosten virheet (esimerkiksi KKJ-WGS84), + mahdollisesti useassa kohdassa navigointiketjua
  • +
  • GPS-järjestelmän + virheet
  • +
    +
    + +

    Kiitokset

    + +
    +

    Haluan lämpimästi + kiittää FT Matti Ollikaista hänen ystävällisistä + neuvoistaan sekä eräiden tässä dokumentissa esiintyneiden + virheiden ja epätarkkuuksien korjaamisesta.

    +

    Suuri kiitos myös muille + tätä artikkelia kommentoineille henkilöille.

    +
    + +

    Lähdeluettelo

    + +
    +
      +
    • Hirvonen, R.A., 1949: + Die Gauss-Krügersche Projektion für breite + Meridianstreifen auf dem Internationalen Ellipsoide. + Kirjoitus Suomen Geodeettisen laitoksen julkaisussa + no 36
    • +
    • Ollikainen, M., 1993: + GPS-koordinaattien muuttaminen + Kartastokoordinaateiksi, Geodeettinen laitos, tiedote + 8
    • +
    • Poutanen Markku, 1998, GPS-paikanmääritys - ISBN 951-9269-89-4
    • +
    • Ollikainen, M., H. + Koivula and Markku Poutanen, 2000. The densification + of the EUREF network in Finland. The Publication of + Finnish Geodetic Institute, no. 129. P.O. Box 15, FIN-02431 + Masala
    • +
    • Ollikainen, M., Koivula + H., Poutanen M., 2001: EUREF-FIN koordinaatisto ja + EUREF-pistetihennykset Suomessa, Geodeettinen laitos, + tiedote 24
    • +
    • Suomen kartasto, vihko + 112
    • +
    • JHS 153: ETRS89-järjestelmän + mukaiset koordinaatit Suomessa: JHS153
    • +
    • JHS 154: ETRS89-järjestelmään + liittyvät karttaprojektiot, tasokoordinaatistot ja + karttalehtijako: JHS154
    • +
    • Marko Ollikainen ja + Matti Ollikainen, 2004, The Finnish Coordinate + Reference Systems. Julkaisijat Geodeettinen laitos ja + Maanmittauslaitos www.maanmittauslaitos.fi/popup.asp?id=0&docid=2507
    • +
    • Häkli P., Puupponen J., + Koivula H., Poutanen M.: Suomen geodeettiset + koordinaatistot ja niiden väliset muunnokset, Geodeettinen laitos, + tiedote 30
    • +
    +
    + +

    Eino +Uikkasen kotisivu

    + + \ No newline at end of file diff --git a/doc/coordinate_systems/kkjgps_files/urchin.js b/doc/coordinate_systems/kkjgps_files/urchin.js new file mode 100644 index 0000000..44803e9 --- /dev/null +++ b/doc/coordinate_systems/kkjgps_files/urchin.js @@ -0,0 +1,695 @@ +//-- Google Analytics Urchin Module +//-- Copyright 2007 Google, All Rights Reserved. + +//-- Urchin On Demand Settings ONLY +var _uacct=""; // set up the Urchin Account +var _userv=1; // service mode (0=local,1=remote,2=both) + +//-- UTM User Settings +var _ufsc=1; // set client info flag (1=on|0=off) +var _udn="auto"; // (auto|none|domain) set the domain name for cookies +var _uhash="on"; // (on|off) unique domain hash for cookies +var _utimeout="1800"; // set the inactive session timeout in seconds +var _ugifpath="/__utm.gif"; // set the web path to the __utm.gif file +var _utsp="|"; // transaction field separator +var _uflash=1; // set flash version detect option (1=on|0=off) +var _utitle=1; // set the document title detect option (1=on|0=off) +var _ulink=0; // enable linker functionality (1=on|0=off) +var _uanchor=0; // enable use of anchors for campaign (1=on|0=off) +var _utcp="/"; // the cookie path for tracking +var _usample=100; // The sampling % of visitors to track (1-100). + +//-- UTM Campaign Tracking Settings +var _uctm=1; // set campaign tracking module (1=on|0=off) +var _ucto="15768000"; // set timeout in seconds (6 month default) +var _uccn="utm_campaign"; // name +var _ucmd="utm_medium"; // medium (cpc|cpm|link|email|organic) +var _ucsr="utm_source"; // source +var _uctr="utm_term"; // term/keyword +var _ucct="utm_content"; // content +var _ucid="utm_id"; // id number +var _ucno="utm_nooverride"; // don't override + +//-- Auto/Organic Sources and Keywords +var _uOsr=new Array(); +var _uOkw=new Array(); +_uOsr[0]="google"; _uOkw[0]="q"; +_uOsr[1]="yahoo"; _uOkw[1]="p"; +_uOsr[2]="msn"; _uOkw[2]="q"; +_uOsr[3]="aol"; _uOkw[3]="query"; +_uOsr[4]="aol"; _uOkw[4]="encquery"; +_uOsr[5]="lycos"; _uOkw[5]="query"; +_uOsr[6]="ask"; _uOkw[6]="q"; +_uOsr[7]="altavista"; _uOkw[7]="q"; +_uOsr[8]="netscape"; _uOkw[8]="query"; +_uOsr[9]="cnn"; _uOkw[9]="query"; +_uOsr[10]="looksmart"; _uOkw[10]="qt"; +_uOsr[11]="about"; _uOkw[11]="terms"; +_uOsr[12]="mamma"; _uOkw[12]="query"; +_uOsr[13]="alltheweb"; _uOkw[13]="q"; +_uOsr[14]="gigablast"; _uOkw[14]="q"; +_uOsr[15]="voila"; _uOkw[15]="rdata"; +_uOsr[16]="virgilio"; _uOkw[16]="qs"; +_uOsr[17]="live"; _uOkw[17]="q"; +_uOsr[18]="baidu"; _uOkw[18]="wd"; +_uOsr[19]="alice"; _uOkw[19]="qs"; +_uOsr[20]="yandex"; _uOkw[20]="text"; +_uOsr[21]="najdi"; _uOkw[21]="q"; +_uOsr[22]="aol"; _uOkw[22]="q"; +_uOsr[23]="club-internet"; _uOkw[23]="query"; +_uOsr[24]="mama"; _uOkw[24]="query"; +_uOsr[25]="seznam"; _uOkw[25]="q"; +_uOsr[26]="search"; _uOkw[26]="q"; +_uOsr[27]="wp"; _uOkw[27]="szukaj"; +_uOsr[28]="onet"; _uOkw[28]="qt"; +_uOsr[29]="netsprint"; _uOkw[29]="q"; +_uOsr[30]="google.interia"; _uOkw[30]="q"; +_uOsr[31]="szukacz"; _uOkw[31]="q"; +_uOsr[32]="yam"; _uOkw[32]="k"; +_uOsr[33]="pchome"; _uOkw[33]="q"; +_uOsr[34]="kvasir"; _uOkw[34]="searchExpr"; +_uOsr[35]="sesam"; _uOkw[35]="q"; +_uOsr[36]="ozu"; _uOkw[36]="q"; +_uOsr[37]="terra"; _uOkw[37]="query"; +_uOsr[38]="nostrum"; _uOkw[38]="query"; +_uOsr[39]="mynet"; _uOkw[39]="q"; +_uOsr[40]="ekolay"; _uOkw[40]="q"; +_uOsr[41]="search.ilse"; _uOkw[41]="search_for"; +_uOsr[42]="bing"; _uOkw[42]="q"; + +//-- Auto/Organic Keywords to Ignore +var _uOno=new Array(); +//_uOno[0]="urchin"; +//_uOno[1]="urchin.com"; +//_uOno[2]="www.urchin.com"; + +//-- Referral domains to Ignore +var _uRno=new Array(); +//_uRno[0]=".urchin.com"; + +//-- **** Don't modify below this point *** +var _uff,_udh,_udt,_ubl=0,_udo="",_uu,_ufns=0,_uns=0,_ur="-",_ufno=0,_ust=0,_ubd=document,_udl=_ubd.location,_udlh="",_uwv="1.3"; +var _ugifpath2="http://www.google-analytics.com/__utm.gif"; +if (_udl.hash) _udlh=_udl.href.substring(_udl.href.indexOf('#')); +if (_udl.protocol=="https:") _ugifpath2="https://ssl.google-analytics.com/__utm.gif"; +if (!_utcp || _utcp=="") _utcp="/"; +function urchinTracker(page) { + if (_udl.protocol=="file:") return; + if (_uff && (!page || page=="")) return; + var a,b,c,xx,v,z,k,x="",s="",f=0,nv=0; + var nx=" expires="+_uNx()+";"; + var dc=_ubd.cookie; + _udh=_uDomain(); + if (!_uVG()) return; + _uu=Math.round(Math.random()*2147483647); + _udt=new Date(); + _ust=Math.round(_udt.getTime()/1000); + a=dc.indexOf("__utma="+_udh+"."); + b=dc.indexOf("__utmb="+_udh); + c=dc.indexOf("__utmc="+_udh); + if (_udn && _udn!="") { _udo=" domain="+_udn+";"; } + if (_utimeout && _utimeout!="") { + x=new Date(_udt.getTime()+(_utimeout*1000)); + x=" expires="+x.toGMTString()+";"; + } + if (_ulink) { + if (_uanchor && _udlh && _udlh!="") s=_udlh+"&"; + s+=_udl.search; + if(s && s!="" && s.indexOf("__utma=")>=0) { + if (!(_uIN(a=_uGC(s,"__utma=","&")))) a="-"; + if (!(_uIN(b=_uGC(s,"__utmb=","&")))) b="-"; + if (!(_uIN(c=_uGC(s,"__utmc=","&")))) c="-"; + v=_uGC(s,"__utmv=","&"); + z=_uGC(s,"__utmz=","&"); + k=_uGC(s,"__utmk=","&"); + xx=_uGC(s,"__utmx=","&"); + if ((k*1) != ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) {_ubl=1;a="-";b="-";c="-";xx="-";z="-";v="-";} + if (a!="-" && b!="-" && c!="-") f=1; + else if(a!="-") f=2; + } + } + if(f==1) { + _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; + _ubd.cookie="__utmb="+b+"; path="+_utcp+";"+x+_udo; + _ubd.cookie="__utmc="+c+"; path="+_utcp+";"+_udo; + } else if (f==2) { + a=_uFixA(s,"&",_ust); + _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; + _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo; + _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo; + _ufns=1; + } else if (a>=0 && b>=0 && c>=0) { + b = _uGC(dc,"__utmb="+_udh,";"); + b = ("-" == b) ? _udh : b; + _ubd.cookie="__utmb="+b+"; path="+_utcp+";"+x+_udo; + } else { + if (a>=0) a=_uFixA(_ubd.cookie,";",_ust); + else { + a=_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1"; + nv=1; + } + _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; + _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo; + _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo; + _ufns=1; + } + if (_ulink && xx && xx!="" && xx!="-") { + xx=_uUES(xx); + if (xx.indexOf(";")==-1) _ubd.cookie="__utmx="+xx+"; path="+_utcp+";"+nx+_udo; + } + if (_ulink && v && v!="" && v!="-") { + v=_uUES(v); + if (v.indexOf(";")==-1) _ubd.cookie="__utmv="+v+"; path="+_utcp+";"+nx+_udo; + } + var wc=window; + var c=_ubd.cookie; + if(wc && wc.gaGlobal && wc.gaGlobal.dh==_udh){ + var g=wc.gaGlobal; + var ua=c.split("__utma="+_udh+".")[1].split(";")[0].split("."); + if(g.sid)ua[3]=g.sid; + if(nv>0){ + ua[2]=ua[3]; + if(g.vid){ + var v=g.vid.split("."); + ua[0]=v[0]; + ua[1]=v[1]; + } + } + _ubd.cookie="__utma="+_udh+"."+ua.join(".")+"; path="+_utcp+";"+nx+_udo; + } + _uInfo(page); + _ufns=0; + _ufno=0; + if (!page || page=="") _uff=1; +} +function _uGH() { + var hid; + var wc=window; + if (wc && wc.gaGlobal && wc.gaGlobal.hid) { + hid=wc.gaGlobal.hid; + } else { + hid=Math.round(Math.random()*0x7fffffff); + if (!wc.gaGlobal) wc.gaGlobal={}; + wc.gaGlobal.hid=hid; + } + return hid; +} +function _uInfo(page) { + var p,s="",dm="",pg=_udl.pathname+_udl.search; + if (page && page!="") pg=_uES(page,1); + _ur=_ubd.referrer; + if (!_ur || _ur=="") { _ur="-"; } + else { + dm=_ubd.domain; + if(_utcp && _utcp!="/") dm+=_utcp; + p=_ur.indexOf(dm); + if ((p>=0) && (p<=8)) { _ur="0"; } + if (_ur.indexOf("[")==0 && _ur.lastIndexOf("]")==(_ur.length-1)) { _ur="-"; } + } + s+="&utmn="+_uu; + if (_ufsc) s+=_uBInfo(); + if (_uctm) s+=_uCInfo(); + if (_utitle && _ubd.title && _ubd.title!="") s+="&utmdt="+_uES(_ubd.title); + if (_udl.hostname && _udl.hostname!="") s+="&utmhn="+_uES(_udl.hostname); + if (_usample && _usample != 100) s+="&utmsp="+_uES(_usample); + s+="&utmhid="+_uGH(); + s+="&utmr="+_ur; + s+="&utmp="+pg; + if ((_userv==0 || _userv==2) && _uSP()) { + var i=new Image(1,1); + i.src=_ugifpath+"?"+"utmwv="+_uwv+s; + i.onload=function() { _uVoid(); } + } + if ((_userv==1 || _userv==2) && _uSP()) { + var i2=new Image(1,1); + i2.src=_ugifpath2+"?"+"utmwv="+_uwv+s+"&utmac="+_uacct+"&utmcc="+_uGCS(); + i2.onload=function() { _uVoid(); } + } + return; +} +function _uVoid() { return; } +function _uCInfo() { + if (!_ucto || _ucto=="") { _ucto="15768000"; } + if (!_uVG()) return; + var c="",t="-",t2="-",t3="-",o=0,cs=0,cn=0,i=0,z="-",s=""; + if (_uanchor && _udlh && _udlh!="") s=_udlh+"&"; + s+=_udl.search; + var x=new Date(_udt.getTime()+(_ucto*1000)); + var dc=_ubd.cookie; + x=" expires="+x.toGMTString()+";"; + if (_ulink && !_ubl) { + z=_uUES(_uGC(s,"__utmz=","&")); + if (z!="-" && z.indexOf(";")==-1) { _ubd.cookie="__utmz="+z+"; path="+_utcp+";"+x+_udo; return ""; } + } + z=dc.indexOf("__utmz="+_udh+"."); + if (z>-1) { z=_uGC(dc,"__utmz="+_udh+".",";"); } + else { z="-"; } + t=_uGC(s,_ucid+"=","&"); + t2=_uGC(s,_ucsr+"=","&"); + t3=_uGC(s,"gclid=","&"); + if ((t!="-" && t!="") || (t2!="-" && t2!="") || (t3!="-" && t3!="")) { + if (t!="-" && t!="") c+="utmcid="+_uEC(t); + if (t2!="-" && t2!="") { if (c != "") c+="|"; c+="utmcsr="+_uEC(t2); } + if (t3!="-" && t3!="") { if (c != "") c+="|"; c+="utmgclid="+_uEC(t3); } + t=_uGC(s,_uccn+"=","&"); + if (t!="-" && t!="") c+="|utmccn="+_uEC(t); + else c+="|utmccn=(not+set)"; + t=_uGC(s,_ucmd+"=","&"); + if (t!="-" && t!="") c+="|utmcmd="+_uEC(t); + else c+="|utmcmd=(not+set)"; + t=_uGC(s,_uctr+"=","&"); + if (t!="-" && t!="") c+="|utmctr="+_uEC(t); + else { t=_uOrg(1); if (t!="-" && t!="") c+="|utmctr="+_uEC(t); } + t=_uGC(s,_ucct+"=","&"); + if (t!="-" && t!="") c+="|utmcct="+_uEC(t); + t=_uGC(s,_ucno+"=","&"); + if (t=="1") o=1; + if (z!="-" && o==1) return ""; + } + if (c=="-" || c=="") { c=_uOrg(); if (z!="-" && _ufno==1) return ""; } + if (c=="-" || c=="") { if (_ufns==1) c=_uRef(); if (z!="-" && _ufno==1) return ""; } + if (c=="-" || c=="") { + if (z=="-" && _ufns==1) { c="utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)"; } + if (c=="-" || c=="") return ""; + } + if (z!="-") { + i=z.indexOf("."); + if (i>-1) i=z.indexOf(".",i+1); + if (i>-1) i=z.indexOf(".",i+1); + if (i>-1) i=z.indexOf(".",i+1); + t=z.substring(i+1,z.length); + if (t.toLowerCase()==c.toLowerCase()) cs=1; + t=z.substring(0,i); + if ((i=t.lastIndexOf(".")) > -1) { + t=t.substring(i+1,t.length); + cn=(t*1); + } + } + if (cs==0 || _ufns==1) { + t=_uGC(dc,"__utma="+_udh+".",";"); + if ((i=t.lastIndexOf(".")) > 9) { + _uns=t.substring(i+1,t.length); + _uns=(_uns*1); + } + cn++; + if (_uns==0) _uns=1; + _ubd.cookie="__utmz="+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; path="+_utcp+"; "+x+_udo; + } + if (cs==0 || _ufns==1) return "&utmcn=1"; + else return "&utmcr=1"; +} +function _uRef() { + if (_ur=="0" || _ur=="" || _ur=="-") return ""; + var i=0,h,k,n; + if ((i=_ur.indexOf("://"))<0 || _uGCse()) return ""; + h=_ur.substring(i+3,_ur.length); + if (h.indexOf("/") > -1) { + k=h.substring(h.indexOf("/"),h.length); + if (k.indexOf("?") > -1) k=k.substring(0,k.indexOf("?")); + h=h.substring(0,h.indexOf("/")); + } + h=h.toLowerCase(); + n=h; + if ((i=n.indexOf(":")) > -1) n=n.substring(0,i); + for (var ii=0;ii<_uRno.length;ii++) { + if ((i=n.indexOf(_uRno[ii].toLowerCase())) > -1 && n.length==(i+_uRno[ii].length)) { _ufno=1; break; } + } + if (h.indexOf("www.")==0) h=h.substring(4,h.length); + return "utmccn=(referral)|utmcsr="+_uEC(h)+"|"+"utmcct="+_uEC(k)+"|utmcmd=referral"; +} +function _uOrg(t) { + if (_ur=="0" || _ur=="" || _ur=="-") return ""; + var i=0,h,k; + if ((i=_ur.indexOf("://"))<0 || _uGCse()) return ""; + h=_ur.substring(i+3,_ur.length); + if (h.indexOf("/") > -1) { + h=h.substring(0,h.indexOf("/")); + } + for (var ii=0;ii<_uOsr.length;ii++) { + if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) { + if ((i=_ur.indexOf("?"+_uOkw[ii]+"=")) > -1 || (i=_ur.indexOf("&"+_uOkw[ii]+"=")) > -1) { + k=_ur.substring(i+_uOkw[ii].length+2,_ur.length); + if ((i=k.indexOf("&")) > -1) k=k.substring(0,i); + for (var yy=0;yy<_uOno.length;yy++) { + if (_uOno[yy].toLowerCase()==k.toLowerCase()) { _ufno=1; break; } + } + if (t) return _uEC(k); + else return "utmccn=(organic)|utmcsr="+_uEC(_uOsr[ii])+"|"+"utmctr="+_uEC(k)+"|utmcmd=organic"; + } + } + } + return ""; +} +function _uGCse() { + var h,p; + h=p=_ur.split("://")[1]; + if(h.indexOf("/")>-1) { + h=h.split("/")[0]; + p=p.substring(p.indexOf("/")+1,p.length); + } + if(p.indexOf("?")>-1) { + p=p.split("?")[0]; + } + if(h.toLowerCase().indexOf("google")>-1) { + if(_ur.indexOf("?q=")>-1 || _ur.indexOf("&q=")>-1) { + if (p.toLowerCase().indexOf("cse")>-1) { + return true; + } + } + } +} +function _uBInfo() { + var sr="-",sc="-",ul="-",fl="-",cs="-",je=1; + var n=navigator; + if (self.screen) { + sr=screen.width+"x"+screen.height; + sc=screen.colorDepth+"-bit"; + } else if (self.java) { + var j=java.awt.Toolkit.getDefaultToolkit(); + var s=j.getScreenSize(); + sr=s.width+"x"+s.height; + } + if (n.language) { ul=n.language.toLowerCase(); } + else if (n.browserLanguage) { ul=n.browserLanguage.toLowerCase(); } + je=n.javaEnabled()?1:0; + if (_uflash) fl=_uFlash(); + if (_ubd.characterSet) cs=_uES(_ubd.characterSet); + else if (_ubd.charset) cs=_uES(_ubd.charset); + return "&utmcs="+cs+"&utmsr="+sr+"&utmsc="+sc+"&utmul="+ul+"&utmje="+je+"&utmfl="+fl; +} +function __utmSetTrans() { + var e; + if (_ubd.getElementById) e=_ubd.getElementById("utmtrans"); + else if (_ubd.utmform && _ubd.utmform.utmtrans) e=_ubd.utmform.utmtrans; + if (!e) return; + var l=e.value.split("UTM:"); + var i,i2,c; + if (_userv==0 || _userv==2) i=new Array(); + if (_userv==1 || _userv==2) { i2=new Array(); c=_uGCS(); } + + for (var ii=0;ii -1) { + i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; } + c=l.substring((i+i3),i2); + } + return c; +} +function _uDomain() { + if (!_udn || _udn=="" || _udn=="none") { _udn=""; return 1; } + if (_udn=="auto") { + var d=_ubd.domain; + if (d.substring(0,4)=="www.") { + d=d.substring(4,d.length); + } + _udn=d; + } + _udn = _udn.toLowerCase(); + if (_uhash=="off") return 1; + return _uHash(_udn); +} +function _uHash(d) { + if (!d || d=="") return 1; + var h=0,g=0; + for (var i=d.length-1;i>=0;i--) { + var c=parseInt(d.charCodeAt(i)); + h=((h << 6) & 0xfffffff) + c + (c << 14); + if ((g=h & 0xfe00000)!=0) h=(h ^ (g >> 21)); + } + return h; +} +function _uFixA(c,s,t) { + if (!c || c=="" || !s || s=="" || !t || t=="") return "-"; + var a=_uGC(c,"__utma="+_udh+".",s); + var lt=0,i=0; + if ((i=a.lastIndexOf(".")) > 9) { + _uns=a.substring(i+1,a.length); + _uns=(_uns*1)+1; + a=a.substring(0,i); + if ((i=a.lastIndexOf(".")) > 7) { + lt=a.substring(i+1,a.length); + a=a.substring(0,i); + } + if ((i=a.lastIndexOf(".")) > 5) { + a=a.substring(0,i); + } + a+="."+lt+"."+t+"."+_uns; + } + return a; +} +function _uTrim(s) { + if (!s || s=="") return ""; + while ((s.charAt(0)==' ') || (s.charAt(0)=='\n') || (s.charAt(0,1)=='\r')) s=s.substring(1,s.length); + while ((s.charAt(s.length-1)==' ') || (s.charAt(s.length-1)=='\n') || (s.charAt(s.length-1)=='\r')) s=s.substring(0,s.length-1); + return s; +} +function _uEC(s) { + var n=""; + if (!s || s=="") return ""; + for (var i=0;i0) r=a.substring(i+1,i2); else return ""; + if ((i=a.indexOf(".",i2+1))>0) t=a.substring(i2+1,i); else return ""; + if (f) { + return r; + } else { + var c=new Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); + return c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5&m]+c[t&m]; + } +} +function _uIN(n) { + if (!n) return false; + for (var i=0;i"9") && (c!=".")) return false; + } + return true; +} +function _uES(s,u) { + if (typeof(encodeURIComponent) == 'function') { + if (u) return encodeURI(s); + else return encodeURIComponent(s); + } else { + return escape(s); + } +} +function _uUES(s) { + if (typeof(decodeURIComponent) == 'function') { + return decodeURIComponent(s); + } else { + return unescape(s); + } +} +function _uVG() { + if((_udn.indexOf("www.google.") == 0 || _udn.indexOf(".google.") == 0 || _udn.indexOf("google.") == 0) && _utcp=='/' && _udn.indexOf("google.org")==-1) { + return false; + } + return true; +} +function _uSP() { + var s=100; + if (_usample) s=_usample; + if(s>=100 || s<=0) return true; + return ((__utmVisitorCode(1)%10000)<(s*100)); +} +function urchinPathCopy(p){ + var d=document,nx,tx,sx,i,c,cs,t,h,o; + cs=new Array("a","b","c","v","x","z"); + h=_uDomain(); if (_udn && _udn!="") o=" domain="+_udn+";"; + nx=_uNx()+";"; + tx=new Date(); tx.setTime(tx.getTime()+(_utimeout*1000)); + tx=tx.toGMTString()+";"; + sx=new Date(); sx.setTime(sx.getTime()+(_ucto*1000)); + sx=sx.toGMTString()+";"; + for (i=0;i<6;i++){ + t=" expires="; + if (i==1) t+=tx; else if (i==2) t=""; else if (i==5) t+=sx; else t+=nx; + c=_uGC(d.cookie,"__utm"+cs[i]+"="+h,";"); + if (c!="-") d.cookie="__utm"+cs[i]+"="+c+"; path="+p+";"+t+o; + } +} +function _uCO() { + if (!_utk || _utk=="" || _utk.length<10) return; + var d='www.google.com'; + if (_utk.charAt(0)=='!') d='analytics.corp.google.com'; + _ubd.cookie="GASO="+_utk+"; path="+_utcp+";"+_udo; + var sc=document.createElement('script'); + sc.type='text/javascript'; + sc.id="_gasojs"; + sc.src='https://'+d+'/analytics/reporting/overlay_js?gaso='+_utk+'&'+Math.random(); + document.getElementsByTagName('head')[0].appendChild(sc); +} +function _uGT() { + var h=location.hash, a; + if (h && h!="" && h.indexOf("#gaso=")==0) { + a=_uGC(h,"gaso=","&"); + } else { + a=_uGC(_ubd.cookie,"GASO=",";"); + } + return a; +} +var _utk=_uGT(); +if (_utk && _utk!="" && _utk.length>10 && _utk.indexOf("=")==-1) { + if (window.addEventListener) { + window.addEventListener('load', _uCO, false); + } else if (window.attachEvent) { + window.attachEvent('onload', _uCO); + } +} + +function _uNx() { + return (new Date((new Date()).getTime()+63072000000)).toGMTString(); +} diff --git a/lib-timeout-home-widget.c b/lib-timeout-home-widget.c new file mode 100644 index 0000000..a548981 --- /dev/null +++ b/lib-timeout-home-widget.c @@ -0,0 +1,115 @@ +/* + * This file is part of hildon-timeout-home-widget-example + * + * Copyright (C) 2009 Nokia Corporation. All rights reserved. + * + * This maemo code example is licensed under a MIT-style license, + * that can be found in the file called "COPYING" in the root + * directory. + * + */ + +#include +#include + +#include "lib-timeout-home-widget.h" + +#include "location-provider.h" + +HD_DEFINE_PLUGIN_MODULE (TimeOutPlugin, time_out_plugin, HD_TYPE_HOME_PLUGIN_ITEM) + +GtkTextBuffer *debugBuffer = NULL; + +static void printDebug(const char *msg) +{ + if (debugBuffer != NULL) { + gtk_text_buffer_insert_at_cursor(debugBuffer, msg, -1); + gtk_text_buffer_insert_at_cursor(debugBuffer, "\n", -1); + } +} + +char debugStr[1024]; +#define debug(...) sprintf(debugStr, __VA_ARGS__); printDebug(debugStr) + +static void location_listener(double latitude, double longitude) +{ + debug("got location: %f, %f", latitude, longitude); +} + +int locationTrackingOn = 0; +void search_button_clicked(GtkButton *button, gpointer user_data) +{ + if (!locationTrackingOn) { + // Setup location tracking + setup_location_provider(); + set_location_listener(location_listener); + start_location_provider(); + + locationTrackingOn = 1; + debug("Location tracking started"); + } else { + stop_location_provider(); + cleanup_location_provider(); + + locationTrackingOn = 0; + debug("Location tracking stopped"); + } +} + +static GtkWidget *build_ui(void) +{ + GtkVBox *contents = GTK_VBOX(gtk_vbox_new(0, FALSE)); + GtkLabel *label = GTK_LABEL(gtk_label_new("Get me home")); +// HildonPickerButton *action; +// action = HILDON_PICKER_BUTTON (hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, +// HILDON_BUTTON_ARRANGEMENT_VERTICAL)); +// HildonTouchSelector *action_selector; +// action_selector = HILDON_TOUCH_SELECTOR (hildon_touch_selector_new_text ()); +// hildon_button_set_title (HILDON_BUTTON (action), "Action"); +// hildon_touch_selector_append_text (action_selector, "Blank Screen"); +// hildon_touch_selector_append_text (action_selector, "Suspend"); +// hildon_touch_selector_append_text (action_selector, "Turn Off"); +// hildon_picker_button_set_selector (action, action_selector); +// hildon_picker_button_set_active (action, 0); + + GtkWidget* getmehomeButton = hildon_gtk_button_new(HILDON_SIZE_AUTO); + gtk_button_set_label(GTK_BUTTON(getmehomeButton), "Search"); + + g_signal_connect(getmehomeButton, "clicked", G_CALLBACK(search_button_clicked), NULL); + +// HildonTimeButton *time; +// time = HILDON_TIME_BUTTON (hildon_time_button_new (HILDON_SIZE_FINGER_HEIGHT, +// HILDON_BUTTON_ARRANGEMENT_VERTICAL)); +// hildon_time_button_set_time (time, 22, 00); + + GtkHBox *buttons = GTK_HBOX(gtk_hbox_new(0, TRUE)); + gtk_container_add(GTK_CONTAINER(buttons), GTK_WIDGET(getmehomeButton)); +// gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (action)); +// gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (time)); + + GtkWidget *debugView = hildon_text_view_new(); // gtk_text_view_new(); + gtk_widget_set_size_request(GTK_WIDGET(debugView), 400, 200); + debugBuffer = hildon_text_view_get_buffer(HILDON_TEXT_VIEW(debugView)); // gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); + GtkWidget* debugScroller = gtk_scrolled_window_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(debugScroller), GTK_WIDGET(debugView)); + + gtk_box_pack_start(GTK_BOX(contents), GTK_WIDGET(label), FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(contents), GTK_WIDGET(buttons), FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(contents), GTK_WIDGET(debugScroller), FALSE, FALSE, 0); + gtk_widget_show_all(GTK_WIDGET(contents)); + + return GTK_WIDGET(contents); +} + +static void +time_out_plugin_init (TimeOutPlugin *desktop_plugin) +{ + GtkWidget *contents = build_ui (); + gtk_container_add (GTK_CONTAINER (desktop_plugin), contents); +} + +static void +time_out_plugin_class_init (TimeOutPluginClass *class) {} + +static void +time_out_plugin_class_finalize (TimeOutPluginClass *class) {} diff --git a/lib-timeout-home-widget.h b/lib-timeout-home-widget.h new file mode 100644 index 0000000..3c657aa --- /dev/null +++ b/lib-timeout-home-widget.h @@ -0,0 +1,55 @@ +/* + * This file is part of hildon-timeout-home-widget-example + * + * Copyright (C) 2009 Nokia Corporation. All rights reserved. + * + * This maemo code example is licensed under a MIT-style license, + * that can be found in the file called "COPYING" in the root + * directory. + * + */ + +#ifndef TIME_OUT_PLUGIN_H +#define TIME_OUT_PLUGIN_H + +#include + +#include + +G_BEGIN_DECLS + +typedef struct _TimeOutPlugin TimeOutPlugin; +typedef struct _TimeOutPluginClass TimeOutPluginClass; + +#define TIME_OUT_TYPE_HOME_PLUGIN (time_out_home_plugin_get_type ()) + +#define TIME_OUT_HOME_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ + TIME_OUT_TYPE_HOME_PLUGIN, TimeOutHomePlugin)) + +#define TIME_OUT_HOME_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ + TIME_OUT_TYPE_HOME_PLUGIN, TimeOutHomePluginClass)) + +#define TIME_OUT_IS_HOME_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ + TIME_OUT_TYPE_HOME_PLUGIN)) + +#define TIME_OUT_IS_HOME_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ + TIME_OUT_TYPE_HOME_PLUGIN)) + +#define TIME_OUT_HOME_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ + TIME_OUT_TYPE_HOME_PLUGIN, TimeOutHomePluginClass)) + +struct _TimeOutPlugin +{ + HDHomePluginItem hitem; +}; + +struct _TimeOutPluginClass +{ + HDHomePluginItemClass parent_class; +}; + +GType time_out_home_plugin_get_type(void); + +G_END_DECLS + +#endif diff --git a/location-provider.c b/location-provider.c new file mode 100644 index 0000000..58e3701 --- /dev/null +++ b/location-provider.c @@ -0,0 +1,100 @@ +#include "location-provider.h" + +#include +#include + +void (*listener)(double, double) = NULL; + +/*static void on_error(LocationGPSDControl *control, LocationGPSDControlError error, gpointer data) +{ + g_debug("location error: %d... quitting", error); + g_main_loop_quit((GMainLoop *) data); +}*/ + +static void on_changed(LocationGPSDevice *device, gpointer data) +{ + if (device == NULL || listener == NULL) { + return; + } + + if (device->fix) { + if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) { + listener(device->fix->latitude, device->fix->longitude); + } + } +} + +/*static void on_stop(LocationGPSDControl *control, gpointer data) +{ + g_debug("quitting"); + g_main_loop_quit((GMainLoop *) data); +}*/ + +/*static gboolean start_location(gpointer data) +{ + location_gpsd_control_start((LocationGPSDControl *) data); + return FALSE; +}*/ + +LocationGPSDControl *control = NULL; +LocationGPSDevice *device = NULL; + +void setup_location_provider() +{ +// GMainLoop *loop; + +// g_type_init(); + +// loop = g_main_loop_new(NULL, FALSE); + + if (control != NULL) { + return; + } + + control = location_gpsd_control_get_default(); + device = g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL); + + g_object_set(G_OBJECT(control), + "preferred-method", LOCATION_METHOD_USER_SELECTED, + "preferred-interval", LOCATION_INTERVAL_DEFAULT, + NULL); + +// g_signal_connect(control, "error-verbose", G_CALLBACK(on_error), loop); + g_signal_connect(device, "changed", G_CALLBACK(on_changed), control); +// g_signal_connect(control, "gpsd-stopped", G_CALLBACK(on_stop), loop); + +// g_idle_add(start_location, control); + +// g_main_loop_run(loop); +} + +void cleanup_location_provider() +{ + if (control != NULL) { + location_gpsd_control_stop(control); + + g_object_unref(device); + g_object_unref(control); + device = NULL; + control = NULL; + } +} + +void start_location_provider() +{ + if (control != NULL) { + location_gpsd_control_start(control); + } +} + +void stop_location_provider() +{ + if (control != NULL) { + location_gpsd_control_stop(control); + } +} + +void set_location_listener(void (*newListener)(double, double)) +{ + listener = newListener; +} diff --git a/location-provider.h b/location-provider.h new file mode 100644 index 0000000..31df5c7 --- /dev/null +++ b/location-provider.h @@ -0,0 +1,12 @@ +#ifndef LOCATION_PROVIDER_H +#define LOCATION_PROVIDER_H + +void setup_location_provider(); +void cleanup_location_provider(); + +void start_location_provider(); +void stop_location_provider(); + +void set_location_listener(void (*newListener)(double, double)); + +#endif diff --git a/timeout-home-widget.desktop.in b/timeout-home-widget.desktop.in new file mode 100644 index 0000000..a3faf4c --- /dev/null +++ b/timeout-home-widget.desktop.in @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=TimeOut Widget +Comment=Execute an action at a given time +Type=default +X-Path=lib-timeout-home-widget.so diff --git a/welcome b/welcome deleted file mode 100644 index e69de29..0000000