Geo Coordinate Converter http://geocoordinateconverter.tk
Za slovensko verzijo te datoteke glej PREBERIME.md.
gk-slo is a converter between geographic cartesian coordinates (Gauss-Krueger/D48, Transverse Mercator/D96) and geodetic coordinates (latitude/longitude on ETRS89/WGS84) for Slovenia. It can be used as a replacement for the official conversion program SiTra (with Helmert parameters for the whole Slovenia, no regional parameters) or more precise when used with the built-in affine/triangle-based transformation using the reference virtual tie points v3.0 (for detailed description see AFT.md), which is similar as the official conversion program 3Tra.
Program can read files in SiTraNet format (ASCII XYZ), LIDAR (ASCII XYZ with semicolon, .asc) or ESRI shapefile (ArcGIS .shp format, use gk-shp).
The following transformations are available (in both directions):
- xy (D96/TM) ⇔ φλ (ETRS89)
- xy (D48/GK) ⇔ xy (D96/TM) Helmert transformation
- xy (D48/GK) ⇔ φλ (ETRS89) Helmert transformation
- xy (D48/GK) ⇔ xy (D96/TM) Affine transformation
- xy (D48/GK) ⇔ φλ (ETRS89) Affine transformation
For calculating heights with the help of geoid model two absolute geoid models for Slovenia are available: Slo2000 and EGM2008.
It's written in C language and can be compiled and used on all major operating systems. Coordinate conversion routines can be easily adapted to locations other than Slovenia (via definition of ellipsoid, projection and Helmert parameters).
Detailed description of coordinate conversion routines and their API (in module "geo.c") is in file geo_api.md.
List of literature used (with links to documents) is in file literature.md.
Precompiled version of gk-slo/gk-shp for Windows (32-bit, compiled with MinGW) can be downloaded from gk-slo-9.07.zip.
Cartesian coordinates | Geodetic coordinates |
---|---|
x = easting | fi = phi (φ), latitude, Breite (N/S) |
y = northing | la = lambda (λ), longitude, Länge (E/W) |
H = ortometric/above sea level height | h = ellipsoidal height |
Ng = geoid height |
- common.h
Include file with common definitions for Windows and Unix environment - util.c
Collection of utility functions for use in other parts of program - geoid_slo.h
Absolute geoid model for Slovenia from GURS (Slo2000) - geoid_egm.h
Absolute geoid model for Slovenia from EGM2008 - aft_gktm.h, aft_tmgk.h
Pre-calculated affine transformation tables for Slovenia - geo.h
Include file for using coordinate conversion routines - geo.c
Collection of coordinate conversion routines - gk-slo.c
Main cmd-line program for converting coordinates from XYZ files - gk-shp.c
Main cmd-line program for converting coordinates from shapefiles - shapelib
Files from Shapefile C Library needed for reading and writing ESRI Shapefiles
$ cc -O2 -Wall -msse2 -mfpmath=sse gk-slo.c util.c geo.c -o gk-slo -lm -lrt
$ cc -O2 -Wall -msse2 -mfpmath=sse -Ishapelib gk-shp.c util.c geo.c \
shapelib\shpopen.c shapelib\dbfopen.c shapelib\safileio.c shapelib\shptree.c -o gk-shp -lm -rt
or
$ make -f Makefile.unix
$ gcc -O2 -Wall -msse2 -mfpmath=sse -D_WCHAR gk-slo.c util.c geo.c -o gk-slo.exe
$ gcc -O2 -Wall -msse2 -mfpmath=sse -Ishapelib gk-shp.c util.c geo.c \
shapelib\shpopen.c shapelib\dbfopen.c shapelib\safileio.c shapelib\shptree.c -o gk-shp.exe
or
$ make -f Makefile.mingw
$ cl /O2 /Wall -D_WCHAR gk-slo.c util.c geo.c
$ cl /O2 /Wall /Ishapelib gk-shp.c util.c geo.c \
shapelib\shpopen.c shapelib\dbfopen.c shapelib\safileio.c shapelib\shptree.c
or
$ nmake -f Makefile.msc
$ make -f Makefile.macos gk-slo gk-shp
Options -msse2 -mfpmath=sse
are needed because otherwise we'll get
different results on different systems (for more explanation see
StackOverflow).
$ gk-slo [<options>] [<inpname> ...] -d enable debug output -ht calculate output height with 7-params Helmert trans. -hc copy input height unchanged to output -hg calculate output height from geoid model (default) -g slo|egm select geoid model (Slo2000 or EGM2008) default: Slo2000 -dms display fila in DMS format after height -t <n> select transformation: 1: xy (d96tm) --> fila (etrs89), hg?, default 2: fila (etrs89) --> xy (d96tm), hg 3: xy (d48gk) --> fila (etrs89), ht 4: fila (etrs89) --> xy (d48gk), hg 5: xy (d48gk) --> xy (d96tm), hg(hc) 6: xy (d96tm) --> xy (d48gk), ht(hc) 7: xy (d48gk) --> xy (d96tm), hc, affine trans. 8: xy (d96tm) --> xy (d48gk), hc, affine trans. 9: xy (d48gk) --> fila (etrs89), hg, affine trans. 10: fila (etrs89) --> xy (d48gk), hg, affine trans. -r reverse parsing order of xy/fila (warning is displayed if y < 200000 or la > 17.0) <inpname> parse and convert input data from <inpname> <inpname> "-" means stdin, use "--" before -o -|=|<outname> write output data to: -: stdout (default) =: append ".out" to each <inpname> and write output to these separate files <outname>: write all output to 1 file <outname> Typical input data format (SiTra .xyz or LIDAR .asc): [<label> ]<fi|x> <la|y> <h|H> [<label>;]<fi|x>;<la|y>;<h|H>
A new program gk-shp, able to read [ESRI shapefiles] (ArcGIS .shp format), has similar syntax:
$ gk-shp [<options>] <inpname> <outname> -d enable debug output -ht calculate output height with 7-params Helmert trans. -hc copy input height unchanged to output -hg calculate output height from geoid model (default) -g slo|egm select geoid model (Slo2000 or EGM2008) default: Slo2000 -dms display fila in DMS format after height -t <n> select transformation: 1: xy (d96tm) --> fila (etrs89), hg?, default 2: fila (etrs89) --> xy (d96tm), hg 3: xy (d48gk) --> fila (etrs89), ht 4: fila (etrs89) --> xy (d48gk), hg 5: xy (d48gk) --> xy (d96tm), hg(hc) 6: xy (d96tm) --> xy (d48gk), ht(hc) 7: xy (d48gk) --> xy (d96tm), hc, affine trans. 8: xy (d96tm) --> xy (d48gk), hc, affine trans. 9: xy (d48gk) --> fila (etrs89), hg, affine trans. 10: fila (etrs89) --> xy (d48gk), hg, affine trans. -r reverse parsing order of xy/fila (warning is displayed if y < 200000 or la > 17.0) <inpname> parse and convert input data from <inpname> <outname> write output data to <outname> Input data format: ESRI Shapefile (ArcGIS)
Input file VTG2225.XYZ (DMV, in SiTraNet format, Gauss-Krueger/D48):
0000001 509000.000 76000.000 343.30 0000002 509005.000 76000.000 342.80 0000003 509010.000 76000.000 342.30
Convert to new coordinate system (Transverse Mercator/D96); heights should be copied, not calculated:
$ gk-slo -t 5 -hc VTG2225.XYZ VTG2225.XYZ: possibly reversed x/y 0000001 509487.490 575640.546 343.300 0000002 509492.490 575640.546 342.800 0000003 509497.490 575640.546 342.300
If you see the warning "possibly reversed x/y", use the option "-r" to get the correct conversion:
$ gk-slo -t 5 -hc -r VTG2225.XYZ 0000001 76484.893 508628.990 343.300 0000002 76484.893 508633.991 342.800 0000003 76484.893 508638.991 342.300
Convert the same file to ETRS89/WGS84 coordinates. This time the height will be recalculated using Helmert transformation (default):
$ gk-slo -t 3 -r VTG2225.XYZ 0000001 45.8281655853 15.1110624092 389.063 0000002 45.8281655218 15.1111267639 388.563 0000003 45.8281654582 15.1111911187 388.063
For better readout you can include the option "-dms":
$ gk-slo -t 3 -r -dms VTG2225.XYZ 0000001 45.8281655853 15.1110624092 389.063 45 49 41.39611 15 6 39.82467 0000002 45.8281655218 15.1111267639 388.563 45 49 41.39588 15 6 40.05635 0000003 45.8281654582 15.1111911187 388.063 45 49 41.39565 15 6 40.28803
Store result in a file:
$ gk-slo -t 3 -r VTG2225.XYZ -o VTG2225.flh (creates file VTG2225.flh)
Input file VTC0512.XYZ (DMV, in SiTraNet format, Transverse Mercator/D96):
0000001 412250 97000 606.2 0000002 412250 96995 606.9 0000003 412250 96990 607.9
Convert to ETRS89/WGS84 coordinates, height will be recalculated using geoid model Slo2000 (default):
$ gk-slo -t 1 -r VTC0512.XYZ 0000001 46.0071929697 13.8669428837 652.772 0000002 46.0071479903 13.8669438021 653.472 0000003 46.0071030110 13.8669447206 654.472
If you want to use the EGM2008 geoid model, use the "-g egm" option:
$ gk-slo -t 1 -r -g egm VTC0512.XYZ 0000001 46.0071929697 13.8669428837 652.660 0000002 46.0071479903 13.8669438021 653.359 0000003 46.0071030110 13.8669447206 654.359
Convert ETRS89/WGS84 coordinates to Transverse Mercator/D96 via keyboard (ignoring height, use "--" to stop parsing options):
$ gk-slo -t 2 -- - 46.0071929697 13.8669428837 0 <Enter> 97000.000 412250.000 -46.572
Convert file VTG2225.flh (with ETRS89/WGS84 coordinates, see Example 1) to Gauss-Krueger/D48:
$ gk-slo -t 4 VTG2225.flh 0000001 76000.000 509000.000 342.896 0000002 76000.000 509005.000 342.396 0000003 76000.000 509010.000 341.896
If you compare the output with the original VTG2225.XYZ, you'll notice a small difference in heights. This is because the heights in VTG2225.flh were calculated using Helmert transformation but the default height calculation for "-t 4" is using geoid model.
Which height calculation you use for conversion depends also on input data. There are some recommended defaults for each type of conversion (see Usage).
If gk-slo was compiled with MinGW on Windows or is being used on Unix, you can process many files with one command.
Input files ∗.XYZ (DMV, Transverse Mercator/D96):
VTH0720.XYZ VTH0721.XYZ VTH0722.XYZ ...
Convert all files to ETRS89/WGS84 coordinates (with some debug info to see what's going on):
$ gk-slo -t 1 -r -d ∗.XYZ -o = Processing VTH0720.xyz Processing time: 4.854913 Processing VTH0721.xyz Processing time: 4.846438 Processing VTH0722.xyz Processing time: 4.846361 ...
Results of conversion for each file are written to a new file with an extension ".out":
VTH0720.XYZ.out VTH0721.XYZ.out VTH0722.XYZ.out ...
Input file RABA_20151031.shp (GERK, in ESRI shapefile format, Gauss-Krueger/D48), convert to ETRS89/WGS84 coordinates using affine transformation (with debug info):
$ gk-shp -t 9 -dd RABA_20151031.shp raba_conv.shp Processing RABA_20151031.shp Shapefile type: Polygon, number of shapes: 1601832 Shape: 678 (0.04%) ...
Result of conversion is a set of files according to ESRI shapefile format:
raba_conv.cpg raba_conv.dbf raba_conv.prj raba_conv.shp raba_conv.shx
In file raba_conv.prj an output projection (WGS84) is stored, so converted files can be easily opened by GIS programs.