Ich habe eine Liste mit Points und soll die Bundesländer (und Landkreise, falls einfach möglich) dazu raus suchen. Hat jemand eine Idee, wie man das Automatisieren könnte?
Wenn ich die Relationen der Bundesländer und/oder Kreise runterlade kann ich keine einfache If-Abfrage machen.
OT: Morgen ist Feiertag. Hab ein Schönes Foto gemacht: klick
Dann brauchst Du noch einen “Ist ein Punkt innerhalb eines Polygons”-Algorithmus:
– Anleitung: hier
– bzw. hier
– bzw. hier
– Fertig gibt es schon was in Java
– bzw. sogar schon bei OSM in Perl: “close-areas.pl” ab Zeile 906:
# expects point as lat/lon hash, and polygon as a list of segment ids
# which will be looked up in global $segments to get from/to node ids
# which will in turn be looked up in $nodes to get lat/lon
sub polygon_contains_point
{
my ($seglist, $point) = @_;
my $p1 = $nodes->{$segments->{$seglist->[0]}->{"from"}};
my $counter = 0;
foreach my $seg(@$seglist)
{
my $p2 = $nodes->{$segments->{$seg}->{"to"}};
if ($point->{"lat"} >= $p1->{"lat"} || $point->{"lat"} >= $p2->{"lat"})
{
if ($point->{"lat"} < $p1->{"lat"} || $point->{"lat"} < $p2->{"lat"})
{
if ($point->{"lon"} < $p1->{"lon"} || $point->{"lon"} < $p2->{"lon"})
{
if ($p1->{"lat"} != $p2->{"lat"})
{
my $xint = ($point->{"lat"}-$p1->{"lat"})*($p2->{"lon"}-$p1->{"lon"})/($p2->{"lat"}-$p1->{"lat"})+$p1->{"lon"};
if ($p1->{"lon"} == $p2->{"lon"} || $point->{"lon"} <= $xint)
{
$counter++;
}
}
}
}
}
$p1 = $p2;
}
return ($counter%2);
}
Dann Einfach über alle Punkte und Bundesländer/Landkreise iterieren → Fertig!
Zumindest lassen sich auf der Seite die Grenzen von Deutschland und den Bundesländern finden, aber die Grenzen der Kreise habe ich nicht gefunden. Am idealsten wär natürlich eine Relation, die alle Kreise enthält. Kann mir damit vielleicht jemand helfen?