Vergleich von Double Precision Attribut

Vergleich von Double Precision Attribut

am 13.01.2007 23:28:48 von Ralf Weber

Hallo,

ich verwende die OpenGeoDB für die Ermittlung von Koordinaten von
Orten.

lon,lat sind Attribute vom Typ DOUBLE PRECISION
loc_id ist Integer

Ich möchte mit folgendem Query Orte im Umkreis von gegebenen
Koordinaten finden.
Query 1:

SELECT c.loc_id FROM geodb_coordinates AS c WHERE (c.lon>12.528 AND
clon<12.812 AND c.lat>50.71 AND c.lat<50.89)

Als Ergebnis bekomme ich einige IDs ausgegeben. Was ich jedoch nicht
verstehe, ist wieso ein (oder mehrere?) Orte fehlen. Ich habe das
anhand meines Ortes ausprobiert. Innerhalb dessen Umkreis müsste der
Ort mit der ID 21934 liegen. Dieser hat auch einen Eintrag in der DB,
was ich mit folgendem Query überprüft habe:

SELECT c.loc_id,lon,lat FROM geodb_coordinates AS c WHERE
cloc_id=3D21934

das ergibt:

loc_id =3D 21934
lon =3D 12.7167 (Längengrad)
lat =3D 50.7833 (Breitengrad)

Diese Längen- und Breitengrade liegen eigentlich innerhalb des
Bereiches meines Query 1 und dennoch wird der Ort aber nicht mit
gefunden. Habe ich bei dem Vergleich im Query 1 noch irgendwo einen
Denkfehler?

MfG, Ralf...

Re: Vergleich von Double Precision Attribut

am 14.01.2007 01:30:37 von Axel Schwenke

RalfWeb1@gmx.de wrote:

> ich verwende die OpenGeoDB für die Ermittlung von Koordinaten von
> Orten.
>
> lon,lat sind Attribute vom Typ DOUBLE PRECISION
> loc_id ist Integer

Exakter Tabellenaufbau? (SHOW CREATE TABLE)

> SELECT c.loc_id FROM geodb_coordinates AS c WHERE (c.lon>12.528 AND
> c.lon<12.812 AND c.lat>50.71 AND c.lat<50.89)
>
> Als Ergebnis bekomme ich einige IDs ausgegeben. Was ich jedoch nicht
> verstehe, ist wieso ein (oder mehrere?) Orte fehlen. Ich habe das
> anhand meines Ortes ausprobiert. Innerhalb dessen Umkreis müsste der
> Ort mit der ID 21934 liegen. Dieser hat auch einen Eintrag in der DB,
> was ich mit folgendem Query überprüft habe:
>
> SELECT c.loc_id,lon,lat FROM geodb_coordinates AS c WHERE
> c.loc_id=21934
>
> loc_id = 21934
> lon = 12.7167 (Längengrad)
> lat = 50.7833 (Breitengrad)

> Habe ich bei dem Vergleich im Query 1 noch irgendwo einen
> Denkfehler?

Normal nicht. Für mich funktioniert das auch:

mysql> create table c (id int, lon double, lat double);
Query OK, 0 rows affected (0,01 sec)

mysql> insert into c values (21934, 12.7167, 50.7833);
Query OK, 1 row affected (0,00 sec)

mysql> select * from c where lon>12.528 AND lon<12.812 AND lat>50.71 AND lat<50.89;
+-------+---------+---------+
| id | lon | lat |
+-------+---------+---------+
| 21934 | 12.7167 | 50.7833 |
+-------+---------+---------+
1 row in set (0,00 sec)


Mal ganz dumm gefragt: mit welchem Tool setzt du denn die Query auf
die Datenbank ab? Nicht zufälligerweise mit phpMyAdmin?


XL

Re: Vergleich von Double Precision Attribut

am 14.01.2007 12:55:26 von Ralf Weber

Hallo Axel,
zu deinem Posting (Sun, 14 Jan 2007 01:30:37):

>> ich verwende die OpenGeoDB für die Ermittlung von Koordinaten von
>> Orten.
>>
>> lon,lat sind Attribute vom Typ DOUBLE PRECISION
>> loc_id ist Integer
>
> Exakter Tabellenaufbau? (SHOW CREATE TABLE)

Da sich das Problem geklärt hat gebe ich diesen jetzt nicht an.
Bei Interesse nachschauen unter:

http://www.wonderer.de/temp/display_doc_geodb.htm

> Mal ganz dumm gefragt: mit welchem Tool setzt du denn die Query auf
> die Datenbank ab? Nicht zufälligerweise mit phpMyAdmin?

Ja, ich hatte mit phpMyAdmin gearbeitet. Habe es jetzt über die
Kommandzeile von MySQL versucht und da bekomme ich das korrekte Ergebnis.
Auch beim Test mit mysql_query mit PHP bekomme ich das richtige Ergebnis.

Danke für die Hilfe!

MfG, Ralf...

PS & off-Topic: Wo liegt das Problem im phpMyAdmin?

Re: Vergleich von Double Precision Attribut

am 22.01.2007 09:53:31 von Markus Mann

Ralf wrote:
>
> PS & off-Topic: Wo liegt das Problem im phpMyAdmin?

Nunja, du hast ja eines davon kennengelernt: Es liefert zum Teil flasche
Ergebnisse.

Ciao.
--
Markus Mann
];-)