验证地址的控制台应用程序

时间:2017-07-12 23:10:50

标签: c# google-maps console-application

所以我试图弄清楚如何在C#中构建一个基本上模仿谷歌地图的控制台应用程序。我需要能够输入一个地址(即使我缩写一个单词.EX:Silverbell Dr)并输出正确的拼写(Silverbell Drive)。

这里的目标是能够在搜索中输入地址,即使地址拼写不正确,并输出一个足够接近用户输入的值,它不会发回空值。< / p>

如果有人有类似的东西,我将非常感谢你的帮助!

老板给了我这个任务,知道我几乎没有关于这个主题的基础知识

1 个答案:

答案 0 :(得分:0)

一种方法是使用Googles地理编码API。您可以将其传递给部分地址,并且最好为您返回规范化地址。如果地址不是非常具体,那么您将获得多个地址。

以下是调用API并解析结果的代码示例:

private static List<string> GetNormalizedAddresses(string address)
{
    // Generate request Uri
    var baseUrl = "http://maps.googleapis.com/maps/api/geocode/xml";
    var requestUri = $"{baseUrl}?address={Uri.EscapeDataString(address)}&sensor=false";

    // Get response
    var request = WebRequest.Create(requestUri);
    var response = request.GetResponse();
    var xDoc = XDocument.Load(response.GetResponseStream());
    var results = xDoc.Element("GeocodeResponse")?.Elements("result").ToList();

    var normalizedAddresses = new List<string>();

    // Populate results
    if (results != null)
    {
        normalizedAddresses.AddRange(results
            .Select(result => result.Element("formatted_address")?.Value)
            .Where(formattedAddress => !string.IsNullOrWhiteSpace(formattedAddress)));
    }

    return normalizedAddresses;
}

然后,您可以这样称呼它:

while(true)
{
    Console.Write("Enter a partial address: ");
    var partialAddress = Console.ReadLine();
    Console.WriteLine(new string ('-', 25 + partialAddress.Length));

    var normalizedAddress = GetNormalizedAddresses(partialAddress);

    if (!normalizedAddress.Any())
    {
        Console.WriteLine("Sorry, couldn't find anything.");
    }
    else
    {
        Console.WriteLine("That address normalizes to:");
        Console.WriteLine($" - {string.Join($"\n - ", normalizedAddress)}");
    }

    Console.WriteLine("\n");        
}

<强>输出

enter image description here