[Gfoss] (senza oggetto)

>SELECT ST_Distance_Sphere(
>    ST_Transform(ST_PointFromText('POINT(1626216 4855458)', 3003), 4326),
>    ST_Transform(ST_PointFromText('POINT(1626216 4855459)', 3003), 4326)
>);

> st_distance_sphere
>--------------------
>
>    1.0009418016345

La stessa query la applico sul mio pg ed ottengo un risultato leggermente, ma inequivocabilmente e decisamente, differente.

1,0009418011511229

Andrea Peri
. . . . . . . . .
qwerty àèìòù

Il 19 novembre 2009 19.38, Andrea Peri <aperi2007@gmail.com> ha scritto:

SELECT ST_Distance_Sphere(
   ST_Transform(ST_PointFromText('POINT(1626216 4855458)', 3003), 4326),
   ST_Transform(ST_PointFromText('POINT(1626216 4855459)', 3003), 4326)
);

st_distance_sphere
--------------------

   1.0009418016345

La stessa query la applico sul mio pg ed ottengo un risultato leggermente,
ma inequivocabilmente e decisamente, differente.

1,0009418011511229

a me viene uguale a niccolo

ciao
Luca

Che configurazione usi ?

La mia e' debian X86_64 con postgres 8.4.0 + postgis 1.4.0 e geos trunk (dovrebbe essere una 3.2.+)
il tutto compilato dai sorgenti a 64 bit.

Sospetto che la differenza provenga dalla libreria geos.

Luca Delucchi ha scritto:

Il 19 novembre 2009 19.38, Andrea Peri <aperi2007@gmail.com> ha scritto:
  

SELECT ST_Distance_Sphere(
   ST_Transform(ST_PointFromText('POINT(1626216 4855458)', 3003), 4326),
   ST_Transform(ST_PointFromText('POINT(1626216 4855459)', 3003), 4326)
);
      st_distance_sphere
--------------------

   1.0009418016345
      

La stessa query la applico sul mio pg ed ottengo un risultato leggermente,
ma inequivocabilmente e decisamente, differente.

1,0009418011511229

a me viene uguale a niccolo

ciao
Luca

On Thu, Nov 19, 2009 at 07:38:34PM +0100, Andrea Peri wrote:

>SELECT ST_Distance_Sphere(
> ST_Transform(ST_PointFromText('POINT(1626216 4855458)', 3003), 4326),
> ST_Transform(ST_PointFromText('POINT(1626216 4855459)', 3003), 4326)
>);
> st_distance_sphere
>--------------------
>
> 1.0009418016345

>

La stessa query la applico sul mio pg ed ottengo un risultato leggermente,
ma inequivocabilmente e decisamente, differente.

1,0009418011511229

Quella è la seconda prova che ho fatto, che comprende la
ST_Transform(point, 4326). Anche a me in quel caso torna
giustamente 1 metro circa.

L'errore c'era senza ST_Transform(), in quel caso
ST_Distance_Sphere() non funziona.

--
Niccolo Rigacci
Firenze - Italy

Il problema e’ che il valore che ritorna a me e’ differente da quello che il tuo PG ritorna.
:frowning:

Ora mi tocca scervellarmi per scoprire quale cavolo di libreria e’ in difetto.

Il giorno 20 novembre 2009 07.16, Niccolo Rigacci <niccolo@rigacci.org> ha scritto:

On Thu, Nov 19, 2009 at 07:38:34PM +0100, Andrea Peri wrote:

SELECT ST_Distance_Sphere(
ST_Transform(ST_PointFromText(‘POINT(1626216 4855458)’, 3003), 4326),
ST_Transform(ST_PointFromText(‘POINT(1626216 4855459)’, 3003), 4326)
);
st_distance_sphere

1.0009418016345

La stessa query la applico sul mio pg ed ottengo un risultato leggermente,
ma inequivocabilmente e decisamente, differente.

1,0009418011511229

Quella è la seconda prova che ho fatto, che comprende la
ST_Transform(point, 4326). Anche a me in quel caso torna
giustamente 1 metro circa.

L’errore c’era senza ST_Transform(), in quel caso
ST_Distance_Sphere() non funziona.


Niccolo Rigacci
Firenze - Italy

Andrea Peri
. . . . . . . . .
qwerty àèìòù

Il problema e' che il valore che ritorna a me e' differente da quello che il
tuo PG ritorna.

considera che ST_Transform in questo caso opera una trasformazione di
elissoide e quindi utilizza delle formule approssimate, la differenza
(0.0000005 mm circa ...) può essere dovuta anche all'archittettura hardware
(32 vs 64 bit) oppure a dei parametri di trasformazione lievemente diversi.

Comunque la differenza è molto ma molto più piccola di qualsiasi errore di
misura.

Ciao,

Stefano

Infatti e' senz'altro cosi',

Pero' il computer e' sostanzialmente una macchina deterministica e
questo significa che a input uguali devono corrispondere risposte uguali.
Per cui questa differenza di risultato, per piccola che sia e' un
qualcosa che in analoghe condizioni si ripresentera' sempre.
Ed e' interessante capire quali siano i parametri che fanno divergere il
risultato.

Comunque e' molto probabile che la differenza sia dovuta alla differenza
di architettura.
infatti facendo la prova su un'altra configurazione Linux sempre a 64 bit.

Ottengo il medesimo risultato ovvero
1,0009418011511229

Preciso all'ultimo decimale con il risultato della prova su Debian 64bit.

Sebbene la architettura su cui faccio questa seconda prova pur essendo
sempre una linux a 64 bit sia sensibilmente differente e la Geos era la
3.1.1 released.

Per ora gli indizi vanno tutti verso una differenza di risultati tra 32
e 64 bit.
Probabilmente legato anche alla differente precisione con cui possono
essere effettuati i calcoli.
Mi domando se esiste un metodo per riportare i calcoli di una
configurazione a 64bit alla precisione di una architettura a 32bit,
magari settando qualche parametro di configurazione su Postgis ....

La riproducibilita' del risultato e' un traguardo.

Stefano Salvador ha scritto:

Il problema e' che il valore che ritorna a me e' differente da quello che il
tuo PG ritorna.
    
considera che ST_Transform in questo caso opera una trasformazione di elissoide e quindi utilizza delle formule approssimate, la differenza (0.0000005 mm circa ...) può essere dovuta anche all'archittettura hardware (32 vs 64 bit) oppure a dei parametri di trasformazione lievemente diversi.

Comunque la differenza è molto ma molto più piccola di qualsiasi errore di misura.

Ciao,

Stefano