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

时间:2015-04-06 23:12:19

标签: c# google-maps google-maps-api-3

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

话虽这么说,我正在开发一个使用Google地理位置的应用程序。我正在C#中构建对Google地理位置的请求。

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

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

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

在我满足此要求之前的应用程序的早期版本中,我确实在Javascript中执行此操作,因为Google使用Javascript google.maps.LatLng对象指导其文档。

我试过的一件事不起作用是我尝试使用Telerik Fiddler来查看通过Javascript代码发送给Google的请求。出于某种原因,这个请求似乎对Fiddler来说是不可见的。 (为什么?我不知道。)

我尝试的另一件事是尝试在我的服务器上过滤结果。由于一个微妙的原因,这也不起作用。某些结果仅在偏向其所在地区时才会返回。例如,如果您通过“檀香山”,您将获得美国夏威夷檀香山的经度和经度,正如您所期望的那样。然而,北卡罗来纳州还有一个叫做檀香山的小镇。如果用户期望他在北卡罗来纳州进行搜索,他可能无法在没有指定范围的情况下找到这个城镇,因为当搜索无限制地执行搜索时,Google将始终返回夏威夷檀香山。

TL; DR;当使用服务器端语言(如C#)手动构建Web请求时,如何告知Google地理位置在地图上的矩形方块的范围内进行搜索?

1 个答案:

答案 0 :(得分:1)

bounds-parameter的格式为

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

所以对于北卡罗来纳州檀香山来说,这将是

bounds=35.3538404,-77.2976329|35.3720392,-77.2656181

问题:bounds-parameter 不限制结果(参见:https://developers.google.com/maps/documentation/geocoding/#Viewports

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

你可以做什么:当你例如知道预期的状态,使用component-filtering。对于檀香山,NC,参数将是

 components=administrative_area:NC 

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