Lekce 2 - Geolokace podle IP adresy ve VB.NET - Dokončení
V minulé lekci, Geolokace podle IP adresy ve VB.NET - IPGeolocation, jsme zjistili veřejnou IP adresu uživatele a připravili vše potřebné pro zjištění GPS lokace podle této IP adresy.
V dnešním tutoriálu Síť ve VB.NET budeme pokračovat v aplikaci z lekce Geolokace podle IP adresy ve VB.NET WPF - IPGeolocation. Využijeme IP adresu pro určení polohy. Výsledkem budou GPS souřadnice - východní délku Longitude, severní šířku Latitude a další informace.
Inicializace balíčku
IPGeolocation
Začneme přidáním importu nainstalovaného balíčku, pak inicializujeme
API nainstalovaného balíčku a nakonec zavoláme metodu
InitializeComponent() v konstruktoru Code Behind.
Import balíčku
IPGeolocation
Nejprve si tedy mezi Imports příkazy, kódu na pozadí
Code Behind, přidáme nainstalovaný balíček
IPGeolocation z kapitoly Instalace
NuGet balíčku IPGeolocation lekce Geolokace
podle IP adresy ve VB.NET - IPGeolocation:
...
Imports IPGeolocation
...
Inicializace API balíčku
IPGeolocation
Dále si v Code Behind inicializujeme API
nainstalovaného balíčku IPGeolocation.
Pro inicializaci budeme potřebovat API klíč z účtu, který jsme si založili v kapitole Založení účtu u IPGeolocation lekce Geolokace podle IP adresy ve VB.NET WPF - IPGeolocation.
Instanci typu IPGeolocationAPI inicializujeme do proměnné
api třídy MainWindow našeho okna:
Dim api As IPGeolocationAPI = New IPGeolocationAPI("Sem vložte svůj API_Key")
Konstruktor
V konstruktoru Code Behind zavoláme metodu
InitializeComponent():
Public Sub New() InitializeComponent() End Sub
Metody
V Code Behind si napíšeme metodu LocateIP() a
IP_TBox_PreviewTextInput() a také přidáme dvě obslužné
metody.
Metoda LocateIP()
Pro vyhledání polohy dle IP adresy si vytvoříme novou privátní metodu
LocateIP() s parametrem IPAddress typu
String:
Private Sub LocateIP(IPAddress As String) Dim geoParams As GeolocationParams = New GeolocationParams() geoParams.SetIPAddress(IPAddress) geoParams.SetFields("geo,time_zone,currency")
Deklarujeme si instanci typu GeolocationParams do proměnné
geoParams. Na instanci geoParams zavoláme metodu
SetIPAddress(), které nastavíme IP adresu
IPAddress. Dále metodou SetFields() upřesníme
rozsah informací, které bude metoda zjišťovat. Využili jsme celkový rozsah
možností tj. geo,time_zone,currency.
Pro zjištění pouze GPS souřadnic by stačilo zadat v
parametru jen geo.
Následně zavoláme metodu GetGeolocation() a její návratovou
hodnotu zpracujeme:
... Dim geolocation As Geolocation = api.GetGeolocation(geoParams) If geolocation.GetStatus() = 200 Then City_ListV.Items.Add(geolocation.GetCity()) City_ListV.Items.Add(geolocation.GetCountryName()) City_ListV.Items.Add(geolocation.GetCurrency().GetName()) City_ListV.Items.Add("Lat: " & geolocation.GetLatitude().ToString() & "; Long: " + geolocation.GetLongitude().ToString())
Zde využíváme návratové hodnoty metody GetStatus(), která
navrátí hodnotu 200, pokud se dohledání zdařilo. A využijeme
listu City_ListV, abychom do něj vložili tyto výsledky:
- název města,
- název země,
- místní měnu,
- north latitude a east longitude.
Zbytek metody řeší jednak vypsání případné chyby, pokud se vyhledání IP adresy nezdařilo a také jednoduchý textový oddělovač pro přehlednost:
...
Else
City_ListV.Items.Add(geolocation.GetMessage())
End If
City_ListV.Items.Add("---------------------------------")
End Sub
Celá metoda LocateIP() vypadá následovně:
Private Sub LocateIP(IPAddress As String) Dim geoParams As GeolocationParams = New GeolocationParams() geoParams.SetIPAddress(IPAddress) geoParams.SetFields("geo,time_zone,currency") Dim geolocation As Geolocation = api.GetGeolocation(geoParams) If geolocation.GetStatus() = 200 Then City_ListV.Items.Add(geolocation.GetCity()) City_ListV.Items.Add(geolocation.GetCountryName()) City_ListV.Items.Add(geolocation.GetCurrency().GetName()) City_ListV.Items.Add("Lat: " & geolocation.GetLatitude().ToString() & "; Long: " + geolocation.GetLongitude().ToString()) Else City_ListV.Items.Add(geolocation.GetMessage()) End If City_ListV.Items.Add("---------------------------------") End Sub
Metoda
IP_TBox_PreviewTextInput()
Nejprve si definujeme rozsah povolených znaků IP adresy, kterými jsou
číslice a tečky. Poté v metodě
ošetříme, aby textové pole IP_TBox mohlo obsahovat pouze tyto
povolené znaky:
Private Shared ReadOnly regex As Regex = New Regex("^[.0-9]+$") Private Sub IP_TBox_PreviewTextInput(sender As Object, e As TextCompositionEventArgs) If Not regex.IsMatch(e.Text) Then e.Handled = True End If MyBase.OnPreviewTextInput(e) End Sub
Pro ošetření jsme využili regulární výraz a třídu
Regex. Více informací jak regulární výrazy fungují najdeme v
lekci Regulární
výrazy v C# .NET - Úvod .
Obslužné metody
Do Code Behind si dopíšeme obslužné metody
IP_button_Click() a Button_Click().
Obslužná metoda
IP_button_Click()
V obslužné metodě, kterou přidělíme tlačítku Get IP,
zavoláme naši metodu GetIP()
pro zjištění IP adresy, kterou vrátíme do našeho
textového pole IP_TBox:
Private Sub IP_button_Click(sender As Object, e As RoutedEventArgs) IP_TBox.Text = GetIP() End Sub
Obslužná metoda
Button_Click
Podobně v této obslužné metodě, kterou přidělíme tlačítku Get
Position, zavoláme tentokrát naši metodu LocateIP() pro
vyhledání polohy dle IP adresy:
Private Sub Button_Click(sender As Object, e As RoutedEventArgs) LocateIP(IP_TBox.Text) End Sub
Testování
Fungování aplikace vidíme na obrázku níže. Po kliknutí na Get
IP se zjistí aktuální IP adresa. A následně po
stisknutí tlačítka Get position se zjistí aktuální
poloha dle IP adresy vepsané v textovém poli
TextBox:

V příští lekci, Využití API ve VB.NET, si vyzkoušíme zavolat API server a zpracovat přijatá data.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 7x (779.17 kB)
Aplikace je včetně zdrojových kódů v jazyce VB.NET

