SHARE
TWEET

Untitled

a guest Sep 16th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6.  
  7. namespace GeoInfoService
  8. {
  9.     public static class GeoInfoService
  10.     {
  11.         private static readonly Dictionary<string, (string EnglishName, int GeoId, string ISO2Code, string ISO3Code)> _regionCodeMapping
  12.             = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
  13.                 .Select(ci => new RegionInfo(ci.LCID))
  14.                 .GroupBy(ri => ri.TwoLetterISORegionName)
  15.                 .ToDictionary(
  16.                     g => g.Key,
  17.                     g => g.First().Transform(x => (x.EnglishName, x.GeoId, x.TwoLetterISORegionName, x.ThreeLetterISORegionName))
  18.                     );
  19.  
  20.         public static string GetFriendlyName(string code)
  21.             => _regionCodeMapping[code].EnglishName;
  22.        
  23.         public enum SYSGEOTYPE
  24.         {
  25.             GEO_NATION = 0x0001,
  26.             GEO_LATITUDE,
  27.             GEO_LONGITUDE,
  28.             GEO_ISO2,
  29.             GEO_ISO3,
  30.             GEO_RFC1766,
  31.             GEO_LCID,
  32.             GEO_FRIENDLYNAME,
  33.             GEO_OFFICIALNAME,
  34.             GEO_TIMEZONES,
  35.             GEO_OFFICIALLANGUAGES,
  36.             GEO_ISO_UN_NUMBER,
  37.             GEO_PARENT,
  38.             GEO_DIALINGCODE,
  39.             GEO_CURRENCYCODE,
  40.             GEO_CURRENCYSYMBOL,
  41.             GEO_NAME,
  42.             GEO_ID
  43.         }
  44.  
  45.         public static string GetGeoInfoEx(string geoId, SYSGEOTYPE geoType)
  46.         {
  47.             switch (geoType)
  48.             {
  49.                 case SYSGEOTYPE.GEO_NATION:
  50.                 case SYSGEOTYPE.GEO_RFC1766:
  51.                 case SYSGEOTYPE.GEO_LCID:
  52.                 case SYSGEOTYPE.GEO_ID:
  53.                     throw new Exception("Not supported");
  54.                 case SYSGEOTYPE.GEO_TIMEZONES:
  55.                 case SYSGEOTYPE.GEO_OFFICIALLANGUAGES:
  56.                     throw new Exception("Not implemented in the system");
  57.                 case SYSGEOTYPE.GEO_LATITUDE:
  58.                 case SYSGEOTYPE.GEO_LONGITUDE:
  59.                 case SYSGEOTYPE.GEO_ISO2:
  60.                 case SYSGEOTYPE.GEO_ISO3:
  61.                 case SYSGEOTYPE.GEO_FRIENDLYNAME:
  62.                 case SYSGEOTYPE.GEO_OFFICIALNAME:
  63.                 case SYSGEOTYPE.GEO_ISO_UN_NUMBER:
  64.                 case SYSGEOTYPE.GEO_PARENT:
  65.                 case SYSGEOTYPE.GEO_DIALINGCODE:
  66.                 case SYSGEOTYPE.GEO_CURRENCYCODE:
  67.                 case SYSGEOTYPE.GEO_CURRENCYSYMBOL:
  68.                 case SYSGEOTYPE.GEO_NAME:
  69.                     break;
  70.                 default:
  71.                     throw new Exception("Unexpected SYSGEOTYPE value");
  72.             }
  73.  
  74.             string s = new string('\0', 256);
  75.             int size = GetGeoInfoEx(geoId, geoType, s, 256);
  76.             if (size <= 0) { return null; }
  77.  
  78.             return s.Substring(0, size - 1);
  79.         }
  80.        
  81.         [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
  82.         private extern static int GetGeoInfoEx(string location, SYSGEOTYPE geoType, string geoData, int geoDataCount);
  83.     }
  84. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top