Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Geolokácie podľa IP adresy v C # .NET WPF - Časť 2

V minulej časti, Geolokácia podľa IP adresy v C# .NET WPF - Časť 1, sme si pripravili všetko potrebné pre naprogramovanie aplikácie na zistenie IP adresy a geolokácie. Dnes budeme pokračovať a aplikáciu dokončíme.

3. Zdrojový kód IPGeolocation

Mali by sme mať všetko pripravené. Pre vyhľadanie polohy podľa IP adresy si vytvoríme novú privátne metódu LokaceIP() s parametrom string IPadress.

Medzi using príkazy pridáme novo nainštalovaný balíček IPGeolocation. Ďalej inicializujeme API nainštalovaného balíka, tu budeme potrebovať API kľúč z vášho účtu, ktorý sme si založili v predchádzajúcej časti. Inštanciu IPGeolocationAPI inicializujeme ako premennú triedy nášho okna:

IPGeolocationAPI api = new IPGeolocationAPI("Sem_vlozte_svuj_API_Key");

Ďalej pokračujeme deklaráciou našej metódy LokaceIP():

private void LokaceIP(string IPadress)
{
    GeolocationParams geoParams = new GeolocationParams();
    geoParams.SetIPAddress(IPadress);
    geoParams.SetFields("geo,time_zone,currency");

Tu si deklarujeme inštanciu GeolocationParams ako premennú geoParams, ktoré nastavíme IP adresu. Ďalej upresníme rozsah informácií, ktoré bude metóda zisťovať. Pre čisto zistenie GPS súradníc postačí zadať len "geo", my využijeme celkový rozsah možností tak, ako je deklarované v kóde. Následne zavoláme metódu GetGeolocation() a jej návratovú hodnotu spracujeme:

IPGeolocation.Geolocation geolocation = api.GetGeolocation(geoParams);

// Check if geolocation lookup was successful
if (geolocation.GetStatus() == 200)
{
    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());

}

Tu využívame návratovej hodnoty metódy GetStatus(), ktorá vráti hodnotu 200 pokiaľ sa dohľadania podarilo. A využijeme listu City_ListV, aby sme do neho vložili výsledky ako je názov mesta, názov krajiny, miestnu menu, a to hlavné - Latitude a Longitude, teda GPS súradnice, ktoré hľadáme.

Zvyšok funkcie rieši už len vypísanie prípadné chyby, ak sa vyhľadanie IP adresy zlyhalo, a jednoduchý textový oddeľovač pre prehľadnosť:

else
    {
        City_ListV.Items.Add(geolocation.GetMessage());
    }
    City_ListV.Items.Add("---------------------------------");
}

4. Dokončenie aplikácie

Zostáva pár obslužných metód v Code Behind. Tlačidlu "Get IP" pridelíme obslužnú metódu pre zistenie IP adresy a vypísanie do nášho textbox:

private void IP_button_Click(object sender, RoutedEventArgs e)
{
    IP_TBox.Text = GetIP();
}

To isté vykonáme s tlačidlom "Get Position":

private void Button_Click(object sender, RoutedEventArgs e)
{
    LokaceIP(IP_TBox.Text);
}

Záver

Aplikácia by mala fungovať tak ako príklad na na obrázku nižšie. Po kliknutí na "Get IP" sa zistí aktuálna IP adresa. A následne po stlačení "Get position" sa zistí aktuálna poloha podľa IP vpísanej v textbox:

Ukážka funkčné aplikácie - C # - Pre pokročilých

Aplikácia zistí vašu verejnú IP adresu a vašu polohu. Pre otestovanie je možné do textbox vpísať akúkoľvek IP adresu a nechať si vypísať lokáciu a všetky informácie.

Dúfam, že sa vám táto demonštrácia možností Geolokácia pomocou IP adresy a sprievodca páčili, a že vám pomôže s implementáciou treba do vášho projektu. Ja tento program napísal pre otestovanie predtým, než som ho implementoval do najnovšej verzie môjho projektu, tu je jej voľne prístupná súťažné verzia pre zaujímavosť.

Nižšie nájdete kompletný zdrojový kód na stiahnutie. V archíve sa nachádza novo aj verzia pre .NET Core. Tu je náhľad zdrojového kódu Code Behind:

public partial class MainWindow : Window
{
    //public string cityfromIP,lat,longt ="";
    IPGeolocationAPI api = new IPGeolocationAPI("YOUR_PRIVATE_ASPI_KEY");
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        LokaceIP(IP_TBox.Text);
    }

    private void LokaceIP(string IPadress)
    {
        // Get geolocation for IP address (1.1.1.1) and fields (geo, time_zone and currency)
        GeolocationParams geoParams = new GeolocationParams();
        geoParams.SetIPAddress(IPadress);
        geoParams.SetFields("geo,time_zone,currency");
        IPGeolocation.Geolocation geolocation = api.GetGeolocation(geoParams);

        // Check if geolocation lookup was successful
        if (geolocation.GetStatus() == 200)
        {
            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());
        }
        City_ListV.Items.Add("---------------------------------");
    }

    private string GetIP()
    {
        string url = "http://checkip.dyndns.org";
        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());
        string response = sr.ReadToEnd().Trim();
        string[] a = response.Split(':');
        string a2 = a[1].Substring(1);
        string[] a3 = a2.Split('<');
        return a3[0];
    }

    private static readonly Regex regex = new Regex("^[.0-9]+$");  // výborná pomůcka zde https://regexr.com
    private void IP_TBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        if (!regex.IsMatch(e.Text)) //otestuje zda vstupní znak je v povoleném rozsahu
            e.Handled = true;
        base.OnPreviewTextInput(e);
    }

    private void IP_button_Click(object sender, RoutedEventArgs e)
    {
        IP_TBox.Text = GetIP();
    }
}

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 44x (7.7 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal Michal Kotek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování již od útlých let, aktuálně se věnuje výrobě Webových stránek jako fullstack, využívám Nette framework. Mám znalosti jazyků JS, PHP, SASS C# .NET, C++ pro Arduino. Jo a strašně rád střílím ;)
Aktivity