<\/HEAD>
Hallo iedereen,<\/P>
<\/P>
Ik probeer wat informatie te lezen uit een shape (.shp) bestand en ik ondervind een klein probleem wanneer de ListFields() functie probeert het bestand te lezen. Hier in deze code geef ik handmatig het bestand door om te controleren.<\/P>
<\/P>
voor <\/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>De bovenstaande regel geeft een uitzondering met de melding, Bestand bestaat niet.<\/P>De f = arcpy.ListFeatureClasses() geeft de juiste waarden terug.<\/SPAN><\/PRE>Nu is het interessante deel dat deze code goed werkt in de desktopversie van de python code. En wanneer ik probeer dezelfde code vanuit de webversie uit te voeren, geeft het bovenstaande foutmelding terug.<\/SPAN>Hieronder volgt de volledige functiecode:<\/SPAN><\/SPAN><\/P><\/P>def <\/STRONG><\/SPAN>connectSource(<\/SPAN>self<\/SPAN>, filepath):
<\/SPAN>"""
Verbind met een bestand en maak een dictionary datastructuur die zal bevatten
feature classes :ShapeTypes en veldnamen :Type
"""
<\/EM><\/SPAN>self<\/SPAN>.feature.clear()
listfield = <\/SPAN>list<\/SPAN>()
<\/SPAN>try<\/STRONG><\/SPAN>:
<\/SPAN># stel workspace in op verbindend bestand
<\/EM><\/SPAN>arcpy.env.workspace = filepath
<\/SPAN># Verkrijg lijst van alle features
<\/EM><\/SPAN>f = arcpy.ListFeatureClasses()
<\/SPAN>print<\/STRONG><\/SPAN>(f)
<\/SPAN>voor <\/STRONG><\/SPAN>f1 <\/SPAN>in <\/STRONG><\/SPAN>f:
listfield[:] = []
i = 0
< /span ># Itereer door veldlijst
< /em >< /span >print< /span >(f1)
< /span >voor< /span >field in< /span >arcpy.ListFields("L:\\historical_data\\Elko County\\Elko_Sewer\\Elko_Sewer_Network_DBO_ssLateralLine.shp"😞
< /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>"Verkeerd bestand"<\/STRONG><\/SPAN>+e.message)
tkMessageBox.showerror(<\/SPAN>"Source File Connection"<\/STRONG><\/SPAN>, <\/SPAN>"Kon geen verbinding maken met het bestand.{0} "<\/STRONG><\/SPAN>.format(e))
<\/SPAN>return <\/STRONG><\/SPAN>0<\/SPAN> <\/SPAN><\/SPAN><\/P><\/P>Dezelfde code in het webformaat geeft een uitzondering dat het bestand niet bestaat. Terwijl het in de desktopversie perfect werkt. <\/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>Deze ListFields() functie kan de waarde niet retourneren of lezen.<\/SPAN><\/P><\/P>Gelieve mij te begeleiden waar ik fout zit.<\/SPAN><\/P><\/P>BEWERKING 1:<\/SPAN><\/P><\/P>Ik probeer een python flask applicatie te ontwikkelen waarbij ik wil dat dit codeblok wordt uitgevoerd bij een klik op een knop in een HTML-bestand.<\/P>Dus de applicatie draait op http:\/\127.0.0.1\5000\<\/A> en zodra ik op die knop klik, wordt de volgende functie uitgevoerd.<\/P>De volgende functie wordt uitgevoerd bij het klikken op die knop:<\/P>
@app.route<\/SPAN >(<'POST'>)
def open_file():
& nbsp ;& nbsp ;& nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))
& nbsp ;& nbsp ;& nbsp ; print
(<'END OPEN'>)
& nbsp ;& nbsp ;& nbsp ; return(render_template('view.html'))
& nbsp ;
In bovenstaande code bevat de functie proce() alle code om te lezen van het shp-bestand.< /p >
& nbsp ;
Het interessante is dat wanneer ik proce() aanroep onder de main-functie van de flask-applicatie, het echt perfect werkt . En voordat de debugger wordt geactiveerd, voert het de code uit en print de uitvoer in de debuggerconsole . Ik gebruik PyCharm om te ontwikkelen en debuggen .
if__name__ == '__main__':
& nbsp ;& nbsp ;& nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))
& nbsp ;& nbsp ;& nbsp ; app.run(
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; debug=True
)
Met vriendelijke groet
Priyam