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?