如何在从C#代码调用Google Geolocation时指定边界



首先,我知道谷歌地理定位的许可条款禁止在不显示谷歌地图上返回的位置的情况下使用该服务。

话虽如此,我正在开发一个使用谷歌地理定位的应用程序。我正在用C#构建对谷歌地理定位的请求。

在我工作的系统上,包含地址的批量记录会被发送到另一个系统进行处理,然后再发送回来。我需要知道所有这些地址的纬度和经度,它们有成千上万。问题是,这个过程可能会重复,只有少数地址实际发生了更改。我需要将这些记录与我当地的记录进行比较,看看哪些记录发生了变化。我在Javascript中无法做到这一点,所以它必须在服务器端用C#代码完成。

(我确实意识到这可以应用于任何服务器端语言,但我使用的是C#。)

请求转到http://maps.googleapis.com/maps/api/geocode/xml?address={0}&传感器=错误。这得到了纬度和经度,但我需要将结果限制在地图上的矩形区域。

在我有这个要求之前,在我的应用程序的前一个版本中,我确实按照谷歌在其文档中使用Javascript google.maps.LatLng对象的指示,在Javascript中做到了这一点。

我尝试过的一件事没有奏效,那就是我试图使用Telerik Fiddler来查看Javascript代码发送给谷歌的请求。出于某种原因,Fiddler似乎看不到这个请求。(为什么?我不知道。)

我尝试的另一件事是尝试在我的服务器上过滤结果。这也不起作用,原因很微妙。某些结果只有在偏向其所在区域时才会返回。例如,如果你经过"火奴鲁鲁",你会得到美国夏威夷火奴鲁鲁鲁的经纬度,正如你所期望的那样。然而,在北卡罗来纳州也有一个叫火奴鲁鲁的小镇。如果用户期望他在北卡罗来纳州进行搜索,他可能无法在不指定边界的情况下找到这个城镇,因为当无边界搜索时,谷歌总是会返回夏威夷檀香山。

TL;DR;当用C#这样的服务器端语言手动构建web请求时,我如何告诉谷歌地理位置在地图上的矩形范围内搜索?

边界参数的格式为

sw-lat,sw-lng|ne-lat,ne-lng

因此,对于火奴鲁鲁,北卡罗来纳州,它将是例如

bounds=35.3538404,-77.2976329|35.3720392,-77.2656181

问题是:边界参数没有限制结果(请参阅:https://developers.google.com/maps/documentation/geocoding/#Viewports)

结果(仍然是夏威夷):http://maps.googleapis.com/maps/api/geocode/xml?address=honolulu&界限=35.3538404,-77.2976329 | 35.3720392,-77.2656181

你能做的:例如,当你知道预期状态时,使用组件过滤。对于北卡罗来纳州火奴鲁鲁,参数为

 components=administrative_area:NC 

结果(在北卡罗来纳州):http://maps.googleapis.com/maps/api/geocode/xml?address=honolulu&components=administrative_area:NC

最新更新