<\/HEAD>
Hallo zusammen,<\/P>
<\/P>
Ich versuche, einige Informationen aus einer Shape-Datei (.shp) zu lesen, und habe ein kleines Problem, wenn die Funktion ListFields() versucht, die Datei zu lesen. Hier in diesem Code übergebe ich die Datei manuell zum Testen.<\/P>
<\/P>
für <\/STRONG><\/SPAN>field <\/SPAN>in <\/STRONG><\/SPAN>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp"<\/STRONG><\/SPAN>😞<\/span><\/SPAN><\/P><\/P>Die obige Zeile wirft eine Ausnahme mit der Meldung, Datei existiert nicht.<\/P>Das f = arcpy.ListFeatureClasses() gibt die korrekten Werte zurück.<\/SPAN><\/PRE>Jetzt kommt der interessante Teil, dieser Code läuft gut in der Desktop-Version des Python-Codes. Und wenn ich versuche, denselben Code in der Web-Version auszuführen, wird der oben genannte Fehler zurückgegeben.<\/SPAN>Der gesamte Funktionscode ist unten angegeben:<\/SPAN><\/SPAN><\/P><\/P>def <\/STRONG><\/SPAN>connectSource(<\/SPAN>self<\/SPAN>, filepath):
<\/SPAN>"""
Verbinde mit einer Datei und erstelle eine Dictionary-Datenstruktur, die halten wird
Feature-Klassen ShapeTypes und Feldnamen Typ
"""
<\/EM><\/SPAN>self<\/SPAN>.feature.clear()
listfield = <\/SPAN>list<\/SPAN>()
<\/SPAN>try<\/STRONG><\/SPAN>:
<\/SPAN># Setze den Arbeitsbereich auf die Verbindungsdatei
<\/EM><\/SPAN>arcpy.env.workspace = filepath
<\/SPAN># Hole Liste aller Features
<\/EM><\/SPAN>f = arcpy.ListFeatureClasses()
<\/SPAN>print<\/STRONG><\/SPAN>(f)
<\/SPAN>für <\/STRONG>f1 in f:
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; listfield[:] = []
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; i = 0
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp;# Iteriere durch Feldliste
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nb sp ;& nb sp ;& nb sp ;print(f1)
& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;für field in arcpy.ListFields("L:\\historical_data\\Elko County\\Elko_Sewer\\Elko_Sewer_Network_DBO_ssLateralLine.shp"< span class = "lia-unicode-emoji" title = ":disappointed_face:" > 😞 </ span >
& nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp;</ span > < spanstyle = "color:navy;font - size : 9 .0 pt " > < strong > print </ strong > </ span > < spanstyle = "font - size : 9 .0 pt;color:black " >(</ span > < spanstyle = "color : green;font - size : 9 .0 pt " > 'ADC1' </ span > < spanstyle = "font - size : 9 .0 pt;color:black " ) < br /> & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp;</ span > < spanstyle = "color : gray;font - size : 9 .0 pt " > < em > # Filterfeld < br /> & nb sp ; & nb sp ; & nb sp ; & nb sp;</ em > </ span > < spanstyle = "color:navy;font - size : 9 .0 pt " > < strong > if </ strong > </ span > < spanstyle = "font - size : 9 .0 pt;color:black " > field.type </ span > < spanstyle = "color:navy;font - size : 9 .0 pt " > < strong > not in </ strong > </ span > < spanstyle = "font - size : 9 .0 pt;color:black " > [ </ span > < spanstyle = "color : green;font - size : 9 .0 pt " > 'OID' </ span > < spanstyle = "font - size : 9 .0 pt;color:black " ] :</ span > < spanstyle = "color : gray;font - size : 9 .0 pt " > < em > # und field.length <;51:< br /> & nb sp ; & nb sp ; & nb sp ;; # Speichere Feldname und Feldtyp in einer Liste
& nb sp ;; # Speichere Feldname und Feldtyp in einer Liste
</ em ></ span > < spanstyle = "font - size : 9 .o pt;color:black " > listfield.insert(i, field.name + </ span > < spanstyle = "color:#008000;font - size :.09 o t" >&n bsp;; </ span >&n bsp;; + field.type)
; i += </ span >&n bsp;;1
# Konvertiere Liste in Tupel
hup = tuple(listfield)
# Hole Shape-Typ jeder Feature-Klasse
type = arcpy.Describe(f1)
print("t"+type)
# Filter nach Shape-Typ
if type.ShapeType == "Point":
# Speichere jede Feature-Klasse als Schlüssel und Feldnamen (Tupel) als Wert in einem Dictionary
self.feature[f1, type.ShapeType] = hup
<\/SPAN>elif <\/STRONG><\/SPAN>type.ShapeType <\/SPAN>in <\/STRONG><\/SPAN>[<\/SPAN>'Polyline'<\/STRONG><\/SPAN>, <\/SPAN>'Line'<\/STRONG><\/SPAN>]:
<\/SPAN>self<\/SPAN>.feature[f1, type.ShapeType] = hup
<\/SPAN>except <\/STRONG><\/SPAN>Exception as <\/STRONG><\/SPAN>e:
<\/SPAN>print <\/STRONG><\/SPAN>(<\/SPAN>"Falsche Datei"<\/STRONG><\/SPAN>+e.message)
tkMessageBox.showerror(<\/SPAN>"Source File Connection"<\/STRONG><\/SPAN>, <\/SPAN>"Verbindung zur Datei fehlgeschlagen.{0} "<\/STRONG><\/SPAN>.format(e))
<\/SPAN>return <\/STRONG><\/SPAN>0<\/SPAN> <\/SPAN><\/SPAN><\/P><\/P>Der gleiche Code im Web-Format wirft eine Ausnahme, dass die Datei nicht existiert. Während die Desktop-Version einwandfrei läuft. <\/SPAN><\/P><\/P>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp")<\/STRONG><\/SPAN> <\/STRONG><\/SPAN><\/SPAN><\/P><\/P>Diese ListFields()-Funktion kann den Wert nicht zurückgeben / lesen.<\/SPAN><\/P><\/P>Bitte weisen Sie mich darauf hin, wo ich falsch liege.<\/SPAN><\/P><\/P>BEARBEITUNG 1:<\/SPAN><\/P><\/P>Ich versuche, eine python flask Anwendung zu entwickeln, bei der dieser Codeblock durch einen Button-Klick in einer HTML-Datei ausgeführt werden soll.<\/P>Die Anwendung läuft also unter http:\/\127.0.0.1\5000\<\/A>, und sobald ich auf diesen Button klicke, wird die folgende Funktion ausgeführt.<\/P>Die folgende Funktion wird beim Klick auf diesen Button ausgeführt:<\/P>
@app.route<\/SPAN >(<'strong'style='color :green;font - size :9 .0 pt;'>'/open_file'< /strong > , < spanstyle = 'font - size :9 .0 pt ; color :#660099'>methods [<'strong'style='color :green;font - size :9 .0 pt;'>'POST'
])
def open_file():
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath(<'strong'style='color :green;font - size :9 .0 pt;'>'uploads/Elko_Sewer' ))
& nbsp ; & nbsp ; & nbsp ; print(<'strong'style='color :green;font - size :9 .0 pt;'>'END OPEN' )
& nbsp ; & nbsp ; & nbsp ; return render_template(<'strong'style='color :green;font - size :9 .0 pt;'>'view.html' )
& nbsp ;
Im obigen Code enthält die Funktion proce() all diesen Code zum Lesen aus der shp-Datei.< /p >
& nbsp ;
Interessant ist, dass wenn ich proce() unter der main-Funktion der flask-Anwendung aufrufe, es wirklich perfekt funktioniert und bevor der Debugger aktiviert wird, den Code ausführt und die Ausgabe in der Debugger-Konsole anzeigt.Ich verwende PyCharm zum Entwickeln und Debuggen.< /p >
if __name__ == < strongstyle='color :green;font - size :9 .0 pt;'>'__main__':
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath(<'strong'style='color :green;font - size :9 .0 pt;'>'uploads/Elko_Sewer' ))
& nbsp ; & nbsp ; & nbsp ; app.run(
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; < /span >debug=True)
Mit freundlichen Grüßen
Priyam
< /BODY>