2014-11-23 4 views
0

У меня есть приложение asp.net mvc, в котором хранятся данные пользователей (основная информация, адресная информация и т. Д.). Теперь мне нужно, чтобы пользователь X искал другого пользователя, а затем отобразил всех других пользователей Y вместе с расстоянием между X и Y, используя их адресную информацию. Адресная информация пользователя содержит адрес, город, штат, почтовый индекс и страну. Я очень новичок в геолокации, карте google. Пожалуйста, предложите мне «как рассчитать фактическое расстояние между двумя адресами в asp.net mvc».Asp.net mvc вычисляет расстояние между двумя адресами

ответ

2

Взято из: http://www.geodatasource.com/developers/c-sharp

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
//:::                   ::: 
//::: This routine calculates the distance between two points (given the  ::: 
//::: latitude/longitude of those points). It is being used to calculate  ::: 
//::: the distance between two locations using GeoDataSource(TM) products ::: 
//:::                   ::: 
//::: Definitions:               ::: 
//::: South latitudes are negative, east longitudes are positive   ::: 
//:::                   ::: 
//::: Passed to function:             ::: 
//::: lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) ::: 
//::: lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) ::: 
//::: unit = the unit you desire for results        ::: 
//:::   where: 'M' is statute miles         ::: 
//:::     'K' is kilometers (default)       ::: 
//:::     'N' is nautical miles         ::: 
//:::                   ::: 
//::: Worldwide cities and other features databases with latitude longitude ::: 
//::: are available at http://www.geodatasource.com       ::: 
//:::                   ::: 
//::: For enquiries, please contact [email protected]     ::: 
//:::                   ::: 
//::: Official Web site: http://www.geodatasource.com      ::: 
//:::                   ::: 
//:::   GeoDataSource.com (C) All Rights Reserved 2014    ::: 
//:::                   ::: 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
private double distance(double lat1, double lon1, double lat2, double lon2, char unit) { 
    double theta = lon1 - lon2; 
    double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); 
    dist = Math.Acos(dist); 
    dist = rad2deg(dist); 
    dist = dist * 60 * 1.1515; 

    if (unit == 'K') { 
     dist = dist * 1.609344; 
    } else if (unit == 'N') { 
     dist = dist * 0.8684; 
    } 

    return (dist); 

} 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

//:: This function converts decimal degrees to radians    ::: 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
private double deg2rad(double deg) { 

    return (deg * Math.PI/180.0); 

} 



//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

//:: This function converts radians to decimal degrees    ::: 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
private double rad2deg(double rad) { 

    return (rad/Math.PI * 180.0); 
} 



Console.WriteLine(distance(32.9697, -96.80322, 29.46786, -98.53506, "M")); 
Console.WriteLine(distance(32.9697, -96.80322, 29.46786, -98.53506, "K")); 
Console.WriteLine(distance(32.9697, -96.80322, 29.46786, -98.53506, "N")); 
0

Сначала вам нужно будет получить координаты ваших адресов клиентов с Google Map Api. Это можно сделать так: http://dotnet.dzone.com/news/using-google-geocode-get-gps

Тогда вы можете получить расстояние между 2 координатами:

var pointA = DbGeography.FromText("POINT (-2.232121 53.477724)", 4326); 
var pointB = DbGeography.FromText("POINT (-2.231105 53.478121)", 4326); 

var distanceAB = pointA.Distance(pointB); //distanceAB = 80.6382796064941 metres 
+1

Stack Overflow ответы должны стоять в одиночку, даже если их ссылки разбиты. Вы должны включить соответствующий контент из этой ссылки в свой ответ. –

Смежные вопросы