Hallo Dennis,

Ja, hier ein Kurzrezept:

  • Grenzen von hier als Polygone runterladen.
  • 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!

HTH

PA94