所以我试图弄清楚如何在C#中构建一个基本上模仿谷歌地图的控制台应用程序。我需要能够输入一个地址(即使我缩写一个单词.EX:Silverbell Dr)并输出正确的拼写(Silverbell Drive)。
这里的目标是能够在搜索中输入地址,即使地址拼写不正确,并输出一个足够接近用户输入的值,它不会发回空值。< / p>
如果有人有类似的东西,我将非常感谢你的帮助!
老板给了我这个任务,知道我几乎没有关于这个主题的基础知识
答案 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");
}
<强>输出强>