AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Openstreetmaps und Indy

Ein Thema von Dicki · begonnen am 29. Feb 2024 · letzter Beitrag vom 5. Mär 2024
Antwort Antwort
Dicki

Registriert seit: 3. Mär 2011
4 Beiträge
 
#1

Openstreetmaps und Indy

  Alt 29. Feb 2024, 12:35
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Openstreetmaps und Indy

  Alt 29. Feb 2024, 13:37
.. an dem Leerzeichen zwischen ? und bbox kann es nicht liegen?
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Openstreetmaps und Indy

  Alt 29. Feb 2024, 13:43
Zitat:
.. an dem Leerzeichen zwischen ? und bbox kann es nicht liegen?
...definitiv.

Mit Leerzeichen -> Bild, ohne Leerzeichen kommt Speichern-Dialog...

Exception auslesen ist auch eine Option. Da hat man auch den Fehlertext...
Miniaturansicht angehängter Grafiken
box.png  

Geändert von haentschman (29. Feb 2024 um 13:47 Uhr)
  Mit Zitat antworten Zitat
Dicki

Registriert seit: 3. Mär 2011
4 Beiträge
 
#4

AW: Openstreetmaps und Indy

  Alt 4. Mär 2024, 18:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Openstreetmaps und Indy

  Alt 4. Mär 2024, 23:53
[CODE]...[/CODE] bzw. [DELPHI]...[/DELPHI] aka den Knopf mit dem Helm solltest du dir mal ansehn.

Hast du dir mal angesehn, was Delphi-Referenz durchsuchenFormat liefert?
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?
Delphi-Referenz durchsuchenSysErrorMessage, MSDN-Library durchsuchenGetLastError oder Delphi-Referenz durchsuchenRaiseLastOSError.
https://learn.microsoft.com/de-de/wi...a#return-value

Und dann die Rückgaben vom WGET.
* Gut, den Status-/Fehlertext könnte man ignorieren, da das Programm es auch via ErrorLevel/ExitCode ausgibt
* MSDN-Library durchsuchenGetExitCodeProcess
$2B or not $2B

Geändert von himitsu ( 5. Mär 2024 um 13:17 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Openstreetmaps und Indy

  Alt 5. Mär 2024, 11:11
..oder so:

Delphi-Quellcode:
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;
Grüße
Klaus
Klaus

Geändert von Klaus01 ( 5. Mär 2024 um 11:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz