[gelöst] Internetdaten in Lazarus

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 362
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] Internetdaten in Lazarus

Beitrag von juelin »

Hallo,
ich habe heute mal eine Frage für Spezialisten.
Ich habe eine Adresse:
Meine: Potsdamer Weg 7 in 68309 Mannheim
Nun möchte ich in meinem Lazarus-Programm die
Latitude und Longitude als Daten herein holen.

Von Hand würde ich folgendermassen vorgehen:
Internetseite: https://www.gps-coordinates.net/
aufrufen.
Meine Adressse eingeben und "Get GPSCoordinates" drücken.
Dann hätte ich meine Daten (siehe bild1 im Anhang).

Aber ich möchte ja, das das ganze (ohne zutun des Anwenders)
im Lazarus-Programm abläuft.

Hat da Jemand eine Idee?

Wäre dankbar (wenn es sein muss auch mit Geld).

Danke und Gruß
Jürgen
Dateianhänge
bild1.jpg
(313.45 KiB) Noch nie heruntergeladen
Zuletzt geändert von juelin am Di 24. Mär 2026, 12:11, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

Wenn ich mir die Seite so ansehe (JavaScript Quelltext), werde ich das Gefühl nicht los, das die Seite an Google Maps weiterleitet um von dort die Koordinaten bekommt.
Es ginge auch über OSM und die Suche.

Wenn du mit https://nominatim.openstreetmap.org/sea ... ormat=json eine Anfrage an OSM stellst, bekommst du folgendes zurück (Suche nach Hauptbahnhof Berlin)
[{"place_id":133983947,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"n ... uptbahnhof (Tunnel)","display_name":"Hauptbahnhof (Tunnel), Friedrich-List-Ufer, Europacity, Moabit, Mitte, Berlin, 10557, Deutschland","boundingbox":["52.5252449","52.5253449","13.3706343","13.3707343"]},{"place_id":133179595,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"n ... uptbahnhof, 1, Europaplatz, Europacity, Moabit, Mitte, Berlin, 10557, Deutschland","boundingbox":["52.5251451","52.5252451","13.3692821","13.3693821"]}]
Der zugriff muss entsprechend der Vorgaben von der Doku erfolgen : https://operations.osmfoundation.org/po ... nominatim/

Code: Alles auswählen

uses
  opensslsockets, fphttpclient,;

{ TForm1 }

function TForm1.GetCoordinates(const Address: string): string;
var
  HttpClient: TFPHTTPClient;
  Response: string;
begin
  HttpClient := TFPHTTPClient.Create(nil);
  try
    HttpClient.AddHeader('User-Agent', 'MeinAppName/1.0 (kontakt@beispiel.de)');
    HttpClient.AddHeader('From','meine@domain.tld');
    Response := HttpClient.Get('https://nominatim.openstreetmap.org/search?q=' + Address + '&format=json');
    Memo1.Append(Response);
   finally
    HttpClient.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Append(GetCoordinates('Hauptbahnhof%20Berlin'))
end;
Ausgabe:
[{"place_id":133122492,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"n ... uptbahnhof (Tunnel)","display_name":"Hauptbahnhof (Tunnel), Friedrich-List-Ufer, Europacity, Moabit, Mitte, Berlin, 10557, Deutschland","boundingbox":["52.5252449","52.5253449","13.3706343","13.3707343"]}]
Zuletzt geändert von af0815 am So 22. Mär 2026, 18:44, insgesamt 4-mal geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Stevie
Beiträge: 203
Registriert: Di 27. Feb 2024, 22:40

Re: Internetdaten in Lazarus

Beitrag von Stevie »

.... nimm einfach den fphttpclient und nutze einfach die Nominatim-API von OpenStreetMap. Das Ergebnis kommt per JSON, was Du wiederum sehr einfach mit der FPJson API parsen und weiterverarbeiten kannst.

Ein einfacher 'curl' als Ausgangspunkt:

Code: Alles auswählen

$ curl -s 'https://nominatim.openstreetmap.org/search?street=Potsdamer+Weg+7&postalcode=68309&city=Mannheim&format=jsonv2'
Wie man das mit fphttpclient und fpjson zusammenbaut, kannst Du Dir an diesem Tutorial von Marcus Fernström ableiten: https://medium.com/@marcusfernstrm/free ... 7c04cad489

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

Habe den Code oben ausgebessert, jetzt geht die Abfrage.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 362
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Hallo af0815,
danke für die Unterstützung.
Zu Deinem Vorschlag:

Was genau muss in den zwei Zeilen rein? (unterstrichen)
HttpClient.AddHeader('User-Agent', 'MeinAppName/1.0 (kontakt@beispiel.de)');
HttpClient.AddHeader('From','meine@domain.tld');
Ich habe das Programm auf Windos (kein Handy).
Bekomme bei dem Befehl:
Response:=HttpClient.Get('https://nominatim.openstreetmap.org/sea ... ormat=json');
Fehlermeldung siehe Anhang.

Und was hast Du an dem Code von Stevie ausgebessert?

Danke und Gruß
Jürgen
Dateianhänge
bild2.jpg
bild2.jpg (33.35 KiB) 389 mal betrachtet

Benutzeravatar
Bullykiffer
Beiträge: 26
Registriert: Fr 9. Aug 2024, 19:44
OS, Lazarus, FPC: Windows 11 (L 3.4.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit
Wohnort: Nordvorpommern

Re: Internetdaten in Lazarus

Beitrag von Bullykiffer »

Moin Juelin,

Ich denke af0815 hat seinen eigenen Codeschnippsel ausgebessert,andere Beiträge kann er auch nicht editieren.

Was deine Fehlermeldung anbelangt: Ich würde mal sagen,du hast die nötigen DLL für SSL Verschlüsselung (https://) nicht in deinem Programmpfad mit drin....

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

Ist das bei den units drinnnen ? opensslsockets

Ich gehe davon aus, das du auf Windows bist. Nur dort habe ich keine Ahnung, wie man die dll's für https richtig installiert, die man braucht. Ich bin auf Linux. Da kann ich dir nicht helfen.

Ich habe nichts am Code von Stevie ausgebessert, sondern bei mir die Header richtig gestellt. Da ist, wie in der Anleitung von OSM beschrieben, das API ein wenig heikel. Was du bei den unterstrichenen Zeilen hineinkommt, sind die Infos von dir und deinem Programm. OSM will für die private Nutzung wissen, welches Programm und welcher Benutzer (und nicht mehr als eine Abfrage pro Sekunde). Siehe auch in der Doku, deren Link ich dir im Beitrag mitgesendet habe.

Stevie hat das mit curl gemacht, ich halt mit Pascal.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
greye
Beiträge: 55
Registriert: So 16. Feb 2014, 15:38
OS, Lazarus, FPC: Debian/Fedora/Windows, Lazarus 3.6/4.0RC2, FPC 3.2.2
CPU-Target: 64 Bit

Re: Internetdaten in Lazarus

Beitrag von greye »

Stevie hat geschrieben: So 22. Mär 2026, 18:35 Ein einfacher 'curl' als Ausgangspunkt:

Code: Alles auswählen

$ curl -s 'https://nominatim.openstreetmap.org/search?street=Potsdamer+Weg+7&postalcode=68309&city=Mannheim&format=jsonv2'
Dabei aber bitte beachten, dass Umlaute bei der Abfrage nicht funktionieren, also ä > ae, ö > oe, usw. Die Rückmeldung enthält dann allerdings Umlaute.

Benutzeravatar
Bullykiffer
Beiträge: 26
Registriert: Fr 9. Aug 2024, 19:44
OS, Lazarus, FPC: Windows 11 (L 3.4.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit
Wohnort: Nordvorpommern

Re: Internetdaten in Lazarus

Beitrag von Bullykiffer »

Also bei Windows sind bei Lazarus 3.x für SSL mit hoher wahrscheinlichkeit noch die "alten" ssleay32.dll und libeay32.dll interessant.
Die müssen da auch nicht "installiert" sein,es reicht wenn diese im Ordner wo auch die .exe Datei liegt rumlungern...

Bei Lazarus 4.x kann es sein,das da andere DLLs genutzt werden müssen,da ist in diese Richtung wohl einiges erneuert worden,so auch die veralteten
SSL durch neuere SSL Bibliotheken,welche anders heissen.
Wie genau kann ich jetzt aber nicht sagen,ich bin nocht mit 3.x unterwegs...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

Das mit den neueren Libs bei Lazarus bin ich mir nicht so sicher, da die Funktionalität im FPC und der FCL IMHO steckt. Und der FPC ist ja bekanntlich - ähhh - gut abgelegen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

Die Libs die gesucht werden, stehen in openssl.pas vom FPC.

Code: Alles auswählen

{$IF DEFINED(WIN64)}
  SSL_DLL_Names:    array[1..4] of string = ('libssl-3-x64',    'libssl-1_1-x64',    'ssleay32', 'libssl32');
  Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3-x64', 'libcrypto-1_1-x64', 'libeay32', 'libeay32');
{$ELSEIF DEFINED(WINDOWS)}
  SSL_DLL_Names:    array[1..4] of string = ('libssl-3',    'libssl-1_1',    'ssleay32', 'libssl32');
  Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3', 'libcrypto-1_1', 'libeay32', 'libeay32');
{$ELSEIF DEFINED(OS2GCC)}
  SSL_DLL_Names:    array[1..2] of string = ('kssl10',   'kssl');
  Crypto_DLL_Names: array[1..2] of string = ('kcrypt10', 'kcrypto');
{$ELSEIF DEFINED(OS2)}
  SSL_DLL_Names:    array[1..2] of string = ('emssl10',  'ssl');
  Crypto_DLL_Names: array[1..2] of string = ('emcrpt10', 'crypto');
{$ELSE}
  BaseSSLName: string = 'libssl';
  BaseCryptoName: string = 'libcrypto';
Ist aus dem Lazarus 4.5 (rev lazarus_4_4-43-gb42c5e00a6) FPC 3.2.3 x86_64-linux-qt5 daher FPC Fixes Zweig. Für Win 10/11: libssl-3-x64.dll, libssl-1_1-x64.dll, ssleay32.dll oder libssl32.dll.

Edit: Mal kurz Google angeworfen mit win11 und ssleay32 gesucht - soviel Schwachsinn und gefährliche Sachen auf einem Haufen habe ich schon lange nicht mehr gesehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 11241
Registriert: Mo 11. Sep 2006, 19:01

Re: Internetdaten in Lazarus

Beitrag von theo »

Bissel besser geht noch. Ist auch nicht "ausentwickelt", aber zeigt den Weg:

Code: Alles auswählen

uses
  opensslsockets, fphttpclient, fpjson, jsonparser;

function GetCoordinates(const Address: string): string;
var
  HttpClient: TFPHTTPClient;
  Response: string;
begin
  HttpClient := TFPHTTPClient.Create(nil);
  try
    HttpClient.AddHeader('User-Agent', 'MeinAppName/1.0 (kontakt@beispiel.de)');
    HttpClient.AddHeader('From', 'meine@domain.tld');
    Response := HttpClient.Get('https://nominatim.openstreetmap.org/search?q=' +
      EncodeURLElement(Address) + '&format=json');
    Result := Response;
  finally
    HttpClient.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  jData, jItem: TJSONData;
  temp: string;
  i: integer;
begin
  Memo1.Lines.Clear;
  temp := GetCoordinates(Edit1.Text);
  if Trim(temp)=EmptyStr then exit;
  jData := GetJSON(temp);
  //Testoutput Memo1.Append(jData.FormatJSON);
  for i := 0 to jData.Count - 1 do
  begin
    jItem := jData.Items[i];
    Memo1.Lines.Add(jItem.FindPath('display_name').AsString);
    Memo1.Lines.Add(jItem.FindPath('lat').AsString+' : '+jItem.FindPath('lon').AsString);
    Memo1.Lines.Add(EmptyStr);
  end;
  jData.Free;
end;                     
S.a. https://wiki.freepascal.org/fcl-json

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7245
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

juelin hat eher Probleme mit Windows und https. Das mit JSON dekodieren hatte ich schon drinnen, habe ich wieder rausgeschmissen, habe da manchmal eine AV bekommen, weil erst muss der Rest einmal laufen. Und das die Daten sind die juelin braucht. :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 11241
Registriert: Mo 11. Sep 2006, 19:01

Re: Internetdaten in Lazarus

Beitrag von theo »

af0815 hat geschrieben: Mo 23. Mär 2026, 10:30 juelin hat eher Probleme mit Windows und https.
Bin auch nicht auf Win, aber früher gab es die Libs bei Synapse (Nur 32bit).
http://synapse.ararat.cz/files/crypt/
Vllt. diese?
http://synapse.ararat.cz/files/crypt/Op ... -Win32.zip
af0815 hat geschrieben: Mo 23. Mär 2026, 10:30 Das mit JSON dekodieren hatte ich schon drinnen,
Das mit den Umlauten etc. hatte ich oben auch noch gemacht.

Stevie
Beiträge: 203
Registriert: Di 27. Feb 2024, 22:40

Re: Internetdaten in Lazarus

Beitrag von Stevie »

greye hat geschrieben: So 22. Mär 2026, 23:07 Dabei aber bitte beachten, dass Umlaute bei der Abfrage nicht funktionieren, also ä > ae, ö > oe, usw. Die Rückmeldung enthält dann allerdings Umlaute.
Das stimmt. Alternativ kann man Umlaute auch URL-encoden, dann geht es auch ohne 'ue' und 'oe':

Code: Alles auswählen

$ curl -s 'https://nominatim.openstreetmap.org/search?city=G%C3%BCtersloh&format=jsonv2'
Vielleicht ist das dann etwas einfacher, weil man direkt die URL Encoding Funktion aus der fphttpclient-Bibliothek nehmen kann...

Antworten