GeoCoding Maps API 只对网站有效吗?
Is the GeoCoding Maps API only valid for websites?
我有一个 Windows Forms (WinForm) 计费产品,目前 运行 .Net Framework 4.6.1 并在 Visual Studio 2015 年维护。
我们被要求修改采用物理地址和 returns Latitude/Longitude 网格坐标的映射工具。
我为自己准备了一个测试密钥,并将其应用到我的代码中。
private void GoogleGeoCodeSearch(LocationRecord currentRecord, String key)
{
var street = String.Format("{0}", currentRecord.street_name).Trim();
var city = String.Format("{0}", currentRecord.city).Trim();
var state = String.Format("{0}", currentRecord.state).Trim();
var postal = String.Format("{0}", currentRecord.postal_code).Trim();
var country = (state.Length == 2 && STATES.Contains(state)) ? "USA" : String.Format("{0}", currentRecord.country).Trim();
var address = String.Format("{0}, {1}, {2}, {3} {4}", street, city, state, postal, country).Replace("-", String.Empty).Replace("'", String.Empty);
var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false®ion={1}&key={2}", Uri.EscapeDataString(address), country, key);
var request = System.Net.WebRequest.Create(requestUri);
using (var response = request.GetResponse())
{
var ok = false;
var title = String.Format("{0}::Google API WebRequest", _title);
var source = "response stream";
var element = "XDocument";
var xdoc = System.Xml.Linq.XDocument.Load(response.GetResponseStream());
if (xdoc != null)
{
source = element;
element = "GeocodeResponse";
var geoResponse = xdoc.Element(element);
if (geoResponse != null)
{
source = element;
element = "result";
var result = geoResponse.Element(element);
if (result != null)
{
source = element;
element = "geometry";
var geometry = result.Element(element);
if (geometry != null)
{
source = element;
element = "location";
var locationElement = geometry.Element(element);
if (locationElement != null)
{
source = element;
element = "lat/lng";
var lat = locationElement.Element("lat");
var lng = locationElement.Element("lng");
if ((lat != null) && (lng != null))
{
Double latitude, longitude;
Double.TryParse(lat.Value, out latitude);
Double.TryParse(lng.Value, out longitude);
SaveCoordinates(currentRecord, latitude, longitude);
ok = true;
}
}
}
} else
{
result = geoResponse.Element("status");
if (result != null)
{
var msg = result.Value;
result = geoResponse.Element("error_message");
if (result != null)
{
msg = String.Format("{0}{1}{1}{2}", msg, Environment.NewLine, result.Value);
}
MessageBox.Show(msg, title, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
if (!ok)
{
MessageBox.Show(String.Format("No [{0}] information found in [{1}] element.", element, source), title, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
每次我到达这一行,我都会收到 NULL
回复:
var result = geoResponse.Element(element);
这是解释:
<GeocodeResponse>
<status>REQUEST_DENIED</status>
<error_message>The provided API key is invalid.</error_message>
</GeocodeResponse>
Google 地理编码 API 可以在 Windows 表单应用程序中使用吗?
当然,您可以在 WinForms 应用程序中使用地理编码 API。对于 API 发送请求的内容无关紧要。重要的是请求参数正确,APIkey有效
事实上,我刚刚用我自己的 API 密钥测试了您的代码,它工作正常,这让我觉得您的 API 密钥有问题。
因此尝试按照以下步骤创建一个新的:
- 登录developer console
- Select 您的项目或创建一个新项目 (1)
- 转到
Library
(2) 并搜索 Geocoding API
(3)
- 进入后点击
Enable
(4) 启用它
- 转到凭据并点击
Create credentials
按钮 (5)
- Select
API key
来自凭据类型 (6)
我有一个 Windows Forms (WinForm) 计费产品,目前 运行 .Net Framework 4.6.1 并在 Visual Studio 2015 年维护。
我们被要求修改采用物理地址和 returns Latitude/Longitude 网格坐标的映射工具。
我为自己准备了一个测试密钥,并将其应用到我的代码中。
private void GoogleGeoCodeSearch(LocationRecord currentRecord, String key)
{
var street = String.Format("{0}", currentRecord.street_name).Trim();
var city = String.Format("{0}", currentRecord.city).Trim();
var state = String.Format("{0}", currentRecord.state).Trim();
var postal = String.Format("{0}", currentRecord.postal_code).Trim();
var country = (state.Length == 2 && STATES.Contains(state)) ? "USA" : String.Format("{0}", currentRecord.country).Trim();
var address = String.Format("{0}, {1}, {2}, {3} {4}", street, city, state, postal, country).Replace("-", String.Empty).Replace("'", String.Empty);
var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false®ion={1}&key={2}", Uri.EscapeDataString(address), country, key);
var request = System.Net.WebRequest.Create(requestUri);
using (var response = request.GetResponse())
{
var ok = false;
var title = String.Format("{0}::Google API WebRequest", _title);
var source = "response stream";
var element = "XDocument";
var xdoc = System.Xml.Linq.XDocument.Load(response.GetResponseStream());
if (xdoc != null)
{
source = element;
element = "GeocodeResponse";
var geoResponse = xdoc.Element(element);
if (geoResponse != null)
{
source = element;
element = "result";
var result = geoResponse.Element(element);
if (result != null)
{
source = element;
element = "geometry";
var geometry = result.Element(element);
if (geometry != null)
{
source = element;
element = "location";
var locationElement = geometry.Element(element);
if (locationElement != null)
{
source = element;
element = "lat/lng";
var lat = locationElement.Element("lat");
var lng = locationElement.Element("lng");
if ((lat != null) && (lng != null))
{
Double latitude, longitude;
Double.TryParse(lat.Value, out latitude);
Double.TryParse(lng.Value, out longitude);
SaveCoordinates(currentRecord, latitude, longitude);
ok = true;
}
}
}
} else
{
result = geoResponse.Element("status");
if (result != null)
{
var msg = result.Value;
result = geoResponse.Element("error_message");
if (result != null)
{
msg = String.Format("{0}{1}{1}{2}", msg, Environment.NewLine, result.Value);
}
MessageBox.Show(msg, title, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
if (!ok)
{
MessageBox.Show(String.Format("No [{0}] information found in [{1}] element.", element, source), title, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
每次我到达这一行,我都会收到 NULL
回复:
var result = geoResponse.Element(element);
这是解释:
<GeocodeResponse>
<status>REQUEST_DENIED</status>
<error_message>The provided API key is invalid.</error_message>
</GeocodeResponse>
Google 地理编码 API 可以在 Windows 表单应用程序中使用吗?
当然,您可以在 WinForms 应用程序中使用地理编码 API。对于 API 发送请求的内容无关紧要。重要的是请求参数正确,APIkey有效
事实上,我刚刚用我自己的 API 密钥测试了您的代码,它工作正常,这让我觉得您的 API 密钥有问题。
因此尝试按照以下步骤创建一个新的:
- 登录developer console
- Select 您的项目或创建一个新项目 (1)
- 转到
Library
(2) 并搜索Geocoding API
(3) - 进入后点击
Enable
(4) 启用它 - 转到凭据并点击
Create credentials
按钮 (5) - Select
API key
来自凭据类型 (6)