2009-10-09 11 views
34

Sto provando a inserire un file SHP nel mio database PostGIS, i dati sono solo un po 'spenti. Penso che sia perché sto usando lo SRID sbagliato. I contenuti del file PRJ sono i seguenti:Come sai quale SRID usare per un file shp?

GEOGCS["GCS_North_American_1983", 
DATUM["D_North_American_1983", 
SPHEROID["GRS_1980",6378137.0,298.257222101]], 
PRIMEM["Greenwich",0.0], 
UNIT["Degree",0.0174532925199433]] 

A quale SRID corrisponde? E più in generale, come posso cercare lo SRID in base alle informazioni trovate nel file PRJ? C'è una tabella di ricerca da qualche parte che elenca tutti gli SRID e i loro equivalenti 'geogcs'?

Per avere un riferimento, qui è l'immagine di alcuni dei dati importati utilizzando srid=4269 (ho anche provato 4326 e ottenuto lo stesso risultato):

image http://img245.imageshack.us/img245/2545/4326sand.png

Il giallo è il mio dati importati dal SHP e lo sfondo proviene dagli openlayer (dall'amministratore di geodjango). Significa che sto usando lo SRID sbagliato, o questo margine di errore è appena previsto?

Il file SHP è da here

risposta

23

Per elaborare la risposta di synecdoche, lo SRID viene talvolta chiamato codice "EPSG". Il codice SRID/EPSG è di fatto una scorciatoia per le rappresentazioni Well-Known-Text delle proiezioni.

Si può fare una rapida ricerca sul tavolo SRID per vedere se è possibile trovare una corrispondenza esatta o simile:
SELECT srid, srtext, proj4text FROM spatial_ref_sys WHERE srtext ILIKE '%BLAH%'

sopra è stato trovato alla http://www.bostongis.com/?content_name=postgis_tut01.

È inoltre possibile cercare su spatialreference.org per questo tipo di cose. Lo strumento di ricerca è primitivo, quindi potresti dover utilizzare una ricerca su Google e specificare il sito, ma qualsiasi risultato ti mostrerà i contenuti del PRJ ESRI, l'INSERT SQL PostGIS e una serie di altre rappresentazioni.

Credo che il tuo PRJ e ': http://spatialreference.org/ref/sr-org/15/

11

I dati sembra essere NAD83, che ha uno SRID di 4269. Il database PostGIS ha una tabella spatial_ref_sys che è la tabella SRID di ricerca.

Se i dati hanno lo stesso aspetto con un SRID di 4269 (NAD83) e 4326 (WGS84), allora c'è qualcosa di sbagliato.

7

Go e scarica il GDAL utilities, l'ogrinfo (che sputare le informazioni di proiezione) e le utility ogr2ogr hanno un valore inestimabile.

James ha già fornito un collegamento a spatialreference.org. Questo aiuta a trovare informazioni di riferimento spaziali ... Presumo che hai caricato il spatial_ref_sys.sql quando hai prepared your postgis instance.

E ad essere onesti, non penso che il problema sia nella parte PostGIS delle cose.

Di solito mantengo i miei dati in SRID diversi nel mio db PostGIS. Tuttavia, ho sempre bisogno di per proiettare sull'output SRS. Stai visualizzando i riquadri pre-renderizzati di OpenStreetMap e scommetto che sono stati disegnati usando SRID 900913 (the Google Map's modified mercator projection che ora tutti usano per il rendering ).

La mia raccomandazione per voi è:

1- Impostare la proiezione nel codice di OpenLayers che soddisfa qualsiasi piastrelle che state leggendo da.

2.- Mantenere i dati nel database in qualsiasi SRID desiderato (purché sia ​​corretto, naturalmente).

3.- Assicurarsi che il server che si sta utilizzando per generare le immagini dai propri dati (ArcGIS Server, Mapserver, GeoServer o qualunque esso sia) è riproiettato allo stesso SRS.

Tutto corrisponderà.

Acclamazioni

1

Assicuratevi di dare un'occhiata a: http://www.epsg-registry.org/

utilizzare la query dalla opzione Filtro e inserire: North American Datum 1983.

Questo produce -> EPSG: 6269.

Spero che questo funzioni per voi.

5

modulo Python OSR Usa GDAL per determinare il codice:

from osgeo import osr 

srsWkt = '''GEOGCS["GCS_North_American_1983", 
DATUM["D_North_American_1983", 
SPHEROID["GRS_1980",6378137.0,298.257222101]], 
PRIMEM["Greenwich",0.0], 
UNIT["Degree",0.0174532925199433]]''' 

# Load in the projection WKT 
sr = osr.SpatialReference(srsWkt) 

# Try to determine the EPSG/SRID code 
res = sr.AutoIdentifyEPSG() 
if res == 0: # success 
    print('SRID=' + sr.GetAuthorityCode(None)) 
    # SRID=4269 
else: 
    print('Could not determine SRID') 
18

Prj2EPSG è un piccolo sito web volto a proprio questo problema; incolla il contenuto del PRJ e fa del suo meglio per trovare un EPSG corrispondente. Hanno anche un web service API. Non è una scienza esatta. Sembrano usare Lucene e il database EPSG per fare ricerche di testo per le partite.

+0

Grazie per la condivisione. Sto lavorando a un progetto in cui devo importare molti file GIS da più stati degli Stati Uniti e ottenere l'EPSG corretto con le loro API è stato molto utile. –

+0

Per qualche ragione, sono ancora confuso dopo aver letto questa risposta, ho un file prj e l'ho caricato su http://prj2epsg.org/search, ottenuto 26918, che non sembra un codice SRID ... –

+0

Sure è: http://spatialreference.org/ref/epsg/nad83-utm-zone-18n/ – Nelson

Problemi correlati