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