[Gfoss] Tabelle

Andrea Peri peri.rtoscana a gmail.com
Lun 3 Mar 2008 11:16:43 CET


Scusa, ma devo contraddirti decisamente.

Il file .shx non ci entra niente con l'abbinamento tra geometria e attributi.
Esso contiene solo l'indicizzazione spaziale, e qui non centra,
perche' l'indicizzazione spaziale non rappresenta il legame tra
attributi nel dbf e geometria nel .shp.

Prova ne e' che in assenza del file .shx e' sempre possibile
recuperare il corretto abbinamento tra dbf e shp. Al riguardo qualche
mese fa' vi fu' un thread su questo argomento e su un programmino che
si chiamava "shapecheck".

Tornando a noi: leggiti le specifiche esri dello shapefile.
In essa sono contenute esattamente le descrizioni su come si deve procedere.

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

>An ESRI shapefile consists of a main file, an index file, and a dBASE
table. The main
>file is a direct access, variable-record-length file in which each
record describes a shape
>with a list of its vertices. In the index file, each record contains
the offset of the
>corresponding main file record from the beginning of the main file.
The dBASE table
>contains feature attributes with one record per feature. The
one-to-one relationship
>between geometry and attributes is based on record number. Attribute
records in the
>dBASE file must be in the same order as records in the main file.

Come e' riportato dalle suddette specifiche la relazione tra geometria
e attribute e' basata ssul record number (numero del record)
E nei dbf il record number e' il numero di posizione nel file DBF.
Ergo, il primo record del dbf si associa alla prima geometria e cosi' via.

Anche il concetto del posizionamento a piacere, non centra niente.
Ogni record del file .dbf ha lunghezza fissa, contenuta nell'header
del file dbf.
per cui se vuoi posizionarti nel record numero 27 e nell'header e'
riportato che un record e' lungo 150 byte, basta fare una
moltiplicazione e sai quanti bytes saltare.

Questo pero' , ribadisco, non vuol dire niente.

>  Quindi il "modo giusto" per interpretare gli shapefiles è il seguente:
>  - si legge la riga N dello DBF e si recuperano gli attributi informativi
>  - se legge la riga N dello SHX
>  - quindi si "salta" [fseek() o anologhi] nello SHP all'offset indicato
>    sullo SHX e si recupera l'entità geometrica corrispondente
>
>  Ergo non esiste nessun vincolo tale da imporre una corrispondenza
>  1:1 tra le righe del DBF e quelle dello SHP, almeno "da specifica ESRI".

Invece e' proprio l'opposto.
Deve esserci una corrispondenza 1:1 se si vuole restare sullo
standard, altrimenti si
crea un qualcosa che poi non viene letto correttamente da altri programmi.

e maggior riprova riporto quest'altra frasettina sempre presente nel
doc. di specifiche esri.

>The table must contain one record per shape feature.
>The record order must be the same as the order of shape features in
the main (*.shp)

Mi pare chiaro.


Andrea.


2008/3/3, Alessandro Furieri <a.furieri at lqt.it>:
>
>
> giusto amor di precisione, non è proprio esattamente così ...
>  a) il DBF ha una struttura con record a lunghezza fissa, e dichiara
>  nell'header
>     sia quanti record contiene che quale è la lunghezza record in bytes;
>     quindi è molto facile sia leggerlo sequenzialmente oppure posizionarsi
>     su di un record arbitrario a piacere
>  b) lo SHP ha una struttura con entità a lunghezza variabile [una polilinea
>     con 2 vertici occupa ovviamente molto meno spazio di una con 1.000
>     vertici]
>  c) poi però la "terna" shapefile prevede anche lo SHX, che ha una
>     lunghezza record fissa, e che contiene l'OFFSET associato all'entità
>     geometrica contenuta nello SHP
>  ============================
>  Quindi il "modo giusto" per interpretare gli shapefiles è il seguente:
>  - si legge la riga N dello DBF e si recuperano gli attributi informativi
>  - se legge la riga N dello SHX
>  - quindi si "salta" [fseek() o anologhi] nello SHP all'offset indicato
>    sullo SHX e si recupera l'entità geometrica corrispondente
>
>  Ergo non esiste nessun vincolo tale da imporre una corrispondenza
>  1:1 tra le righe del DBF e quelle dello SHP, almeno "da specifica ESRI".
>

-- 
~~~~~~~~~~~~~~~~~
§       Andrea              §
§         Peri                 §
~~~~~~~~~~~~~~~~~


Maggiori informazioni sulla lista Gfoss