我试图想出一种方法来接受以下用户输入:
查询包含以下内容的List:
过滤后的列表应仅返回输入的邮政编码&的(x)英里半径范围内的位置。计算每个距离(例如:1.2英里,0.5英里等)。有什么建议?
提前致谢!
答案 0 :(得分:1)
我们使用Google Geocoding API将ZipCode转换为客户端的纬度和经度。在AJAX请求中,我们将lat,long和distance发布到服务器代码。服务器使用纬度/经度和半径计算偏移量,从纬度和经度计算,然后搜索匹配的记录。
if (!ValidaZipCode(zipCode)) {
$("#searchZiperror").show();
$(".driverZipcode").removeClass("wouterror");
$(".driverZipcode").addClass("driverZipcodeError");
return false;
}
else {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': zipCode }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var currentlatlng = results[0].geometry.location;
if (currentlatlng) {
var lat = currentlatlng.lat();
var lng = currentlatlng.lng();
var model = {
address: zipCode,
latitude: lat,
longitude: lng,
radius: radiusValue
};
$.ajax({
url: '@Url.Action("UpdateRadius", "MyController")',
contentType: 'application/json; charset=utf-8',
type: 'POST',
dataType: 'html',
data: JSON.stringify(model)
})
.success(function (result) {
// Use the result for appropriate action
})
.error(function (xhr, status) {
// Use the status for appropriate action
});
}
}
答案 1 :(得分:0)
从理论的角度来看,你可以做到,并且有很多公式可以进行距离计算(这里有一些资源:http://www.movable-type.co.uk/scripts/latlong.html)。
但请注意,随着列表的增加,这会变得越来越昂贵,因为您必须对列表中的每个元素使用此类公式。
通常,要以有效的方式执行此类操作(以及许多其他操作),它使用的是GIS系统(http://en.wikipedia.org/wiki/Geographic_information_system,有些是开源的或免费的,如PostgreSQL带有插件,如果我这不是错的),这是专门从事这一领域的。