← Uz sākumu

Pagasti, novadi, un to esamība Gūgles kartēs

2009. gada 10. novembrī, 25 komentāri

Papildināts 11. novembra 0:15. Pavei tik - Ipiķi Gūgles kārtē kā dzīvi, sasodīts! Sīkāk par to vsu kādu citu dienu. :)

Sveiki, dārgie lasītāji. It sevišķi tie, kuri vēlas paurbt ģeometriju, mazliet paprogrammēt, un pēcāk rezultātus uzdāvināt pasaulei, lai tā kļūtu labāka. Principā, esi sveiks, programmētāj! :)

Uzdevuma nosacījumi ir vienkārši.

Gūgles kartē nepieciešams iezīmēt precīzi jebkura Latvijas pagasta, Republikas nozīmes pilsētas vai novada kontūru. Tas ir izdarāms caur Google Maps API, izmantojot GPolygon klasi.

Lai uzzīmētu kontūru, ir nepieciešami izejas dati. Tos (paldies Mārtiņam) var atrast vikipēdijā (pagasti un novadi, krāsoti novadi). Pirmajā failā (diemžēl, bez komentāriem), ir atrodamas robežas un, kas man ir svarīgi, kārtīgi sagrupēti poligoni visiem Latvijas pagastiem un pilsētām.

Savā piegājienā es paņēmu pirmo - Ipiķu pagastu, kurš tagad ir neatņemama manas dzīves sastāvdaļa, jo ir pirmais pagasts, kurš ienāk prātā, iedomājoties par Latvijas administratīvo dalījumu. Es arīdzan esmu par to informēts vairāk, nekā vajadzētu. Zinu, ka tā platība ir 67 km2 un 2000. gadā viņi tur bija 395 (iedzīvotāji). Nu un vēl šo to. Noteikti kādreiz turp aizbraukšu.

Tālākais teorijā ir vienkārši. Mums ir nepieciešams pārrēķināt SVG koordinātas par platuma un garuma koordinātām. Tad, nu, uzinstalēju Inkscape, vāzu vaļā lielo SVG, un provēju izmērīt atrašanās vietu Latvijas galējiem punktiem. Kad tas izdarīts, es uzmeklēju Internetā galējo punktu koordinātas uz Zemes virsmas. Dīvani, bet tajā interneta daļā, kura pasniedz savu informāciju latviešu valodā, šīs koordinātas bija norādītas ar precizitāti līdz minūtei. Attiecīgi, precīzākie dati atradās angļu vikipēdijas Latvijas ģeogrāfijas aprakstā.

Tālāk jau ir diezgan vienkārša aritmētika. Vismaz teorijā tā vajadzēja būt. Izrēķinām to, cik grādus plats mums ir viens horizontālais SVG pikselis, kā arī cik grādus augsts ir vertikālais. Vēl mazas korekcijas, lai iegūtu vienotu bāzi, un aplauziens. Labākais tuvinājums, kuru man izdevās iegūt, ir šāds.

Ipiķu pagasts
Ipiķu pagasts

Gala rezultātā (neesmu es nekāds ģeogrāfs vai ģeometrs, ja tādi vispār pastāv) izrādījās, ka koordinātu sistēmas ar vienkāršiem aritmētiskiem līdzekļiem pārrēķināt nevar. Jo. Pastāv zināmas atšķirības starp ģeogrāfisko koordināšu sistēmu un to, kāda tā tiek piemērota "plakanajās" kartēs - viens horizontālais kilometrs klasiskajā kartē būs konkrēts pikseļu, centimetru un collu skaits visās vietās. Kamēr, viens kilometrs uz Zemes virsmas atkarībā no platuma grāda satilpst dažādā garuma grādu, minūšu un sekunžu skaitā. Kas ir vairāk nekā loģiski (vai tā maz var būt? ja var, tad piedāvāju izmatntot terminu “paraloģiski”).

Aptuveni noskaidrot to, cik kilometrus būs viens garuma grāds interesējošajā platumā, var ar sekojošu formulu:

Garuma grāda kilometri, atkarībā no platuma
Garuma grāda kilometri, atkarībā no platuma

Kur φ ir platuma grāds, bet a un b ir Zemes ekvatoriālais un polārais rādiuss respektīvi, kuri, kā zināms, atšķiras.

Protams, es kaut kādā brīdī vēl pabakstīšos, bet varbūt kādam ir gana daudz brīva laika un vēlmes, lai isniegtu formulu, ar kuras palīdzību varētu pārrēķināt iepriekšminētās SVG kartes kordinātas uz platuma un garuma grādiem :) Pilnīgi iespējams, ka esmu vēl kaut ko aprēķinos vērā ņemamu palaidis garām.

Realizētājam, pieņemu, mūžīga slava un lauru lapu vainagi garantēti, jo es nebūt neesmu vienīgais, kuru šāda padarīšana interesē. Kā pierādījums faktam kalpos gūgles kartē adekvāti iezīmēts Ipiķu pagasts, kuram būtu jāizskatās apmēram tā, kā to uzzīmē JS iekš balticmaps.eu. Ja vēlamies kontūru, ievadam adreses vai vietas meklēšanas lauciņā “Ipiķu pagasts”, un uzklikšķinam uz pagasta saites.

Ipiķu pagasts pilnā tā robežu krāšņumā
Ipiķu pagasts pilnā tā robežu krāšņumā

P.S. Jā, iespējams, esmu saputrojies ģeogrāfiskā platuma un garuma terminos. Tas lietas būtību diez vai maina. Kā arī, varat iepazīties ar apjomīgu pētījumu par Latvijas centru (centriem, ja būsim precīzi): “Kur Latvijai vidus?”.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar Mārtiņš

2009. gada 10. novembrī, plkst. 13:29

Cik vienkārši viss būtu, ja Zeme būtu plakana :)

Gravatar Atecina

2009. gada 10. novembrī, plkst. 13:42

Burvīgi! Matemātika vienmēr ir patīkami satraucoša!

Gravatar GhosC

2009. gada 10. novembrī, plkst. 14:10

Nu ja izejas dati ir plakani kā lapa, varbūt ir vērts iesākumam pārrēķināt uz UTM koordinātu režģi. vienīgais ka Latvija ir 2'ās UTM zonās... tālāk jau ar kādu piem - gpsbabel konvertēt uz kādu sistēmu vien vēlies.

Gravatar Didulis

2009. gada 10. novembrī, plkst. 14:12

  1. Tava formulas bilde ir pazudusi, jo šķiet, ka google nepatīk tādi hotlink`i.
  2. Tīri teorētiski var nomērīt arī dažus punktus dabā, aizbraucot līdz vietām, kur iespraustas pagasta/novada, sākumu beigu zīmes un paņemot koordinātes. Tas pēc būtības ir prātīgākais kalibrēšanas veids.
  3. Ņemam par pamatu to pašu balticmaps.eu, jo tur jau ir sazīmētas pagastu/novadu robežas. Kreisajā malā apakšā parādās platuma un garuma grādi decimālā formātā ar pietiekamu vietu skaitu aiz komata un izrēķināt minūtes un sekundes ir pāris laika minūšu jautājums (reizēm meža vidū ir bijusi vajadzība pārrēķināt koordinātes). [dec]min = ([dec]deg - floor([dec]deg)) * 60 [dec]sec = ([dec]min - floor([dec]min)) * 60 Atliek tikai paņemt koordinātes no būtiskākajiem punktiem.
  4. Neesmu iedziļinājies vai arī sapratis, ko īsti centies panākt. Sapratu tik vien, ka tu gribi dabūt GMaps poligonus ar Latvijas novadiem. Tādēļ uzskatu, ka ir jāņem un jāzīmē. Manuprāt tur automatizēti neko nevarēs dabūt iekšā.

Gravatar jam

2009. gada 10. novembrī, plkst. 14:16

Laacz, varbūt jārīko tweetzīmēšana? Es varētu kādas 5 pagastus uzzīmēt. Gan jau vēl kāds brīvprātīgs atrastos. To tad varētu visi izmantot.

Gravatar Mārtiņš

2009. gada 10. novembrī, plkst. 14:28

Diduli, jam, bet tās kontūras jau ir sazīmētas vektorformātā SVG, problēma taču ir tikai atšķirīgās koordinātu sistēmās un ir vajadzīga transformācijas formula. Šeit ir vēl viens izejas fails, ja krāsiņas citas gribās ;) http://lv.wikipedia.org/wiki/Att%C4%93ls:Latvia_location_map.svg

Gravatar Mārtiņš

2009. gada 10. novembrī, plkst. 14:48

Noskaidroju papildus lietas. Tās SVG kartes ir LKS92 formātā, savukārt Google Maps ir WGS84. Google izmantošana dod vairākas tēmas arī latviskos forumos, kur šī konvertācija tiek atrisināta.

Gravatar Toms

2009. gada 10. novembrī, plkst. 14:52

Sveiciens matemātiķiem:)

Gravatar Mazais Ole

2009. gada 10. novembrī, plkst. 15:06

nu es kā maz pieredzējis ģeogrāfs ar zināšanām ģeodēzijā, kas vairāk atbilst šai problēmam kā ģeometrija ;) varētu padalīties ar šo un to, kas man zināms.. bet... tas viss nemaz nav tik vnk... Jāsak jau ar to - kādā koordinātu sistēmā tev ir tās SVG kartes kordinātas... no tālākā ir divi risinājumi... bet vispār... ir formuliņa, kas strādā tieši pie tā, lai pārrēķinātu kartes kordinātas uz platuma un garuma grādiem... BP=BF+b2y2GCP+b4y4GCP+... LP=L0+b1y1EAST+b3y3EAST+b5*y5EAST+... kur BP un LP ir attiecīgi platuma un garumā grādi... bet vispār... gana sarežģīta lieta... vieglāk ir izmantot šim nolūkam radītu datorprogrammu... jāsaka tikai, ka viņa strādā vien dažās koordinātu sistēmās, kas plašāk izmantotas Norvēģijā... Ja interesē vēl kas, vari mēģināt jautāt... he he he

Gravatar ivars

2009. gada 10. novembrī, plkst. 15:22

Lai SVG koordinātes korekti pārveidotu ģeogrāfiskajās ir jāzin SVG koordinātu projekcija (veids un parametri) + izmantotais t.s. datums (t.i. elipsoīda parametri + nobīde (kā zināms zeme nav apaļa)). Tāpēc, ja tas nav zināms, tad nekas ļoti precīzs nesanāks. Var pieņemt, ka izmantotā projekcija ir Latvijas lks92tm (http://spatialreference.org/ref/epsg/3059/), bet tas nav 100% droši. Formulas plaknes koordinātu pārvēršanai ģeogrāfiskajās ir atrodamas gan mācību grāmatās, gan internetā, taču lietderīgāk izmantot gatavas bibliotēkas/tooļus (piem. http://trac.osgeo.org/proj/ vai gdal). Manuprāt visjēdzīgākais problēmas risinājums būtu no GISistiem dabūt korektus shp failus (noteikti tie ir pieejami, varbūt tos var prasīt ofciālajām iestādēm), ar proj4 vai gdal tos pārveidoē ģeogrāfiskajās vai merkatora koordinātes (ko nu tas google api ņem pretī).
PS. Neesmu GISists, vienkārši kaut kad nācās risināt līdzīgu uzdevumu

Gravatar modric

2009. gada 10. novembrī, plkst. 16:09

Precīzai pārrēķināšanai ar aritmētiku nepietiks... Būs tikai tuvinājumi ar zināmu kļūdu, kas ir mazāk svarīgi, piemēram, Rīgas atzīmēšanai kā punktu uz pusmiljona kartes, bet būs galīgas auzas ar tik "sīku" objektu, ka pagastu kontūru precīzu atveidošanu 5K vai vēl mazāka mēŗoga kartē.

Jau pieminētie elipsoīdi - WGS84 (izmanto lielāka daļā GPS), LKS92 (Latvijā IZGATAVOTO Latvijas karšu standarts), dažādās projekcijas - transversā Merkatora līdz 200K, lielākiem mērogiem koniskās projekcijas - tas viss ir tāds MURGS, kurā bez speciālām zināšanām nav ko darīt. To elipsoīdu vien ir simtiem (katrs reģions sev ir izrēķinājis tādus parametrus, kas vislabāk atbilst šim konkrētajam zemeslodes gabalam), un atšķiras tie minimāli, bet tomēr atšķiras. Un šī starpība lien laukā taisni tad, kad sāk gribēties kautko atzīmet ar precizitāti līdz metram(iem).

UTM zonu robeža iet caur Rīgu - līdz ar to metriskās koordinātes ir dažādas, atkarībā no tā, kurā zonā tās attēlo. Tāpēc Baltijai (LV, EE, LT) ir SAVA zona, par 3 grādiem nobīdīta, lai viena 6-grādu zona nosegtu visas valstis.

Es te varēu rakstit daudz & dikti, bet ar to, ko ātrumā atcerējos, jau laikam pietiek, lai būtu skaidrs, ka subject nebūt nav tik vienkārši paveicams uzdevums, ja to grib izdarīt precīzi, bet aptuveni - nav vērts laiku tērēt.

Gravatar modric

2009. gada 10. novembrī, plkst. 18:07

Drusku parakājos... Šekureku vēl tāds - http://www.openstreetmap.org/

Ungauņi jau savus "pagastus" tur ir sazīmējuši, palūrēju tos pašus Ipiķus...

Tad vēl ir tāds OziExplorer - austrāļu kartogrāfijas sofc, kas saprot RASTRA kartes, un nupat māk izmantot arī GoogleMaps un arī augšminēto OpenStreet.

Ja kādam ir laiks to darīt:

  1. OziExplõrerī ielādēt karti, kurā ir pagastu robežas. 2.Pārzīmēt tās kā "trace" - rezultātā ir trace-fails, itkā būtu ar GPS precīzi noiets pa šo robežu. 3.Pārslēgties uz Google (OpenStreet) un ielādēt šo trace-failu

  2. priecāties par pagastu robežām uz Googles kartēm :)

Gravatar e-remit

2009. gada 10. novembrī, plkst. 19:35

pajautāju par šo savam draugam - GISistam, šams teica, ka bezjēdzīgi mokaties. viš ieteica labāk neizmantot SVG, bet pa Ls5 nopirkt Jāņusētas kartes CD un tur visas kartes atvērtā formātā SHP formātā, ar visiem papildus atribūtiem, kā nosaukumi, skaiti, platības. SHP ir atvērts formāts nu no tā ērti iegūt visus poligonus.

Gravatar Maruta

2009. gada 11. novembrī, plkst. 01:36

Varbūt beidzot kāds arī Dienvidu tiltu iezīmējiet? :)

Gravatar archaic

2009. gada 11. novembrī, plkst. 05:28

Ui kā ar šo savulaik mocījos. Varbūt kādam ir PHP klase vai C# funkcija uzrakstīta, kas konvertē LKS92 uz WGS84 un otrādi? Kaut gan, ja kādam ir, tad viņam ir jābūt filantropam, lai dalītos, jo tas ir reāls know-how:)

Gravatar imo

2009. gada 11. novembrī, plkst. 08:07

Laacz, es tevi kkā ipiķos neesmu nekad manījis ... nav noslēpums kapēc viņi tev tik mīļi? un tur nav kur noslēpties ... :P

Gravatar imo

2009. gada 11. novembrī, plkst. 09:09

cik paluureeju js kartē, tad tur var redzēt kaut kādas kordinātes ... http://www.failiem.lv/thumb_show.php?i=rbhprj&n=untitled.PNG

varbūt ka pēc tām kaut ko var salīdzināt un izrēķināt ...

Gravatar Mārtiņš

2009. gada 11. novembrī, plkst. 09:47

Viens no iemesliem mīlēt Ipiķus ir robeža ar Iguāniju, pie kuras uzreiz var redzēt kļūdu koordinātu sistēmā.

Gravatar Pēteris

2009. gada 11. novembrī, plkst. 10:51

Un, protams, arī nosaukums!

Gravatar DimanC

2009. gada 11. novembrī, plkst. 10:56

nav domas iedziļināties jūsu formulā, bet rezultāta fail acīmredzams - vismaz 30m nobīde tiem ipiķiem google kartē (attiecībā pret LV-EE robežu). wtf?