2017-02-22 2 views
0

Ich habe diesen Ansatz überarbeitet, aber immer noch nicht funktioniert haben. Dieses Mal habe ich ein funktionierendes Beispiel, die sehr kurz ist und zeigt das Problem perfekt:Filter nach Punkt in Polygon und Return County ID/Name

https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/

In dem obigen Block finden Sie eine Karte der Kreise zu sehen. Außerdem habe ich Benutzereingaben für geografische Breite und Länge wie so:

var lat = d3.select('#lat_input').node(); 

var long = d3.select('#long_input').node(); 

Diese Koordinaten könnten überall in den USA. Ich möchte eine Funktion erstellen, die die Koordinaten der Benutzereingabe abfragt und die FIPS-ID des Countys zurückgibt.

var containing_county = us.objects.counties.geometries.filter(function(polygon) { 
     return d3.polygonContains(polygon, [long.value, lat.value]); 
    }); 
    console.log(containing_county) 
}); 

jedoch nicht Filtern der Art, wie ich es nicht lesen Eigentum 0 undefinierter erwarten, kann es sagt.

Was soll hier anders gemacht werden?

auch versucht:

var containing_county = topojson.feature(us, us.objects.counties).features.filter(function(d) { 
return d3.polygonContains(d.geometry, [long.value, lat.value]); 
    }); 
+0

Könnten Sie bitte ein funktionierendes Beispiel geben? – elias

+0

ist jetzt endlich zu einem funktionierenden Beispiel geworden. –

+0

Sie übergeben immer noch einen MultiPolygon-Parameter anstelle eines erwarteten Polygons. – elias

Antwort

1

ich die Daten überprüft Sie verknüpft.
Element 0 von objects.counties.geometries ist nicht vom Typ 'Polygon', sondern ein 'MultiPolygon'.
Der erste Parameter von d3.polygonContains erwartet ein Polygon und kann Multipolygone nicht verarbeiten. Wahrscheinlich sollten Sie verschiedene Methoden für unterschiedliche Geometrien verwenden.

+0

Sie waren der einzige, der bei mir dabei geblieben ist. Also ich denke du hast es verdient. Obwohl Ihre Antwort nun sinnvoll ist, haben Sie das Objekt mit der FIPS-ID wie folgt zurückgegeben: 'var containing_county = mapData.filter (Funktion (Polygon)) { if (polygon.geometry! == null) { Rückgabe d3 .polygonContains (polygon.geometry.coordinates [0], [long.value, lat.value]) 'also musste ich das Koordinaten-Feature hinzufügen und es dann auf 0 zerschneiden. –

+0

@ArashHowaida, hat das dein Problem gelöst? funktioniert es jetzt? – elias

+0

yea die Codezeile im obigen Kommentar hat es für mich gemacht. Der Schlüssel war bei 0 zu schneiden und fügte '.coordinates' hinzu, von denen ich noch nie zuvor etwas getan hatte. –

Verwandte Themen