Trong chức năng tìm kiếm các cửa hàng gần nhất cũng như chức năng thêm cửa
hàng vào CSDL việc xác định ta đều cần thông tin (Latitude , Longtitude ) của địa
chỉ người dùng nhập và cả 2 thông tin đó đều cần thiết cho việc tính toán khoảng
cách của thủ tục GetNearByLocations cũng như cần thiết cho việc hiển thị Marker
trên bản đồ Google vậy để xác định được ta phải sử dụng Google Map API và xây dựng lớp GeoCode như sau:
namespace GoogleGeocoder {
public interface ISpatialCoordinate {
decimal Latitude { get; set; } decimal Longitude { get; set; } }
///<summary>
/// Coordiate structure. Holds Latitude and Longitude.
///</summary>
public struct Coordinate : ISpatialCoordinate {
private decimal _latitude; private decimal _longitude;
public Coordinate(decimal latitude, decimal longitude) {
_latitude = latitude; _longitude = longitude; }
#region ISpatialCoordinate Members public decimal Latitude
{ get { return _latitude; } set { this._latitude = value; } }
public decimal Longitude {
} set { this._longitude = value; } } #endregion }
public class Geocode {
private const string _googleUri = "http://maps.google.com/maps/geo?q="; private const string _outputType = "csv"; // Available options: csv, xml, kml, json
///<summary>
/// Returns a Uri of the Google code Geocoding Uri.
///</summary>
///<param name="address">The address to get the geocode for.</param> ///<returns>A new Uri</returns>
private static Uri GetGeocodeUri(string address) {
string googleKey =
ConfigurationManager.AppSettings["googleApiKey"].ToString(); address = HttpUtility.UrlEncode(address);
return new Uri(String.Format("{0}{1}&output={2}&key={3}", _googleUri, address, _outputType, googleKey));
}
///<summary>
/// Gets a Coordinate from a address.
///</summary>
///<param name="address">An address.
/// <remarks> /// <example>
/// 3276 Westchester Ave, Bronx, NY 10461
/// /// or /// /// New York, NY /// /// or /// /// 10461 (just a zipcode) /// </example> /// </remarks> ///</param>
///<returns>A spatial coordinate that contains the latitude and longitude of the
address.</returns>
{
WebClient client = new WebClient(); Uri uri = GetGeocodeUri(address); /* The first number is the status code, * the second is the accuracy,
* the third is the latitude,
* the fourth one is the longitude. */
string[] geocodeInfo = client.DownloadString(uri).Split(','); return new Coordinate(Convert.ToDecimal(geocodeInfo[2]), Convert.ToDecimal(geocodeInfo[3]));
} } }
Và trước khi tìm địa chỉ các cửa hàng gần nhất ta sẽ gọi tới hàm GetCoorDinates trong lớp Geocode để lấy Latitude và Longtitude của địa chỉ người dùng nhập vào
như sau:
//Get the coordinate of the address
Coordinate coordinate = Geocode.GetCoordinates(addressTextBox.Text); Ngoài ra ta sẽ phải xây dựng DataSet cho việc chứa các địa chỉ cửa hàng tìm
được gần địa chỉ mà khách hàng nhập vào nhất gồm 2 tệp một tệp chứa design
của DataSet là LocationsData.xsd ,một tệp chứa code LocationsData.Designer.cs
Module này có 2 view một dành cho mọi người dùng tìm kiếm siêu thị gần họ nhất
, view còn lại chỉ dành cho người dùng có vai trò quản trị để thêm vị trí cửa hàng mới
Tên trang Đặc tả Đường dẫn ảo
StoreLocator.aspx Trang này cho
phép người dùng tìm kiếm siêu thị gần họ
nhất
Locator/Index
AddStoreLocation.aspx Trang này dành
cho người dùng với vai trò quản trị thêm vị trí cửa hàng mới vào CSDL Locator/AddStore