Lekce 1 - Geolokace podle IP adresy v C# .NET WPF - IPGeolocation
V dnešním C# .NET WPF tutoriálu si ukážeme svět geolokace napsané v C# a využívající .NET framework.
Budeme využívat IP adresy pro určení polohy. Využijeme k tomu server a API, které poskytne třídu pro komunikaci s jejich databází. Cílem bude zjištění aktuální polohy pomocí GPS koordinátů, Longitude a Latitude, a případně další detailnější informace.
Co budeme potřebovat
Budeme potřebovat:
- Visual Studio 2017 či 2019 (v této verzi budu vytvářet průvodce, změny oproti verzi 2017 by měly být jen kosmetické)
- Základní znalost jazyka C# a Visual Studia
- Registraci na https://ipgeolocation.io
Co se dnes naučíme
Naučíme se:
- Práci s balíčky NuGet
- Jednoduchý návrh formuláře pomocí WPF
- Implementaci třídy https://ipgeolocation.io v našem kódu
Založení nového projektu
Vytvoříme nový projekt typu Aplikace WPF (.NET Framework). Můžete zvolit i postup pro nový .NET Core, či UWP, ale tam je třeba počítat s nulovou zpětnou kompatibilitou (zpravidla je problém i s OS Windows 10, který nemá letošní update 1903). Pro verze UWP pro .NET Core použijeme oficiální balíček NuGet – více později.
Design aplikace
Tady se nebudeme nad ničím pozastavovat, design bude čistě účelný:
XAML kód okna bude následující:
<Grid> <WrapPanel Margin="5,0,5,0" HorizontalAlignment="Center" Background="DarkGray" Orientation="Vertical" > <TextBlock Text="Locate ours IP adress" FontSize="24" Margin="5"/> <TextBox Name="IPlist" Margin="5" ></TextBox> <Button x:Name="IP_button" Content="Get IP" Click="IP_button_Click" FontSize="16" Margin="5"/> <TextBlock Text="Locate our city name :" FontSize="24" Margin="5"/> <ListView Name="Citytext" FontSize="18" Foreground="Magenta" Margin="5"/> <Button x:Name="GPS" Content="Get Position" Click="Button_Click" FontSize="16" Margin="5"/> </WrapPanel> </Grid>
V kódu jsme použili:
WrapPanel
, který hezky zarovná komponenty na střed a vypořádá se i s případným rostoucímListView
TextBox
, do kterého se vypíše naším kódem zjištěná IP adresa, případně můžeme zadat ručně pro vyzkoušení funkceButton
pro automatické zjištění IP adresyListView
, kam se nám vypíší veškeré informace získané z IPGeolocation.io pomocí našeho kódu- A příslušné tlačítko pro spuštění našeho kódu
Takto přibližně by měl formulář vypadat:

Vlastní kód – Zjištění IP adresy
Začneme vytvořením vlastní metody GetIP()
s návratovou
hodnotou typu string
, která nám vrátí aktuální veřejnou IP
adresu:
private string GetIP() { string url = "http://checkip.dyndns.org"; //...
K získání IP adresy využijeme služby serveru http://checkip.dyndns.org, který navrací hodnotu s jednoduchým textem v HTML. Takto vypadá zdrojový kód stránky:
<html><head><title>Current IP Check</title></head><body>Current IP Address: 212.79.96.92</body></html>
Toho využijeme v následujících řádcích, kde si zdrojový kód načteme do textového řetězce:
//... System.Net.WebRequest req = System.Net.WebRequest.Create(url); System.Net.WebResponse resp = req.GetResponse(); System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
Využijeme zde systémové metody pro načtení a stažení dotazované
webové stránky. Ty poskytují třídy WebRequest
,
WebResponse
a poté již familiární třída
StreamReader
pro načtení obsahu stránky do proměnné
string sr
. Z proměnné sr
přečteme díky metodám
ReadToEnd().Trim()
data a vynecháme veškeré prázdné znaky.
Zbytek uložíme:
string response = sr.ReadToEnd().Trim();
Využijeme jedinečného znaku :
, který se v řetězci
vyskytuje vždy a řetězec zde rozdělíme:
string[] a = response.Split(':');
Zde rozdělený řetězec obsahující IP adresu uložíme do nové
proměnné a2
:
string a2 = a[1].Substring(1);
Nyní v řetězci zbývá IP adresa a za ní zbytek HTLM tagů, které
odřízneme detekcí první ostré závorky <
. To uložíme do
nového stringového pole a3
:
string[] a3 = a2.Split('<');
A funkcí navrátíme hodnotu prvního řetězce stringu a3
obsahující námi požadovanou IP adresu:
return a3[0]; }
Tímto máme hotovou funkci pro navrácení naší veřejné IP adresy. Nyní se můžeme vrhnout na to, jak z ní vytáhnout naši polohu.
GeoLokace – Zjištění polohy z IP adresy
Zde si projdeme postupně jednotlivé kroky tak, abychom na konci měli funkční kód pro zjištění polohy z IP adresy.
Založení účtu u ipgeolocation.io
Na https://app.ipgeolocation.io/auth/login se zaregistrujte pod vaším e-mailem/Google účtem atp. a proveďte potřebné kroky pro ověření emailu.

Poté se přihlaste do vašeho účtu, kde hned na první stránce najdete to, co budete potřebovat - vaše API údaje hned pod textem Your API Key. API Key si někam poznamenejte, nebo si nechte stránku otevřenou na pozadí, budeme jej potřebovat později:

Instalace NuGet balíčku IPGeolocation
Nyní, když již máme založený účet, můžeme jednoduše využít funkcí IPGeoLocation přes balíčky. Oficiální balíček má nicméně jednu vadu a to že nepodporuje nový .NET Core. Naštěstí komunita zapracovala na balíčku pro .NET framework, se kterým budeme pracovat my. Na GitHubu naleznete balíčky i pro další programovací jazyky.
Balíček NuGet pro .NET framework
Balíček pro klasický .NET nainstalujeme následujícím způsobem:
- V menu vybereme Nástroje -> Správce balíčků NuGet -> Spravovat balíčky NuGet pro řešení....
- Přepneme se do záložky Procházet a vyhledáme
IPGeolocation.Net
, na obrázku je jako první. - Označíme náš projekt a zvolíme nainstalovat. Počkáme, až se potřebné soubory stáhnou a nainstalují. Úspěšné nainstalování si můžeme zkontrolovat v záložce nainstalováno, kde se zobrazí veškeré nainstalované balíčky.
- Manuál a zdrojové kódy nalezneme na GitHubu.
Balíček NuGet pro .NET Core
Pokud chcete jít cestou .NET Core, zvolíme jiný balíček:
- V menu přejdeme na Nástroje -> Správce balíčků NuGet -> Spravovat balíčky NuGet pro řešení....
- Vybereme balíček
IP2Location.IPGeolocation
, na obrázku zobrazen jako druhá položka. - Pokračujeme stejně jako v postupu pro klasický .NET.

To je pro dnešek vše.
V příští lekci, Geolokace podle IP adresy v C# .NET WPF - Dokončení, využijeme IP adresu pro určení polohy. Výsledkem budou GPS souřadnice Longitude a Latitude a další informace.
Měl jsi s čímkoli problém? Zdrojový kód vzorové aplikace je ke stažení každých pár lekcí. Zatím pokračuj dál, a pak si svou aplikaci porovnej se vzorem a snadno oprav.