laacz.lv

Kaspara F. neoficiālā mājaslapa (Anno 1997)

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

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

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

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ā

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?.

GhosC

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.

Didulis

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šā.

Mazais Ole

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+b2*y2GCP+b4*y4GCP+…
LP=L0+b1*y1EAST+b3*y3EAST+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

ivars

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

modric

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.

modric

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

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

e-remit

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.

archaic

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:)

Iesniegt savu viedokli

Atruna par moderāciju. Daži vārdi, var gadīties, ka ir iz melnās listes (viagra and stuff). Tādi komentāri tiek aizturēti, pirms parādās lapā. Ja Tavs komentārs neparādās uzreizi, būs vien jāpagaida, līdz es jamo izlasīšu. Protams, ka paturu tiesības sev netīkošos komentārus dzēst, iemeslu neminot.