我有一个位置(纬度和经度)。如何获得位于我所在位置10英里半径内的部分邮政编码或全部邮政编码?
解决方案可以是调用知名的Web服务(谷歌 map ,必应 map 等)或本地数据库解决方案(客户端具有sql server 2005)或算法。
我已经看到了similar question,但是那里的所有答案几乎都与使用我不可用的SQL Server 2008地理功能有关。
最佳答案
首先,您需要一个包含所有邮政编码及其相应纬度和经度的数据库。在澳大利亚,只有几千种这样的信息(而且这些信息很容易获得),但是我认为在美国这可能是一项更加艰巨的任务。
其次,如果您知道自己的位置,并且知道要查找的半径,则可以查找该半径内的所有邮政编码。用PHP编写的一些简单内容如下:(很抱歉,它不在C#中)
function distanceFromTo($latitude1,$longitude1,$latitude2,$longitude2,$km){
$latitude1 = deg2rad($latitude1);
$longitude1 = deg2rad($longitude1);
$latitude2 = deg2rad($latitude2);
$longitude2 = deg2rad($longitude2);
$delta_latitude = $latitude2 - $latitude1;
$delta_longitude = $longitude2 - $longitude1;
$temp = pow(sin($delta_latitude/2.0),2) + cos($latitude1) * cos($latitude2) * pow(sin($delta_longitude/2.0),2);
$earth_radius = 3956;
$distance = $earth_radius * 2 * atan2(sqrt($temp),sqrt(1-$temp));
if ($km)
$distance = $distance * 1.609344;
return $distance;
}