utilizzando GDAL / OGR api per leggere dati vettoriali (shapefile) - Come?
Domanda
Sto lavorando ad un'applicazione che coinvolge alcune cose gis. Ci sarebbero alcuni file .shp da leggere e tracciare su uno schermo aperto. Lo schermo aperto corrente sta usando la proiezione ortografica impostata da glOrtho ()
e sta già visualizzando una mappa usando le coordinate di un semplice file di testo ..
Ora la mappa da tracciare deve essere letta da un file di forma.
Ho i seguenti dubbi:
-
Come usare la proiezione WGS84 del file .shp (come letto dal file .prj del file shapefile, formato WKT) nella mia proiezione glOrtho esistente ... c'è qualche conversione da fare? e in cosa differisce da ciò che glOrtho () imposta? fondamentalmente come usare queste informazioni?
-
La mia applicazione deve essere configurata in modo tale da poter conoscere l'esatto lat / long di un punto sulla mappa. per es. se sto volando su X city, potrebbe essere recuperato il suo lat / long corretto. So che questo può essere fatto usando utilis / API di opensource come GDAL / OGR ma sono incasinato poiché la documentazione di queste API non sta entrando nel mio capo. Ho provato a trovare alcuni programmi di esempio c ++ ma non sono riuscito a trovarne uno.
-
Ho già scritto la mia logica per leggere le coordinate da un file di forma contenente punti / polilinea / poligono (usando C-shapelib) e tracciato sulla mia schermata iniziale. Ho trovato un codice di esempio OGR in doc da leggere uno shapefile POINTS ma nessuno per lo shapefile POLYGON. E il problema è che questa applicazione deve essere così dinamica che, caricando lo shapefile, dovrebbe impostare correttamente la proiezione dello schermo aperto a seconda della proiezione del file .shp che viene letto. ad es. WGS84, LCC, EVEREST MODIFICATO ... ecc. come raggiungere questo obiettivo da OGR api?
Fornisci cortesemente i tuoi suggerimenti su questo problema. Sono davvero entusiasta di farlo funzionare, ma non sto iniziando nel modo giusto.
Soluzione
-
Il rendering di Shapefile è abbastanza semplice in OpenGL. Potrebbe essere necessario " shapelib ", una libreria di analisi del file di forma gratuita in C (Google it). Utilizza GL_POINTS per shapefile dei punti, GL_LINES per file di forma della linea e GL_LINE_LOOP per file di forma del poligono. Imposta le coordinate del riquadro di selezione su Orto.
-
Quello che leggi dal file .prj sono le informazioni di proiezione. WGS84 ti dà le corde lat / long (sferiche). Ma il tuo sistema di visualizzazione è 2D (rettangolare). Quindi, è necessario convertire i cordoni 3D sferici in cordoni rettangolari 2D (questo è il significato di Proiezione). I tipi di proiezione sono numerosi, a seconda dell'area di interesse sul globo (ricordare che la proiezione distorce l'area / forma / dimensione delle caratteristiche). i tipi vanno da Policonico, Everest modificato, NAD, UTM, ecc.,
-
Se hai semplicemente bisogno di WGS84, leggi i coord del riquadro di selezione del tuo file .sh e assegnali a glOrtho. Se si dispone di una proiezione (ad esempio: -UTM), quindi si convertono i coord del riquadro di selezione in coorde di proiezione e quindi si assegnano i glord appena proiettati a glOrtho. Per convertire lat / long in qualsiasi Proiezione, potresti aver bisogno di librerie di proiezione come " Projlib " o " GeotransEngine " e ecc.
Per ulteriori chiarimenti potete contattarmi su dgplinux @ y a h o o. c o m
Altri suggerimenti
Per favore, leggi il Tutorial API OGR dove puoi imparare come leggere i dati vettoriali da fonti come Shapefile. Successivamente, controlla il Tutorial sulle proiezioni OGR dove puoi imparare come utilizzare le informazioni sulla proiezione e lo spazio sistema di riferimento letto da fonti OGR.
GDAL / OGR ha tutto il necessario per caricare un file vettoriale, quindi convertire tutte le coordinate. Comprendo la tua frustrazione per GDAL poiché la documentazione non è la migliore. Se vuoi una buona introduzione all'uso dell'API, guarda gdalinfo.c e ogrinfo.cpp nell'albero di sovversione GDAL. La fonte può essere vista su https://svn.osgeo.org/gdal/trunk/gdal.
Se ciò non aiuta, ho due esempi di base che uso per analizzare le informazioni vettoriali e fare la conversione delle coordinate. Sono davvero cattivi, ma possono aiutare a capire il punto.
Infine, se non si ha familiarità con i formati GIS, prenderei in considerazione la lettura dell'introduzione di ArcGIS qui in Guide
/ Proiezioni di mappe
. Sono in grado di competere con esperti, nonostante nessuna formazione cartografica grazie a queste guide. Un'altra buona fonte è Wikipedia.
In caso di dubbi, scegli una griglia UTM con cui vuoi restare e usa UTM come sistema di coordinate. Utilizza X (Easting), Y (Northing) e Z (Altitude). L'unica chiave è scegliere una singola griglia UTM e assicurarsi che tutte le coordinate lo utilizzino come riferimento. UTM è facile da testare con il codice in quanto ci sono molte guide online. Puoi anche trovare il codice di conversione usando OGR / GDAL o altre risorse. Altri sistemi di coordinate proiettati sono utili e potrebbero essere migliori, ma vorrei iniziare con questo.
Infine, se tutto il resto fallisce, dai un'occhiata a NGA GeoTrans. Questo è un ottimo strumento di test.