[gelöst] Internetdaten in Lazarus
- 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
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
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.
- 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
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)
Ausgabe:
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)
Der zugriff muss entsprechend der Vorgaben von der Doku erfolgen : https://operations.osmfoundation.org/po ... nominatim/[{"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"]}]
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;
[{"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).
Re: Internetdaten in Lazarus
.... 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:
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
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'
- 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
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).
- 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
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
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 (33.35 KiB) 388 mal betrachtet
- 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
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....
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....
- 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
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.
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).
- 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
Dabei aber bitte beachten, dass Umlaute bei der Abfrage nicht funktionieren, also ä > ae, ö > oe, usw. Die Rückmeldung enthält dann allerdings Umlaute.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'
- 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
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...
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...
- 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
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).
- 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
Die Libs die gesucht werden, stehen in openssl.pas vom FPC.
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.
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';
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).
Re: Internetdaten in Lazarus
Bissel besser geht noch. Ist auch nicht "ausentwickelt", aber zeigt den Weg:
S.a. https://wiki.freepascal.org/fcl-json
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; - 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
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. 
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Internetdaten in Lazarus
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
Das mit den Umlauten etc. hatte ich oben auch noch gemacht.
Re: Internetdaten in Lazarus
Das stimmt. Alternativ kann man Umlaute auch URL-encoden, dann geht es auch ohne 'ue' und 'oe':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.
Code: Alles auswählen
$ curl -s 'https://nominatim.openstreetmap.org/search?city=G%C3%BCtersloh&format=jsonv2'