[Gfoss] intersezione

Andrea Peri 2007 aperi2007 a gmail.com
Sab 30 Gen 2010 14:02:03 CET


Scusa,
Tra la prima e la seconda query che indichi non cedo differenze 
significative.

Premesso che e' non sono sicuro che considerare due edifici uguali se si 
intersecano sia una strategia valida per considerare due edifici uguali.

Anche perche' nessuno vieta che un edificio si intersechi con due o piu' 
edifici, a causa di imprecisioni, tolleranze e chissa' che altro.
Specie se operi su dati catastali, temo che avrai problemi di questo tipo.
E quindi alla fine i risultati potrebbero non essere confacenti alle tue 
attese,

Detto questo, la query che volevi impostare secondo me dovresti provare 
a farla tramite una subquery,
tipo quella che segue:

ipotizzando che ID sia il campo che identifica univocamente il singolo 
record (la chiave primaria)

SELECT
    A.FOGLIO,
    A.MAPPALE
FROM
    F1 A,
    ( SELECT M.ID from F1 M, F2 N WHERE ST_INTERSECTS(M.GEOM, N.GEOM)= 
TRUE ) AS B
WHERE
( A.ID <> B.ID)

La subquery seleziona gli edifici che si intersecano (e che te vuoi 
considerare uguali),
poi nella query principale escludi dal risultato gli identificativi di 
tali edifici.

Ciao,

Andrea.


ACQUATI CLAUDIO ha scritto:
> Andrea ho capito perfettamente il tuo ragionamento, ho però l'impressione
> che nel mio caso la situazione sia un pò diversa provo a spiegarti la mia
> esigenza:
> ho due livelli della cartografia catastale rappresentanti i fabbricati
> relativi ad epoche diverse (chiamiamoli per comodità F1 e F2) voglio avere
> foglio e mappale degli edifici che ci sono in F1 ma non ci sono più in F2 .
> Quindi con la seguente query pensavo appunto di trovare foglio e mappale da
> F1 dove le geometrie non si intersecano
>
> SELECT A.FOGLIO, A.MAPPALE
> FROM F1 A, F2 B
> WHERE ST_INTERSECTS(A.GEOM, B.GEOM)= FALSE
>
> Penso che sarebbe successo quello che tu dici se avessi fatto una cosa tipo
>
> SELECT *
> FROM F1 A, F2 B
> WHERE ST_INTERSECTS(A.GEOM, B.GEOM)= FALSE
>
> Che ne dici?
>
>
> Il giorno 28 gennaio 2010 01.18, Andrea Peri <aperi2007 a gmail.com> ha
> scritto:
>
>   
>> Non entro nel merito della tua necessita',
>> ma la differenza della quantita' dei risultati e' giusta .
>>
>> nel caso false, viene selezionato ogni elemento che non si interseca con almeno un altro elemento (non con tutti quanti) .
>>
>> Nel caso true, viene selezionato ogni elemento che si interseca con almeno 1 elemento.
>>
>> Da qui la differenza del risultato.
>>
>> Tieni presente che il confronto avviene sempre tra singoli elementi .
>>
>> Prendi ad esempio l'archivio dei confini comunali della tua regione.
>>
>> Per fare un caso emblematico: immagina di intersecarlo  con un altro archivio che sia la copia identica del primo archivio, ovvero
>> una altra copia dei confini comunali, evidentemente ogni comune si intersecherebbe sempre e con un unico elemento dell'altro archivio ovvero quello che rappresenta il medesimo comune.
>>
>> Pero' se chiedi al sistema di restituirti i records che
>> verificano
>> st_intersects(comuneA,comuneB) = false
>> per il primo comune dell'archivio A ti ritornera' tutti i records dall'altro archivio salvo quello corrispondente al medesimo comune.
>>
>> per tutti te li ritorna tutti meno 1.
>> e questo succedera' per tutti i records dell'archivio.
>>
>> per cui te ne ritorna molti.
>>
>> se invece gli chiedi di darti quelli che si intersecano (con risultato true) allora ne trova 1 solo per ogni singolo confronto.
>>
>> Da qui la differenza dei tempi e l'out-of-memory.
>>
>> Ciao,
>>
>>
>>     
>>> Db postgres, devo selezionare due attributi degli elementi di un livello che
>>> non si intersecano con gli elementi di un altro; eseguo quindi la seguente
>>>       
>>> query
>>> SELECT A.CAMPO1, A.CAMPO2
>>>       
>> >FROM TAB1 A, TAB2 B
>>     
>>> WHERE ST_INTERSECTS(A.GEOM, B.GEOM) = FALSE
>>>
>>> dopo più di mezz'ora che gira la query mi viene restituito l'errore "out of
>>>       
>>> memory...".
>>> Per prova invece di FALSE ho messo TRUE ed in due minuti ho avuto il
>>> risultato.
>>> Gli elementi che non si intersecano da un esame a vista sono pochi.
>>> In entrambe le tabelle ho creato l'indice sulle geometrie (vedi altro post).
>>>       
>>> E' forse sbagliato il metodo che ho utilizzato?
>>>       
>>
>> --
>> -----------------
>> Andrea Peri
>> . . . . . . . . .
>> qwerty àèìòù
>> -----------------
>>
>>
>> _______________________________________________
>> Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
>> Gfoss a faunalia.it
>> http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
>> Questa e' una lista di discussione pubblica aperta a tutti.
>> I messaggi di questa lista non rispecchiano necessariamente
>> le posizioni dell'Associazione GFOSS.it.
>>
>>     
>
>   



Maggiori informazioni sulla lista Gfoss