- Εξερεύνηση
- Θεματολόγιο
- Περιεχόμενο
- Δραστηριότητες - Αθλητισμός
- Εργασίες και έρευνα
- Καινοτομίες
- Υλικό (Hardware)
- Επικαιρότητα
- Μελέτες & Έργα
- Συλλογικότητες & Δράσεις
- 'Αρθρα και απόψεις
- Φύση και περιβάλλον
- Υποδομές και κατασκευές
- Γεωυπηρεσίες & GIS
- Ιδιαιτερότητες
- Επιστήμες & Τεχνολογία
- Κοινωνικά Φαινόμενα
- Λογισμικό
- Ιστοχώροι
- Μέσα επικοινωνίας & πολυμέσα
- Νομοθεσία
- Ιστορία
- Πολιτική και γεωπολιτική
- Πληροφορική - Διαδίκτυο
- Τουρισμός - Ταξίδια & διαδρομές
- Οικολογία και πράσινη ζωή
- Τέχνες & διαδραστικά
- Επιστημονικά πεδία
- Περιεχόμενο
- Κοινότητα
- Φόρουμ
- Ιστολόγια (blogs)
- Σύνδεσμοι
Μετατροπές γεωδαιτικών συντεταγμένων από και προς το ΕΓΣΑ87 (icoordstrans)
Μαρ
18
2010
Μετατροπές γεωδαιτικών συντεταγμένων από και προς το Ελληνικό γεωδετικό σύστημα αναφοράς (ΕΓΣΑ87). Σε μορφή μακροεντολών στο MS-Excel αλλά και σε λογισμικό μαζικής μετατροπής συντεταγμένων. Δωρεάν, ανοιχτού κώδικα και χρήσιμο.
Βιβλιοθήκη γεωδαιτικών μετατροπών συντεταγμένων (icoordstrans) του Στέφανου Κοζάνη
Μετατροπές φ, λ <-> X,Y ΕΓΣΑ87 (GR87), WGS84, κλπ. Έκδοση 0.4.0 - 3 Οκτωβρίου 2006
Την βιβλιοθήκη αυτή την ανέπτυξα με ιδίους πόρους στον ελεύθερό μου χρόνο για να χρησιμοποιηθεί σε ένα ερευνητικό πρόγραμμα της ΙΤΙΑς, ωστόσο πιστεύω πως είναι γενικότερα χρήσιμη και έτσι την βάζω εδώ για να την κατεβάσει όποιος θέλει. Επιπλέον δίνω τον κώδικα της βιβλιοθήκης, ώστε όποιος θέλει να την βελτιώσει, χρησιμοποιήσει σε άλλα προγράμματα κλπ.
Αν και θα ασχοληθώ με την συντήρηση και βελτίωση του κώδικα, θα ήταν πολύ ευχάριστο αν κάποιος που έχει εντοπίσει τυχόν λάθη ή έχει κάνει βελτιώσεις, συντάσσει Makefiles και installation scripts, κλπ μου τις έστελνε για τις εντάξω. Επιπλέον η σελίδα αυτή πρέπει να μεταφραστεί στα αγγλικά (ζητούνται εθελοντές!). Τέλος εθελοντική συμμετοχή χρειάζεται στην μεταφορά του Hatt (βλ. παρακάτω). Λεφτά δεν υπάρχουν, άλλωστε αυτά που δίνουμε σε αυτήν την ιστοσελίδα είναι δωρεάν, ωστόσο μπορώ να σας κάνω ιδιαίτερη μνεία στην ιστοσελίδα! Αν υπάρξει έντονη συμμετοχή θα σκεφτώ να τα βάλω όλα μέσα σε ένα CVS.
Η βιβλιοθήκη σε μορφή DLL
itranscoords.dll ( έκδοση 0.4.0 )
Κατεβάστε οπωσδήποτε το παραπάνω DLL αν θέλετε να χρησιμοποιήσετε κάποιο από τα προγράμματα ή Excel που δίνω στην συνέχεια. Θα το εγκαταστήσετε στο \Windows\System32 για να είναι διαθέσιμο για όλα τα προγράμματα. Το παραπάνω DLL είναι μεταγλωττισμένο με Visual C++, μπορείτε να το χρησιμοποιήσετε και σε δικά σας προγράμματα ή να το καλείτε π.χ. από φύλλα του Excel.
[19/5/2008] Μία μικρή μεταβολή στο δοκιμαστικό πρόγραμμα επιτρέπει την μαζική μετατροπή αρχείων τύπου text με συντεταγμένες..
[3/10/2006] Τέταρτη έκδοση. Προστέθηκε η προβολή HATT καθώς και η ΕΜΠ 3 μοιρών που έχει χρησιμοποιηθεί στην Ελλάδα. Υιοθετείται πλέον ο γενικός μετασχηματισμός Helmert με επτά παραμέτρους για την μεταφορά γεωκεντρικών συστημάτων (3 μετατοπίσεις, 3 στροφές και αλλαγή κλίμακας). Φτιάχτηκε Makefile το οποίο δοκιμάστηκε και μεταγλώττισε επιτυχώς την βιβλιοθήκη με gcc/Linux.
[20/9/2006] Τρίτη έκδοση. Προστέθηκαν τα συστήματα αναφοράς UTM ζώνες 29-37, ED50 (Κύπρος), ζώνη 6, ED50 (Ελλάδα), ζώνες 4 και 5, ED50 (Μέσο ευρωπαϊκό), ζώνες 0 έως 6.
[20/7/2006] Δεύτερη έκδοση, διορθώθηκαν κάποια λάθη που έδιναν λάθος στον μετασχηματισμό GR87<->WGS84, κάπου 10-20 μέτρα στο φ (~0.5 δευτερόλεπτο της μοίρας). Ο κώδικας αρχίζει να γίνεται πιοmodular ώστε να μπορούν να εισαχθούν εύκολα νέα συστήματα αναφοράς.
[10/2/2006] Πρώτη έκδοση.
Αυτόνομο πρόγραμμα μετατροπής συντεταγμένων
Αφού εγκαταστήσετε το DLL, μπορείτε να χρησιμοποιήσετε αυτό το πρόγραμμα για να το δοκιμάσετε:
test_program.zip (νέα έκδοση, 19/5/2008)
Ενδεχομένως να καλύψει τις ανάγκες σας για μετατροπή συντεταγμένων. Μπορείτε να κατεβάσετε τον κώδικα του (Delphi): delphi_source.zip ώστε μεταξύ άλλων να δείτε με ποιόν τρόπο θα μπορούσατε να χρησιμοποιήσετε την βιβλιοθήκη.
Excel
Για να «τρέξετε» το παρακάτω Excelόφυλλο, πρέπει προηγουμένως να έχετε εγκαταστήσει το αρχείο DLL (βλ. οδηγίες παραπάνω). Το αρχείο excel:
gr87transformsV2.xls [κατασκευασμένο πάνω στην έκδοση 0.4 - 3/10/2006]
Περιλαμβάνει 4 φύλλα με 4 μετατροπές (x, y -> x, y φ, λ -> φ, λ x, y -> φ, λ φ, λ -> x, y). Αρχικά κάντε Enable τα Macros σε τυχόν προειδοποίηση ασφαλείας. Δείτε τον κώδικα Visual Basic, πατώντας Alt+F11 για να πάρετε ιδέες. Μπορείτε να τροποποιήσετε τόσο τον κώδικα VBA όσο και τα φύλλα στις ανάγκες σας. Τα φύλλα δεν είναι κλειδωμένα, για αυτό προσέξτε τα κελιά με τις σχέσεις, καλού κακού κρατάτε κάπου μία original έκδοση. To excel σε ορισμένους υπολογιστές δεν καταφέρνει να «δει» το DLL, δεν μπορώ για την ώρα να καταλάβω πότε συμβαίνει αυτό. Το πιο πιθανό είναι να δουλέψει χωρίς πρόβλημα. Κάποια στιγμή ίσως φτιάξω μερικές μετατροπές με το Hatt ώστε να συμπεριληφθούν όλα τα δυνατά φύλλα χάρτη.
Η Excel VBA κάνει χρήση τύπων Double, Long Integer και τα περνάει στο DLL. Σε μελλοντικές 64 bit εκδόσεις, ίσως υπάρχουν προβλήματα συμβατότητας καθώς η VBA καθορίζει συγκεκριμένους τύπους. (Το πρόβλημα συγκεκριμένα είναι στα enum types της C και στο μέγεθος των ακεραίων που περνιούνται από την VBA).
Τεχνικά στοιχεία
Τα GR87, WGS84, βασίζονται στα ελλειψοειδή GRS80 / WGS84. Οι παράμετροι των ελλειψοειδών είναι
- Μεγάλος ημιάξονας 6378137 m (GRS80 & WGS84)
- e^2 = 1-(1-f)^2
- e'^2 = 1/((1-f)*(1-f))*e2;
- f = 1/298.257222101 (GRS80), 1/298.257223563 (WGS84)
- lambda0 = 0.418879020478639098 (λ0=24 μοίρες, αφορά την Εγκάρσια Μερκατορική Προβολή, προσαρμοσμένη στον Ελληνικό γεωγραφικό χώρο)
- x0 = 500000.000 (αφορά πάλι την Εγκάρσια Μερκατορική Προβολή)
- kappa0 = 0.9996 (κ0, αφορά πάλι την Εγκάρσια Μερκατορική Προβολή)
Τα ελλειψοειδή GRS80, WGS84 έχουν πολύ μικρή διαφορά που δίνει γύρω στα 0.1 mm διαφορά στον μικρό ημιάξονα. Μία πολύ καλή αναφορά υπάρχει στην wikipedia: http://en.wikipedia.org/wiki/Reference_ellipsoid, δες και http://en.wikipedia.org/wiki/GRS_80
Η προβολή όπως αναφέραμε είναι Εγκάρσια Μερκατορική Προβολή (ΕΜΠ - UTM - Universal Transverse Mercatoric).
H παράλληλη μετατόπιση του ελλειψοειδούς που εφαρμόζεται στο WGS84 ως προς το GR87, σύμφωνα με στοιχεία του ΥΠΕΧΩΔΕ:
(ΔΧ, ΔΥ, ΔΖ) = (-199.72, 74.03, 246.02) σε μέτρα.
Το GR87 (Ε.Γ.Σ.Α. 87) είναι προσαρμοσμένο ελλειψοειδές στην Ελλάδα ώστε να έχουμε τα μικρότερα δυνατά σφάλματα. Το δε WGS84, είναι γεωκεντρικό. Η μετατροπή μεταξύ WGS84 <-> ΕΓΣΑ87 είναι καλύτερη από μέτρο.
Το ED50 βασίζεται στο διεθνές ελλειψοειδές του Hayfford (a=6378388.155, f=1/297). Για την Κύπρο χρησιμοποιείται η ζώνη 6 με (ΔΧ, ΔΥ, ΔΖ) = (-104, -101, -140), για την Ελλάδα ζώνες 4 και 5 (ΔΧ, ΔΥ, ΔΖ) = (-83.8, -96.3, -115.7) και το μέσο Ευρωπαϊκό, ζώνες 0 - 6 (ΔΧ, ΔΥ, ΔΖ) = (-87, -98, -121). Οι αρχικές συντεταγμένες του ED50 ανά την Ευρώπη προέκυψαν από κλασσικούς τριγωνισμούς. Όταν εφαρμόζεται ωστόσο δορυφορική επίλυσηGPS, παρατηρούνται κατά τόπους διαφοροποιήσεις στις μετατοπίσεις των ελλειψοειδών (όπως παραπάνω). Επιπλέον τα ελλειψοειδή WGS84, ED50 δεν είναι παράλληλα μετατεθημένα και κανονικά ένας πλήρης μετασχηματισμός Helmert θα έπρεπε να εφαρμοστεί (λαμβάνοντας υπόψη στροφή και αλλαγή κλίμακας). Ωστόσο και με την απλή μετατόπιση που εφαρμόζεται , παραμένουμε στα όρια της ακρίβειας WGS84<->ED50, ελαφρά χειρότερη δηλαδή από ±10 μέτρα σε κάθε άξονα.
Το σύστημα ΕΜΠ 3 μοιρών καλύπτει την Ελλάδα σε τρεις ζώνες. kappa0=0.9999, x0=200000, phi0=34, lambda0=23.7163375. Η τιμή του phi0=34 μεταφράζεται ουσιαστικά σε ένα y0=-3762911.963.
Η προβολή του Hatt στο ελλειψοειδές του Bessel αφορά στην ουσία πάνω από 100 τοπικά συστήματα συντεταγμένων σε διάφορα φύλλα χάρτη. Μία πλήρη μεταφορά Helmert εφαρμόζεται, δίνοντας στροφή ε=17.6 ppm (=3"63) και αλλαγή κλίμακας dS=15.9 ppm. Για την εφαρμογή της μεταφοράς από το παλιό σύστημα στο νέο δεν βρήκα επαρκή τεκμηρίωση πλην των σημειώσεων του ΟΚΧΕ για το ΕΓΣΑ87. Ειδικά για την στροφή την εφάρμοσα στις συντεταγμένες του κεντρικού σημείου του ΕΓΣΑ87 (βάθρο Διονύσου), οπότε αναλύεται στις τρεις παρακάτω συνιστώσες:
RX =-12.664 ppm
RY = -5.620 ppm
RZ = -10.854 ppm
Από δοκιμές που έκανα σε συντεταγμένες στα άκρα χαρτών της ΓΥΣ, οι μετατροπές μου απέχουν έως 0.1"-0.3" από τις αντίστοιχες της ΓΥΣ, στα όρια της μειωμένης ακρίβειας που δίνει ο μετασχηματισμός με τις τρεις μετατοπίσεις, την αλλαγή κλίμακας και τις τρεις στροφές. Λόγω της ακρίβειας του μετασχηματισμού, οι μετασχηματισμένες συντεταγμένες (π.χ. χ,ψHatt ->X,YΕΓΣΑ87) δεν χρησιμοποιούνται σε γεωδαιτικές ή και τοπογραφικές εργασίες ακριβείας αλλά μπορούν να χρησιμοποιηθούν για εντοπισμό σε χάρτη, κλπ. Μπορείτε να δείτε τον κώδικα για να έχετε μία εικόνα πως γίνεται η μετατροπή. Οποιοσδήποτε θα μπορούσε να ελέγξει τις παραμέτρους της μετατροπή Hatt, να με βοηθήσει να ρυθμίσω σωστά τις παραμέτρους μεταφοράς καθώς και να με βοηθήσει στην τεκμηρίωση για τις παραμέτρους μεταφοράς (Hatt και ED50) είναι ευπρόσδεκτος.
Κώδικας (source code)
Ο κώδικας είναι standard C προσαρμοσμένος να compile σε Visual C++ (φτιάξτε ένα άδειο dll project σε VC++ και προσθέστε όλα τα *.h, *.cpp, *.def, έχει δοκιμαστεί σε VC++ 6). Με ελάχιστες τροποποιήσεις κομπιλάρει σε οποιοδήποτε compiler, μάλιστα θα βρείτε ένα Makefile το οποίο φτιάχνει μία shared lib με gcc καθώς και ένα test program. Το κομμάτι αυτό (Makefile - Linux) θέλει λίγη δουλίτσα ακόμα για να είναι πλήρως χρησιμοποιήσιμο (αν θέλετε να βοηθήσετε σε αυτό το σημείο, η βοήθεια θα είναι ευπρόσδεκτη!). Το αρχείο με τον πηγαίο κώδικα (source code):
Περιλαμβάνει το κύριο αρχείο πηγαίου κώδικα (main.cpp) καθώς και ένα .def αρχείο για τις συναρτήσεις που γίνονται export (για την VC++). Αν δεν περιλάβετε το .def θα πρέπει να ορίσετε τις συναρτήσεις με την macro DLLAPI, ωστόσο αυτό δεν είναι καλή ιδέα, διότι τα ονόματα των συναρτήσεων γίνονται τότε decorated.
Interface
Οι παρακάτω συναρτήσεις είναι για την ώρα υλοποιημένες. Θα καταβληθεί προσπάθεια ώστε το interface να αποκτήσει γενικότερη μορφή. Οι συναρτήσεις επιστρέφουν έναν ακέραιο αριθμό. Μηδενικό αποτέλεσμα σημαίνει υπολογισμός χωρίς κάποιο σφάλμα κατά την εκτέλεση. Μη μηδενικό αποτέλεσμα σημαίνει κάποιο errno<>0, μπορείτε να λάβετε αφορμή από μή-μηδενική τιμή ώστε να σηκώσετε exception. Οι επιστρεφόμενες τιμές γίνονται μέσω κλήσης κατά αναφορά, περνώντας pointer. Σε άλλες γλώσσες προγραμματισμού, αυτό αντιστοιχεί π.χ. σε var για την Pascal, ByRef για την Visual Basic, κλπ. Το τι κάνουν οι παρακάτω συναρτήσεις είναι προφανές από το όνομά τους. Μπορείτε να δείτε τους κώδικες Pascal, Excel που έχω δώσει για να δείτε πως χρησιμοποιούνται οι παρακάτω συναρτήσεις:
αρχείο icoordstrans.h
Τα GSTYPE είναι αριθμητικοί τύποι των Datum και λαμβάνουν τις παρακάτω ακέραιες τιμές:
typedef enum gstype {
GS_GR87 = 0,
GS_WGS84 = 1,
GS_ED50_CYPRUS = 2,
GS_ED50_GREECE = 3,
GS_ED50_MEANEUROPE = 4,
GS_GR_BESSEL = 5
} GSTYPE;
Ενώ τα PCTYPE αφορούν DATUM και προβολή:
typedef enum pctype {
PC_GR87 = 0,
PC_UTM_ZONE29 = 1,
PC_UTM_ZONE30 = 2,
PC_UTM_ZONE31 = 3,
PC_UTM_ZONE32 = 4,
PC_UTM_ZONE33 = 5,
PC_UTM_ZONE34 = 6,
PC_UTM_ZONE35 = 7,
PC_UTM_ZONE36 = 8,
PC_UTM_ZONE37 = 9,
PC_ED50_CYPRUS_ZONE6 = 10,
PC_ED50_GREECE_ZONE4 = 11,
PC_ED50_GREECE_ZONE5 = 12,
PC_ED50_MEANEUROPE_ZONE0 =13,
PC_ED50_MEANEUROPE_ZONE1 =14,
PC_ED50_MEANEUROPE_ZONE2 =15,
PC_ED50_MEANEUROPE_ZONE3 =16,
PC_ED50_MEANEUROPE_ZONE4 =17,
PC_ED50_MEANEUROPE_ZONE5 =18,
PC_ED50_MEANEUROPE_ZONE6 =19,
PC_GR_HATT_ATHINA_CHALKIS = 20,
PC_GR_HATT_ATHINA_LAVRION = 21,
PC_GR_HATT_AEGINA = 22,
PC_GR_HATT_NEA_PSARA = 23,
PC_GR_HATT_THESSALONIKI = 24,
PC_GR_HATT_GIANNITSA = 25,
PC_GR_UTM3_WEST = 26,
PC_GR_UTM3_CENTRAL = 27,
PC_GR_UTM3_EAST = 28
} PCTYPE;
Έχω περιλάβει μερικά βασικά φύλλα χάρτη της Hatt που περιλαμβάνουν περιοχές της Αθήνας και της Θεσσαλονίκης. Για τα υπόλοιπα 130 κάπου φύλλα χάρτη, ο χρήστης μπορεί να χρησιμοποιήσει τις συναρτήσεις για Hatt <-> άλλο σύστημα και να εισάγει ο ίδιος το κέντρο φύλλο χάρτη.
Αποποίηση ευθυνών
Ο κατασκευαστής του λογισμικού και των βιβλιοθηκών, Στέφανος Κοζάνης, καθώς και το Εθνικό Μετσόβιο Πολυτεχνείο το οποίο παρέχει το παραπάνω υλικό μέσα από τις ιστοσελίδες του αποποιούνται από κάθε ευθύνη για τυχόν προβλήματα και ζημιές πάσης φύσεως που μπορεί να ανακύψουν από την εφαρμογή του παραπάνω λογισμικού / βιβλιοθηκών.
Άδεια χρήσης
Δικαιώματα, Copyright (c) 2006 Στέφανος Κοζάνης. Το λογισμικό είναι κοινής χρήσης (Public Domain) και επιτρέπεται να αναπαραχθεί, τροποποιηθεί και διανεμηθεί με κάθε τρόπο και οπουδήποτε χωρίς όρους. Επιτρέπεται η εμπορική διάθεσή του αυτούσια ή ως τμήμα μεγαλύτερου έργου χωρίς να απαιτείται η άδεια του συγγραφέα, αυτό όμως δεν αποτρέπει την ταυτόχρονη ελεύθερη διανομή του.
Επικοινωνία
Στέφανος Κοζάνης, S.Kozanis@itia.ntua.gr
| Συνημμένο | Μέγεθος |
|---|---|
| egsa87icoordstrans.zip | 273.49 KB |



Σχόλια
Υποβολή νέου σχολίου