2016-07-04 14 views
0

Ich versuche nur eine Teilmenge von Polygonen aus einem Shapefile einzulesen, das ich habe. Ich benutze 'Shaperead' um das Shapefile zu lesen, aber ich kann nicht nur die Polygone herausziehen, die ich möchte. Ich weiß, ich soll die ‚Selektor‘ Paarwert Argumente verwenden, aber die exampl Online-Sinn für mich nicht machen:Wie lese ich nur eine Teilmenge von Polygonen aus einer Shapefile in Matlab ein

S = shaperead('concord_roads.shp','Selector',... 
     {@(v1,v2) (v1 >= 4) && (v2 >= 200),'CLASS','LENGTH'}) 

Es gibt eine ‚Stationsnummer‘ -Attribut in meiner Shape-Datei, die jede meiner Polygone identifiziert . Was ich tun möchte, ist in der Lage zu spezifizieren, welche Polygone zuzuordnen sind (basierend auf einer vorherigen Clusteranalyse).

Antwort

1
wanted_stations = [...]; % as previously defined 

[S,C] = shaperead(filename,'selector',{@(v1) any(ismember(wanted_stations,v1)) ,'station_number'}); % assuming the attribute name is 'station_number' 

Grundsätzlich für jedes Polygon, weist shaperead den Wert des Attributs ‚STATION_NUMBER‘ bis V1, wertet dann die anonyme Funktion. Die Werte des Vektors wantedstations sind in der Funktion so definiert, wie sie definiert ist.

+0

Vielen Dank, das hat funktioniert ... obwohl ich Apostrophe und geschweifte Klammern um die Station_number haben musste, damit es erkannt wird. (zB: wanted_stations = [{'25124'}]) ... ansonsten fuhr die Shaperead-Funktion einfach fort, alles herunterzuziehen. Die Einbeziehung der geschweiften Klammern hat den Datentyp zu einem Zellenstring gemacht, was Probleme verursacht, da ich den Prozess automatisieren möchte und die stations_numbers, die ich in meinem Vektor habe, vom Typ 'cell' sind, aber nicht 'cellstr' (und ich kann ' t scheinen sie umzuwandeln). Hast du irgendwelche Vorschläge? – new2matlab

+0

Es sieht so aus, als ob die Stationsnummern in der Shapedatei als Zeichenfolgen und nicht als Ganzzahlen gespeichert sind, also '25124' statt 25124. Wenn Sie dann die Zeile ändern (ismember (gesucht_stationen, str2num (v1))) dann sollte wanted_stations als numerischen Vektor behalten können. –

+0

Das hat perfekt funktioniert! Danke vielmals. – new2matlab