Schrift
[thread]3713[/thread]

geokoordinaten (Seite 2)



<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
esskar
 2006-09-12 21:27
#34639 #34639
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ein Kreis ist auch eine Ellipse :)
Froschpopo
 2006-09-12 21:51
#34640 #34640
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
und wie sieht jetzt die Elipsengleichung aus? Am liebsten wäre mir ja ein mysql-Query, der nur noch größer-als, kleiner-als ausgibt.\n\n

<!--EDIT|Froschpopo|1158084458-->
Thorium
 2006-09-12 22:46
#34641 #34641
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Elipse ist nicht das, was du willst. Der Tipp mit der Elipse entstand aus einem Missverständnis..
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
Froschpopo
 2006-09-13 01:04
#34642 #34642
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich habe jetzt folgendes:

Code: (dl )
1
2
3
4
5
6
my $B1 = 7.2167121725093;
my $L1 = 51.4840049423119;
my $erdradius = 6378.388;

my $prepare_sth = "select primarykey, name from defaultusers where status = 'N' and ";
$prepare_sth .= "(ACOS((SIN(RADIANS($B1))*SIN(RADIANS(lat))) + (COS(RADIANS($B1))*COS(RADIANS(lat))*COS(RADIANS(lon)-RADIANS($L1)))) * $erdradius) <= 100";

komme aber irgendwie mit dem Ergebnis nicht zurecht. heraus kommt immer eine Zahl zwischen 7000 und 8500!\n\n

<!--EDIT|Froschpopo|1158097976-->
jan
 2006-09-13 02:21
#34643 #34643
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
my $get_insertions = $dbh->prepare("SELECT `inserate`.*, `users`.`postleitzahl`, `users`.`vorname`, `plz_coords`.`stadt`, (6378.137 * ACOS(sin(`plz_coords`.`lat_rad`) * SIN(?) + COS(`plz_coords`.`lat_rad`) * COS(?) * cos(? - `plz_coords`.`long_rad`))) AS `distance` FROM `users` `users`, `inserate`, `plz_coords` WHERE `users`.`postleitzahl` = `plz_coords`.`plz` AND `inserate`.`user` = `users`.`id` AND `inserate`.`art` = ? AND (6378.137 * ACOS(sin(`plz_coords`.`lat_rad`) * SIN(?) + COS(`plz_coords`.`lat_rad`) * COS(?) * cos(? - `plz_coords`.`long_rad`))) < 50 ORDER BY distance;");

$get_insertions->execute($$coordsref{'lat_rad'}, $$coordsref{'lat_rad'}, $$coordsref{'long_rad'}, ($$params{'art'} eq 'biete' ? 'suche' : 'biete'), $$coordsref{'lat_rad'}, $$coordsref{'lat_rad'}, $$coordsref{'long_rad'});


schmeiß raus, was bei dir nicht zutrifft, das ist aus einem alten projekt von mir und funktionierte eigentlich soweit wunderbar.

hier das sql für die plz_coords
Code: (dl )
1
2
3
4
5
6
7
8
9
10
CREATE TABLE plz_coords (
 plz varchar(5) NOT NULL default '',
 stadt varchar(255) NOT NULL default '',
 lat_rad float NOT NULL default '0',
 long_rad float NOT NULL default '0',
 lat float NOT NULL default '0',
 `long` float NOT NULL default '0',
 PRIMARY KEY  (plz)
) TYPE=MyISAM;



frag mich aber nicht, wie ich zu der umrechnung von lat zu lat_rad kam, ist lange her. wenn mich nicht alles täuscht, war's

Code: (dl )
$lat_rad = $lat_rad * $pi / 180;


ich bin ja kein großer mathematiker, ich hab mir das damals auch nur zusammengesucht und probiert, bis es zufriedenstellend lief.

ach so, die distance sollte dann in km sein. ja.\n\n

<!--EDIT|jan|1158099807-->
Froschpopo
 2006-09-13 02:44
#34644 #34644
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Öhm das sollte eigentlich viel einfacher sein. Da sollte man auch mit einer größer-als, kleiner-als - Kombination drauf kommen. Außerdem hab ich keine PLZ-Ort-Datenbank. Ich arbeite nur mit Koordinaten.
Dubu
 2006-09-13 11:38
#34645 #34645
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Die Lösungen von jan ist eigentlich identisch mit deiner, Frosch.
Wenn bei dir nichts vernünftiges herauskommt, kann das eigentlich nur an den Daten in der Datenbank liegen, denn die Formel sieht korrekt aus. Sind die Koordinaten in der DB vielleicht schon in Radian und nicht in Grad?

(Wenn solche Abfragen häufiger kommen, wäre es vielleicht sogar sinnvoll, die Koordinaten gleich in Radian zu speichern, damit nicht jedesmal tausende Male umgerechnet werden muss.)
pq
 2006-09-13 15:24
#34646 #34646
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
warum versuchst du es denn nicht mit der spatial extension, die ronnie erwähnte?
AFAIK nimmt dir mysql den ganzen kram ab.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2006-09-13 19:12
#34647 #34647
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
und wie verwende ich diese statial extension? auf der site gibts ja auch niergens ein beispiel.
Ronnie
 2006-09-13 21:07
#34648 #34648
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Möglicherweise liege ich mit dem Tipp auch völlig daneben. Ich meinte mich zu erinnern das GIS Systeme diese MySQL-Erweiterung nutzen. Ob damit die gewünschte Abfrage direkt möglich ist ist mir unklar. Schau doch einfach mal ob du ein GIS-Forum findest, wo man entsprechendes KnowHow hat.
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2006-09-11 06:47.