it-swarm.com.de

Überprüfen Sie, ob ein Punkt in Google Maps Land oder Wasser ist

..und dann Google-Maps "das Wasser vom Wasser trennen"

Nun, nicht im biblischen Sinne, aber ..

Ich würde gerne wissen, welche Möglichkeiten ich habe, um zu überprüfen, ob ein Punkt von [Lat, Lon] Land oder Wasser ist.

Google Maps hat offensichtlich diese Daten (die Gewässer sind blau) - aber gibt es etwas in der API, das ich dafür verwenden kann? Und wenn nicht - dienen sie nicht, weil sie nie daran gedacht haben? Oder weil es zu kompliziert ist?

Ich habe keine Informationen zu dieser Angelegenheit gefunden - mit Ausnahme einiger ähnlicher Fragen (wie zum Beispiel der Suche nach Terrain oder Höhenunterschieden) - aber es ist nicht genau das, was ich brauche.

Gibt es dafür eine getrennte Schicht? Eine Option? Befehl? Oder sollte ich das manuell machen?

Der einzige Weg, an den ich denken kann, um dies zu bewerkstelligen (sollte ich das manuell tun müssen), besteht darin, jedes bediente Plättchen auf den exakten Punkt zu prüfen - und dann den RGB-Wert für diesen Google-Karten-Farbton zu überprüfen. __ Theorie - weil ich in der Praxis keine Ahnung habe, wie ich das bewerkstelligen soll. Das erste Hindernis ist, dass ich nicht weiß, wie ich eine Pixelposition auf einer Kachel in einen [LatLon] -Punkt konvertieren kann 

Eine fertige Lösung wäre viel einfacher.

Beachten Sie, dass ich nicht das ganze Wasser der Welt brauche (zum Beispiel - ich interessiere mich nicht für Bäche, kleine Teiche, die meisten Flüsse oder das Schwimmbad Ihres Nachbarn. Ich brauche die Stellen, an denen sich eine Person ohne die Hilfe eines schwimmenden Fahrzeugs bewegen kann )

EDIT I ​​

Nach dem Lesen der Kommentare: Die Höhenmethode ist nicht zuverlässig, es gibt zu viele Orte unterhalb des Meeresspiegels (eine Liste der "tiefsten" 10 finden Sie hier http://geology.com/below-sea- level/ ) und es gibt zu viele Binnenwasserkörper über dem Meeresspiegel (Seen) ..__ Die umgekehrte Geolokalisierungsmethode ist nicht zuverlässig, da sie eine geopolitische Einheit wie eine Stadt oder einen Staat - oder NULL - zurückgibt viele Male. Ich habe mir diese Pseudo-Lösungen bereits angesehen, bevor ich die Frage stellte - aber keine von ihnen hat die Frage tatsächlich beantwortet - diese Methoden sind bestenfalls schlechtes "Vermuten".

97
Obmerk Kronen

Dies sind zwei verschiedene Möglichkeiten, die Sie ausprobieren können:

  • Sie können Google Maps Reverse Geocoding verwenden. In der Ergebnismenge können Sie feststellen, ob es sich um Wasser handelt, indem Sie types überprüfen. In Gewässern ist der Typ natural_feature. Weitere Informationen finden Sie unter diesem Link http://code.google.com/apis/maps/documentation/geocoding/#Types .

    Sie müssen auch die Namen der Features überprüfen, wenn sie Sea, Lake, Ocean und einige andere wasserbezogene Wörter auf Genauigkeit enthalten. Zum Beispiel sind die Desserts auch natural_features.

    Prons - Der gesamte Erkennungsprozess wird auf dem Client-Computer ausgeführt. Es ist nicht erforderlich, einen eigenen serverseitigen Dienst zu erstellen.

    Cons - Sehr ungenau und die Wahrscheinlichkeit, dass Sie in Gewässern "keine" bekommen, ist sehr hoch.

  • Sie können Gewässer/Länder anhand von Pixeln erkennen, indem Sie Statische Karten von Google verwenden. Dafür müssen Sie jedoch einen http-Dienst erstellen. 

    Dies sind die Schritte, die Ihr Service ausführen muss:

    1. latitude, longitude und current zoom vom Client empfangen.
    2. http://maps.googleapis.com/maps/api/staticmap?center={latitude,longitude}&zoom={current zoom`} senden & size = 1x1 & maptype = roadmap & sensor = Falsche Anforderung an den Google Static Map-Dienst.
    3. Ermitteln Sie die Farbe des Pixels eines statischen 1x1-Bildes.
    4. Antworten Sie auf Informationen zur Erkennung.

    Sie können die Farbe des Pixels auf der Clientseite nicht erkennen. Ja, Sie können ein statisches Image auf dem Client-Computer laden und ein Image auf das Element canvas zeichnen. Sie können jedoch nicht getImageData des Canvas-Kontexts verwenden, um die Farbe des Pixels zu erhalten. Dies ist durch die domänenübergreifende Richtlinie eingeschränkt. 

    Prons - Sehr genaue Erkennung

    Cons - Verwendung eigener Server-Ressourcen zur Erkennung

54
Engineer

Dies scheint mit keinem aktuellen Google-Dienst möglich zu sein.

Es gibt aber auch andere Dienste, z. B. koordiniert den JSON-Abfragedienst von Vector! Sie fragen einfach die Daten in der URL ab und erhalten eine JSON/XML-Antwort .

Beispielanforderung: http: //api.koordinates.com/api/vectorQuery.json? Key = YOUR_GEODATA_KEY & layer = 1298 & x = -159.9609375 & y = 13.239945499286312 & max_results = 3 & radius = 10000 & geometry = true & with_field_names = true

Sie müssen sich registrieren und Ihren Schlüssel und die ausgewählte Layernummer angeben. Sie können das gesamte Repository der verfügbaren Ebenen durchsuchen. Die meisten Ebenen sind nur regional, aber Sie können auch global finden, wie die World Coastline :

enter image description here

Wenn Sie einen Layer auswählen, klicken Sie auf die Registerkarte "Dienste". Sie erhalten die Beispielanforderungs-URL. Ich glaube, Sie müssen sich nur registrieren und das wars!

Und jetzt das Beste:

Du kannst deine Ebene hochladen!

Es ist nicht sofort verfügbar, sie müssen es irgendwie verarbeiten, aber es sollte funktionieren! Das Layer-Repository sieht tatsächlich so aus, als hätten die Benutzer sie nach Bedarf hochgeladen.

19
TMS

Das, was ich benutze und es funktioniert nicht so schlecht ... Sie können den Test verbessern, wenn Sie mehr CPU-Ressourcen durch das Hinzufügen von Pixeln verschwenden müssen.

function isItWatter($lat,$lng) {

    $GMAPStaticUrl = "https://maps.googleapis.com/maps/api/staticmap?center=".$lat.",".$lng."&size=40x40&maptype=roadmap&sensor=false&zoom=12&key=YOURAPIKEY";  
    //echo $GMAPStaticUrl;
    $chuid = curl_init();
    curl_setopt($chuid, CURLOPT_URL, $GMAPStaticUrl);   
    curl_setopt($chuid, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($chuid, CURLOPT_SSL_VERIFYPEER, FALSE);
    $data = trim(curl_exec($chuid));
    curl_close($chuid);
    $image = imagecreatefromstring($data);

    // this is for debug to print the image
    ob_start();
    imagepng($image);
    $contents =  ob_get_contents();
    ob_end_clean();
    echo "<img src='data:image/png;base64,".base64_encode($contents)."' />";

    // here is the test : I only test 3 pixels ( enough to avoid rivers ... )
    $hexaColor = imagecolorat($image,0,0);
    $color_tran = imagecolorsforindex($image, $hexaColor);

    $hexaColor2 = imagecolorat($image,0,1);
    $color_tran2 = imagecolorsforindex($image, $hexaColor2);

    $hexaColor3 = imagecolorat($image,0,2);
    $color_tran3 = imagecolorsforindex($image, $hexaColor3);

    $red = $color_tran['red'] + $color_tran2['red'] + $color_tran3['red'];
    $green = $color_tran['green'] + $color_tran2['green'] + $color_tran3['green'];
    $blue = $color_tran['blue'] + $color_tran2['blue'] + $color_tran3['blue'];

    imagedestroy($image);
    var_dump($red,$green,$blue);
    //int(492) int(570) int(660) 
    if($red == 492 && $green == 570 && $blue == 660)
        return 1;
    else
        return 0;
}
8
rebe100x

Diesen Artikel auschecken. Es erkennt genau, wenn sich etwas auf dem Wasser befindet, ohne dass ein Server benötigt wird. Es ist ein Hack, der sich auf die benutzerdefinierte Stilfunktion in Google Maps stützt.

http://tech.bellycard.com/blog/where-d-the-water-go-google-maps-water-pixel-detection-with-canvas/

7
Saurav

Ich dachte, es wäre interessanter, diese Abfrage lokal auszuführen, also kann ich unabhängiger sein: Angenommen, ich möchte 25000 zufällige Landkoordinaten gleichzeitig generieren. Ich möchte lieber Aufrufe von möglicherweise teuren externen APIs vermeiden. Hier ist meine Aufnahme in Python anhand des von TomSchober erwähnten python-Beispiels . Grundsätzlich werden die Koordinaten in einer vorgefertigten 350MB-Datei mit allen Landkoordinaten nachgeschlagen. Wenn die Koordinaten dort enthalten sind, werden sie gedruckt.

import ogr
from IPython import embed
import sys

drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
ds_in = drv.Open("land_polygons.shp")    #Get the contents of the shape file
lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer

#Put the title of the field you are interested in here
idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")

#If the latitude/longitude we're going to use is not in the projection
#of the shapefile, then we will get erroneous results.
#The following assumes that the latitude longitude is in WGS84
#This is identified by the number "4236", as in "EPSG:4326"
#We will create a transformation between this and the shapefile's
#project, whatever it may be
geo_ref = lyr_in.GetSpatialRef()
point_ref=ogr.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran=ogr.osr.CoordinateTransformation(point_ref,geo_ref)

def check(lon, lat):
    #Transform incoming longitude/latitude to the shapefile's projection
    [lon,lat,z]=ctran.TransformPoint(lon,lat)

    #Create a point
    pt = ogr.Geometry(ogr.wkbPoint)
    pt.SetPoint_2D(0, lon, lat)

    #Set up a spatial filter such that the only features we see when we
    #loop through "lyr_in" are those which overlap the point defined above
    lyr_in.SetSpatialFilter(pt)

    #Loop through the overlapped features and display the field of interest
    for feat_in in lyr_in:
        # success!
        print lon, lat

check(-95,47)

Ich habe ein Dutzend Koordinaten ausprobiert, es funktioniert wunderbar. Die Datei "land_polygons.shp" kann zu here als Ergänzung zu OpenStreetMaps heruntergeladen werden. (Ich habe den ersten WGS84-Download-Link selbst verwendet, vielleicht funktioniert auch der zweite).

7
SylvainB

Es gibt eine kostenlose Web-API, die genau dieses Problem mit dem Namen onwater.io löst. Es ist nicht etwas, das in Google Maps eingebaut ist, aber bei Breiten- und Längengraden wird es durch eine Get-Anfrage genau wahr oder falsch zurückgegeben.

Beispiel für das Wasser: https://api.onwater.io/api/v1/results/23.92323 ,-66.3

{
  lat: 23.92323,
  lon: -66.3,
  water: true
}

Beispiel an Land: https://api.onwater.io/api/v1/results/42.35,-71.1

{
  lat: 42.35,
  lon: -71.1,
  water: false
}

Vollständige Offenlegung Ich arbeite bei Dockwa.com , der Firma hinter onwater. Wir haben auf dem Wasser gebaut, um dieses Problem selbst zu lösen und der Gemeinschaft zu helfen. Es ist kostenlos zu benutzen (bezahlt für hohes Volumen) und wir wollten es teilen :)

6
stuyam

Zusätzlich zur umgekehrten Geokodierung - wie Dr. Molle darauf hingewiesen hat, kann es ZERO_RESULTS zurückgeben - Sie könnten den Elevation-Service verwenden. Wenn Sie durch umgekehrte Geokodierung null Ergebnisse erhalten, ermitteln Sie die Höhe des Standorts. Im Allgemeinen erhält das Meer eine negative Zahl, da der Meeresboden unter dem Meeresspiegel liegt. Ein ausführliches Beispiel für den Elevation-Service finden Sie unter http://www.daftlogic.com/sandbox-google-maps-find-altitude.htm .

Beachten Sie, dass, da Google diese Informationen nicht zur Verfügung stellt, eine andere Methode nur eine Vermutung ist und Vermutungen von Natur aus ungenau sind. Die Verwendung der type, die durch umgekehrte Geokodierung zurückgegeben wird, oder die Höhe, falls type nicht verfügbar ist, deckt die meisten Eventualitäten ab.

5
Andrew Leach

Wenn alles andere fehlschlägt, können Sie immer versuchen, die Höhe am Punkt und in einiger Entfernung zu überprüfen. Nur Wasser ist normalerweise völlig flach.

3
Steve Barnes

Diese Methode ist absolut unzuverlässig. Tatsächlich hängen die zurückgegebenen Daten vollständig davon ab, mit welchem ​​Teil der Welt Sie arbeiten. Zum Beispiel arbeite ich in Frankreich. Wenn ich auf das Meer klicke An der französischen Küste gibt Google den nächstgelegenen LAND-Standort zurück, den er unter "..." erraten kann. Wenn ich für diese Frage Informationen von Google angefragt habe, antworteten sie, dass sie den angeforderten Punkt nicht korrekt zurückgeben können Wassermasse.

Keine sehr befriedigende Antwort, ich weiß ... Dies ist ziemlich frustrierend, insbesondere für diejenigen von uns, die dem Benutzer die Möglichkeit geben, auf die Karte zu klicken, um eine Markerposition festzulegen.

3
Simon

Siehe die Antwort, die ich auf eine ähnliche Frage gegeben habe - es verwendet "HIT_TEST_TERRAIN" von der Earth-API, um die Funktion zu erreichen. 

Es gibt ein funktionierendes Beispiel für die Idee, die ich hier zusammengestellt habe: http://www.msa.mmu.ac.uk/~fraser/ge/coord/

2
Fraser

Leider ist diese Antwort nicht im Google Maps-API enthalten und die Ressource, auf die verwiesen wird, ist nicht kostenlos. Es gibt jedoch einen von DynamicGeometry bereitgestellten Web-Service, der eine GetWaterOrLand-Operation zur Verfügung stellt, die ein Längen-/Breitengradpaar akzeptiert ( eine Demo finden Sie hier ).

Ich verstehe, wie dies implementiert wird, indem ich Wasserkörperformdateien verwende. Wie genau diese Formdateien mit der Google Maps-API verwendet werden, Sie können jedoch möglicherweise Einblick in die verknüpfte Demo erhalten.

Hoffe das hilft irgendwie.

2
sellmeadog

Durch die Verwendung der Google Elevation-API bin ich ziemlich nahe gekommen. Hier ist ein Bild der Ergebnisse:

screenshot of results

Sie sehen die Sechsecke ziemlich an Land bleiben, obwohl ein rechteckiger Umfang definiert ist, der teilweise über Wasser geht. In diesem Fall habe ich eine kurze Überprüfung von Google Maps selbst durchgeführt, und die Mindesthöhe an Land betrug ca. 8-9 m. Das war also meine Schwelle. Der Code wird größtenteils aus der Google-Dokumentation und dem Stack Overflow kopiert/eingefügt. Hier ist der vollständige Gist:

https://Gist.github.com/dvas0004/fd541a0502528ebfb825

2
dvas0004

Ich würde empfehlen, hier zu rollen. Sie können Werkzeuge wie GDAL verwenden, um den Inhalt unter einem Punkt in einem Shapefile abzufragen. Sie können Shapefiles für die US-Geographie aus vielen Quellen erhalten, einschließlich dem US Census Bureau .

Dies kann über GDAL-Binärdateien, die Quelle C oder über swig in Java, Python und mehr erfolgen.

Volkszählungskarten

GDAL-Informationen

Beispiel für Punktabfragen in Python

2
TomSchober

Hier ist ein weiteres Beispiel in reinem JavaScript: http://jsfiddle.net/eUwMf/

Wie Sie sehen, ist die Ideia im Grunde dasselbe wie rebe100x, das Bild wird von der Google-API für statische Karten abgerufen und das erste Pixel gelesen:

$("#xGps, #yGps").change(function() {
    var img = document.getElementById('mapImg');

    // Bypass the security issue : drawing a canvas from an external URL.
    img.crossOrigin='anonymous';

    var xGps = $("#xGps").val();
    var yGps = $("#yGps").val();

    var mapUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + xGps + "," + yGps +
        "&zoom=14&size=20x20&maptype=roadmap&sensor=false";

    // mapUrl += "&key=" + key;

    $(img).attr("src", mapUrl);

    var canvas = $('<canvas/>')[0];
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);

    var pixelData = canvas.getContext('2d').getImageData(1, 1, 1, 1).data;

    if (pixelData[0] == 164 &&
        pixelData[1] == 190 &&
        pixelData[2] == 220) {
        $("#result").html("Water");
    } else {
        $("#result").html("Not water");
    }
});
2
IcanDivideBy0

Wenn die Adresse List<Address> 0 zurückgibt, können Sie diesen Speicherort als Ozean oder natürliche Ressourcen annehmen. Fügen Sie in Ihrer Antwortmethode der Google Places-API-Antwort einfach den folgenden Code hinzu.

Initialisieren Sie die unten stehende Liste wie erwähnt

List<Address> addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);

if (addresses.size()==0) { Toast.MakeText(getApplicationContext,"Ocean or Natural Resources selected",Toast.LENGTH_SHORT).show(); }else{ }

1
Kumar PG

Hier ist eine einfache Lösung

Da Google keine zuverlässigen Ergebnisse in Bezug auf Koordinaten liefert, die sich entweder auf Gewässern von Ozeanen oder Binnengewässern befinden, müssen Sie einen anderen Sicherungsdienst wie Yandex verwenden, um die kritischen Informationen bereitzustellen, wenn diese fehlen. Sie möchten Yandex höchstwahrscheinlich nicht als primären Geocoder verwenden, da Google hinsichtlich der Zuverlässigkeit und Vollständigkeit der Weltdaten weit überlegen ist. Yandex kann jedoch sehr nützlich sein, um Daten abzurufen, wenn es sich um Koordinaten über Gewässern handelt. Verwenden Sie also beide.


Yandex-Dokumentation: https://api.yandex.com.tr/maps/doc/geocoder/desc/concepts/input_params.xml


Die Schritte, um den Namen des Ozeans abzurufen:

1.) Verwenden Sie zuerst Google, um die Koordinate umzukehren.

2.) Wenn Google null Ergebnisse liefert, ist es wahrscheinlich, dass die Koordinate über einem Ozean liegt. Machen Sie jetzt eine sekundäre umgekehrte Geokodierungsanforderung mit denselben Koordinaten an Yandex. Yandex gibt eine JSON-Antwort mit den genauen Koordinaten zurück. Innerhalb dieser Antwort werden zwei "key": "value" -Paare von Bedeutung sein

["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]

and

["GeoObject"]["name"]

Überprüfen Sie die Art des Schlüssels. Wenn es sich um "Hydro" handelt, wissen Sie, dass Sie sich über einem Gewässer befinden, und da Google null Ergebnisse zurückgegeben hat, ist es wahrscheinlich 99,99%, dass dieses Gewässer ein Meer ist. Der Name des Ozeans ist der oben genannte "Name" -Schlüssel.

Hier ein Beispiel, wie ich diese in Ruby geschriebene Strategie verwende

if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
     ocean = result.data["GeoObject"]["name"] 
end

Die Schritte zum Abrufen eines Inlandwasserkörpers:

Für dieses Beispiel wird angenommen, dass unsere Koordinate irgendwo in einem See liegt:

1.) Verwenden Sie zuerst Google, um die Koordinate umzukehren. 

2.) Google wird höchstwahrscheinlich ein Ergebnis liefern, das eine prominente Standardadresse auf dem nahe gelegenen Land ist. In diesem Ergebnis werden die Koordinaten der zurückgegebenen Adresse angegeben. Diese Koordinate stimmt nicht mit der von Ihnen angegebenen Adresse überein. Messen Sie den Abstand zwischen der von Ihnen angegebenen Koordinate und der mit dem Ergebnis zurückgegebenen Koordinate, wenn sie sich erheblich unterscheidet (z. B. 100 Yards). Führen Sie dann eine sekundäre Sicherungsanforderung mit Yandex aus und prüfen Sie, ob der Wert des Schlüssels "kind" angezeigt wird ist "hydro", dann wissen Sie, dass die Koordinate auf dem Wasser liegt. Da Google im Gegensatz zum obigen Beispiel ein Ergebnis zurückgegeben hat, ist es wahrscheinlich 99,99%, dass es sich hierbei um ein inländisches Gewässer handelt, sodass Sie jetzt den Namen erhalten können. Wenn "kind" nicht == "hydro" ist, verwenden Sie das geocodierte Objekt von Google. 

["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]

and

["GeoObject"]["name"]

Hier ist derselbe Code, der in Ruby geschrieben wurde, um inland_body_of_water zu bekommen

if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
     inland_body_of_water = result.data["GeoObject"]["name"] 
end

Ein Hinweis zur Lizenzierung: Soweit ich weiß, erlaubt Google Ihnen nicht, ihre Daten zur Anzeige auf anderen Karten als den von Google angebotenen Karten zu verwenden. Yandex verfügt jedoch über eine sehr flexible Lizenzierung, und Sie können deren Daten verwenden, um auf Google Maps angezeigt zu werden. 

Auch für Yandex gilt ein hohes Gebührenlimit von 50.000 Anfragen/Tag und es ist kein API-Schlüssel erforderlich.

1

Als absoluter Python-Neuling konnte ich SylvainBs Lösung nicht dazu bringen, mit dem Python-Skript zu arbeiten, das prüft, ob die Koordinaten an Land sind. Ich habe es jedoch herausgefunden, indem ich OSGeo4W ( https://trac.osgeo.org/osgeo4w/ ) heruntergeladen habe. Dann habe ich alles installiert, was ich brauchte, pip, Ipython, und überprüfte, ob alle angegebenen Importe vorhanden waren. Ich habe den folgenden Code als .py-Datei gespeichert.

Code, um zu überprüfen, ob die Koordinaten an Land sind

###make sure you check these are there and working separately before using the .py file 

import ogr
from IPython import embed
from osgeo import osr
import osgeo

import random
#####generate a 1000 random coordinates
ran1= [random.uniform(-180,180) for x in range(1,1001)]
ran2= [random.uniform(-180,180) for x in range(1,1001)]


drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
ds_in = drv.Open("D:\Downloads\land-polygons-complete-4326\land-polygons-complete-4326\land_polygons.shp")    #Get the contents of the shape file
lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer

#Put the title of the field you are interested in here
idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")

#If the latitude/longitude we're going to use is not in the projection
#of the shapefile, then we will get erroneous results.
#The following assumes that the latitude longitude is in WGS84
#This is identified by the number "4236", as in "EPSG:4326"
#We will create a transformation between this and the shapefile's
#project, whatever it may be
geo_ref = lyr_in.GetSpatialRef()
point_ref=osgeo.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran=osgeo.osr.CoordinateTransformation(point_ref,geo_ref)
###check if the random coordinates are on land
def check(runs):
    lon=ran1[runs]
    lat=ran2[runs]
    #Transform incoming longitude/latitude to the shapefile's projection
    [lon,lat,z]=ctran.TransformPoint(lon,lat)
    #Create a point
    pt = ogr.Geometry(ogr.wkbPoint)
    pt.SetPoint_2D(0, lon, lat)
    #Set up a spatial filter such that the only features we see when we
    #loop through "lyr_in" are those which overlap the point defined above
    lyr_in.SetSpatialFilter(pt)
    #Loop through the overlapped features and display the field of interest
    for feat_in in lyr_in:
        return(lon, lat)

###give it a try
result = [check(x) for x in range(1,11)] ###checks first 10 coordinates

Ich habe versucht, es in R zum Laufen zu bringen, aber ich hatte einen Albtraum, der versucht, alle Pakete zu installieren, die Sie installieren müssen, also an Python hängen bleibt.

0
Alec Christie