Datu pārprojicēšana ar gdal/ogr

Ne reizi vien ir nācies sastapties ar dažādi projicētiem datiem. Bieži lietotājos tas izsauc attieksmi – slikti dati, nekam neder, nerādās, kur vajag. Nedaudz pieredzējušākiem lietotājiem atsauksme “slikti dati” seko tikai gadījumā, ja bāzes datiem nav norādīta projekcijas sitēma, un uzminēt to ir neiespējami. Datiem nenorādīta koordinātu sistēma ir bieža parādība datu apmaiņā starp datu sniedzējiem un saņēmējiem Latvijā – tā ir norma, par kuru reti kurš uztraucas, tikai vēlāk palamājas, ja tiešām nevar salikt neko kopā.

Pavisam vienkārši aprakstīšu datu pārprojicēšanas iespējas gadījumā, kad nav pieejams lielai lietotāju daļai pazīstamais, bet mazai daļi pielietotais ArcToolbox datu pārprojicēšanas rīks.

Datu pārprojicēšanai izmantosim gdal/ogr bibliotēkas sniegtās iepējas ar PROJ.4 atbalstu, kas nodrošina EPSG kodu pielietojuma iespējas datu apstrādes procesā. Lai eksperiments būtu atkārtojams, izmantosim Geonames.org datubāzes Latvijas vietvārdus. Lai veiktu veiksmīgu datu transformāciju, ir jāzina resursdatu koordinātu sistēma. Šajā gadījumā datubāzē tiek lietotas wgs84 koordinātu sistēma, kas pēc EPSG kataloga atbilst kodam 4326.

Šajā gadījumā datus transformēsim uz LKS92 / Latvia TM koordinātu sistēmu, kas pēc EPSG datubāzes atbilst 3059 kodam.

Tā kā dati ir csv formatā, izveidojam no tiem *.shp failu, kurš, savietojumā ar wgs84 koordinātēs esošiem datiem, savietojas bez problēmām. Pēc noklusējuma izveidotais mans.shp fails nesatur koordinātu sistēmu raksturojošus ierakstus, ko var pārbaudīt izmantojot komandu (windows lietotāji iztiek bez beigu daļas “| less“):

ogrinfo -al mans.shp | less

Tādēļ, lai datus pārprojicētu, iepriekš jāpiešķir kordinātu sistēmu iegūtajiem datiem. Lai piešķirtu koordinātu sistēmu, tiek lietots utilīts ogr2ogr, kuram ir vairākas komandas koordinātu sistēmu manipulācijām:
  1. -a_srs srs_def: Nosaka izejas datu projekcijas sistēmu
  2. -t_srs srs_def: Pārprojicēšana uz norādīto projekcijas sistēmu
  3. -s_srs srs_def: Pārraksta resursa projekcijas sistēmu

Šajā gadījumā izmantojām komandu kombināciju, lai pateiktu, ka dati ir wgs84 sitēmā, kas arī ir patiesā šo datu pašreizējā sitēma:

ogr2ogr -a_srs EPSG:4326 mans_wgs.shp mans.shp

Nākošais solis ir transformēt datus uz LKS92 / Latvia TM sitēmu no wgs84:

ogr2ogr -t_srs EPSG:3059 mans_lks.shp mans_wgs.shp

Veicot pārbaudi, datiem ar ogrinfo redzam, ka esam veiksmīgi datus transformējuši. Dati veiksmīgi savietojas ar Latvijas datiem,pimēram LĢIA gatavotajiem datiem, lai sakristu ar datiem, kas atrodas +6000000, jālieto EPSG kods 2100.

ogrinfo -al sunas_lks.shp | less

Layer SRS WKT:
PROJCS[“LKS92 / Latvia TM”,
GEOGCS[“LKS92”,
DATUM[“Latvia_1992”,
SPHEROID[“GRS 1980”,6378137,298.257222101,
AUTHORITY[“EPSG”,”7019″]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY[“EPSG”,”6661″]],
PRIMEM[“Greenwich”,0,
AUTHORITY[“EPSG”,”8901″]],
UNIT[“degree”,0.01745329251994328,
AUTHORITY[“EPSG”,”9122″]],
AUTHORITY[“EPSG”,”4661″]],
PROJECTION[“Transverse_Mercator”],
PARAMETER[“latitude_of_origin”,0],
PARAMETER[“central_meridian”,24],
PARAMETER[“scale_factor”,0.9996],
PARAMETER[“false_easting”,500000],
PARAMETER[“false_northing”,-6000000],
UNIT[“metre”,1,
AUTHORITY[“EPSG”,”9001″]],
AUTHORITY[“EPSG”,”3059″]]

12 komentārs to “Datu pārprojicēšana ar gdal/ogr”

  1. marisn saka:

    Es gan ieteiktu ogrinfo lietot šādi:
    ogrinfo -ro -so dati.shp dati
    Šī komanda izdrukātu tikai informāciju par faila apjomu, koordinātu sistēmu un pieejamajiem atribūtiem. Priekšrozība – nevajag nekādu lapotāju (more is less).

  2. pb saka:

    Nevaru nepiekrist. Tavs variants pat ir vairāk paredzēts faila pamatinformācijas iegūšanai, rakstā minētais var atgriezt pilnīgi visus datus par failu un tā saturu. Šā vai tā būs jāiepazīties ar ogr komandām.

  3. gints saka:

    Dīvaini man

  4. gints saka:

    Dīvaini man komanda:
    ogr2ogr -t_srs EPSG:4326 LP_wgs.shp LP_lks92.shp

    šo:
    PROJCS[“LKS92 ….
    INFO (String) = (null)
    POINT (506463.0 6311868.139999999664724)

    pārkonvertē par šo:
    GEOGCS[“GCS_WGS_1984”,
    DATUM[“WGS_1984”,
    INFO (String) = (null)
    POINT (0.0 90.000000000000071)

  5. pb saka:

    Kur problēma?! Vai pārprojicejot uz wgs dati ir kautkur ellē gaisā?! Tavā gadījumā izskatās ka dati ir +6000000. Ja datiem ir noteikta koordinātu sistēma LKS92 parliekot uz wgs viņi nebūs tur kur tiem jābū, jo dati patiesībā nav LKS92 ;) (Jāpārdefinē kordinātu sistēma orģinālajiem datiem)

  6. pb saka:

    Uz epsg kodu 2100 neskatīties, jo tas patiesībā nav nemaz labs :)

  7. gints saka:

    Hmm.. tas fails ir eksportēts no Jāņu sētas :).
    Citāts:
    “JS Latvijas kartes un objektu datu bāzes ipiesaistītas vienai no Latvijā visbiežāk lietotajām koordinātu sistēmām LKS-92”

  8. pb saka:

    Īsti JS produktus nepārzinu. Ja produkts piedāvā datu eksportu un pietam ir norādīts ka uz LKS92 tad tam tā ir jābūt, ja produkts to nepiedāvā un tas ir izveikts citām metodēm koordinātu sistēma var būt,datu aizsardzības labad, izdomāta un paslēpta ;)

  9. gints saka:

    Kāda tur datu aizsardzība … viņi man kartē punktiem norāda tās pašas koordinātes kuras ir tajā failā.
    Man pat ir viņu pārrēķina funkcija. (kura saucas LatLon2UTM ???) kura tipa izmanto meridiānu 24.

  10. pb saka:

    Nu tad atsūti gabalu no tā kas tev sagāda problēmas. Citādi man īsti netop skaidra problēma.

  11. pb saka:

    Dati ir +600000. Kas īsti nav LKS92 pēc definīcijas. Šeit FN=0, kur LKS92 FN=-6000000.Šiem datiem definējot koordinātu sistēmu parametram ”false_northing”,-6000000 jābūt ir ”false_northing”,0-tad viss normāli parprojicēsies.

    To var izdarīt arī ar bīdīšnu, ko pielieto daudzi lietotāji (labāk gan ir ar pārprojicēšanu, bet zinotprecīzi ka tas ir 6000000 var arī tā darīt), gvSIG ir funkcija XY Shift un parbīdam par -6000000 un būs viss savās vietās.

  12. […] par gdal/ogr bibliotēkas pielietošanu jau reiz tika minēti EPSG kodi, kas faktiski ir pasaules koordinātu sistēmu oficiālais […]

Atstāt savu komentāru