![]() |
Openstreetmaps und Indy
Ich versuche eine OSM-Datei herunterzuladen.
Gebe ich die Adresse in Firefox ein geht es. Im programm kommt ein Fehler: "Im Projekt UTM_Test.exe ist eine Exception der Klasse EIdHTTPProtocolException mit der Meldung <HTML> aufgetreten." Da ich noch nie mit den Indy-Komponenten gearbeitet habe kann mir hier evtl. jemad helfen. function TdsTransGeoData.Load_OSM_To_File(const FileName: string; const Angle_Top, Angle_Bottom, Angle_Left, Angle_Right: Extended): Boolean; var lStream: TFileStream; begin Result := False; lStream:=TFileStream.Create(FileName+'D', fmCreate or fmShareDenyWrite); try fIdHTTP.Get('https://www.delphi-treff.de/ueber-delphi/das-produkt/',lStream); Result := True; finally lStream.Free; end; ShowMessage('FILE 1'); // ========== lStream:=TFileStream.Create(FileName, fmCreate or fmShareDenyWrite); try fIdHTTP.Get('http://api.openstreetmap.org/api/0.6/map? bbox=11.54,48.14,11.543,48.145',lStream); // ERZEUGT DEN FEHLER Result := True; except ShowMessage('FILE 2 : ERROR'); end; lStream.Free; ShowMessage('FILE 2'); end; |
AW: Openstreetmaps und Indy
.. an dem Leerzeichen zwischen ? und bbox kann es nicht liegen?
|
AW: Openstreetmaps und Indy
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Mit Leerzeichen -> Bild, ohne Leerzeichen kommt Speichern-Dialog...:wink: Exception auslesen ist auch eine Option. :zwinker: Da hat man auch den Fehlertext... |
AW: Openstreetmaps und Indy
Habe jetzt mein OSM-Aufruf so geändert:
FUNCTION TdsTransGeoData.Load_OSM_To_File(CONST FileName: STRING; CONST Angle_Left, Angle_Bottom, Angle_Right, Angle_Top: Extended): Boolean; VAR StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; fString: STRING; CreateProcessString: STRING; BEGIN fString := 'wget --random-wait --no-check-certificate -O %s' + ' "https://api.openstreetmap.org/api/0.6/map?bbox=%.5f,%.5f,%.5f,%.5f"'; //FileName = R:\Test_OSM.OSM' CreateProcessString := FORMAT(fString, [FileName, Angle_Left, Angle_Bottom, Angle_Right, Angle_Top]); ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); StartupInfo.cb := SizeOf(StartupInfo); IF CreateProcess(NIL, PChar(CreateProcessString), NIL, NIL,NOT False, 0, NIL, PChar(ExtractFilePath(FileName)), StartupInfo, ProcessInfo) THEN BEGIN // Warte auf das Ende des Prozesses WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); // ----- Result := true; END ELSE BEGIN // Fehler beim Starten von wget Result := False; END; END; Der Rückgabewert ist TRUE, aber die Dateigröße von "Test_OSM.OSM" ist 0! Habe jetzt WGet über die Konsole so aufgerufen: wget --no-check-certificate -O R:\Test_OSM.OSM "https://api.openstreetmap.org/api/0.6/map?bbox=11.54,48.14,11.543,48.145" Die Datei "Test_OSM.OSM" wird erzeugt mit 28,4MB. Wo liegt bei mir der jetzt der Fehler? Ich glaube, ich bin zu alt dafür. |
AW: Openstreetmaps und Indy
[CODE]...[/CODE] bzw. [DELPHI]...[/DELPHI] aka den Knopf mit dem Helm solltest du dir mal ansehn.
Hast du dir mal angesehn, was ![]() Wenn du nicht zufällig ein englisches Windows nutzt, dann kommen dort die falschen Dezimaltrennzeichen raus. Den Parameter "FormatSettings" kennst du? Die Rückgaben von CreateProcess willst du nicht ordentlich prüfen? ![]() ![]() ![]() ![]() Und dann die Rückgaben vom WGET. * Gut, den Status-/Fehlertext könnte man ignorieren, da das Programm es auch via ErrorLevel/ExitCode ausgibt * ![]() |
AW: Openstreetmaps und Indy
..oder so:
Delphi-Quellcode:
Grüße
uses
System.SysUtils, system.IOUtils, REST.Client, rest.types; function load_OSM_ToFile(CONST FileName: STRING; CONST Angle_Left, Angle_Bottom, Angle_Right, Angle_Top: Extended): Boolean; var restClient: TRestClient; restRequest: TRestRequest; restResponse: TRestResponse; formatSet: TFormatSettings; begin restClient := TRestClient.Create('https://api.openstreetmap.org/api/0.6/map'); try restCLient.Accept := 'application/json'; restClient.AcceptCharset := 'utf-8'; restRequest := TRestRequest.Create(nil); try restRequest.Client := restClient; restRequest.Accept := 'application/json'; restRequest.AcceptCharset := 'utf-8'; restRequest.Method := rmGet; restRequest.AssignedValues := [TRESTRequest.TAssignedValue.rvAccept, TRESTRequest.TAssignedValue.rvConnectTimeout, TRESTRequest.TAssignedValue.rvReadTimeout]; formatSet := TFormatSettings.Create; formatSet.DecimalSeparator := '.'; restRequest.AddParameter('bbox',format('%s,%s,%s,%s',[floatToStr(Angle_Left, formatSet), floatToStr(Angle_Bottom, formatSet), floatToStr(Angle_Right, formatSet), floatToStr(Angle_Top, formatSet)])); var param := restRequest.params.AddHeader('Accept', 'application/json'); param.Options := param.Options + [poDoNotEncode]; restResponse := TRestResponse.Create(nil); try restRequest.Response := restResponse; restRequest.Execute; result := restRequest.Response.StatusCode = 200; if result then TFile.WriteAllText(fileName, restResponse.Content); finally restResponse.Free; end; finally restRequest.Free; end; finally restClient.Free; end; end; Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz