Exemplo n.º 1
0
        private GeoAddress ConvertPlacemarkToAddress(CLPlacemark placemark)
        {
            var streetNumber = ConvertStreetNumberRangeToSingle(placemark.SubThoroughfare);
            var fullAddress  = ConvertAddressDictionaryToFullAddress(placemark.AddressDictionary);

            // replace corrected street number in the full address
            if (streetNumber.HasValue())
            {
                fullAddress = fullAddress.Replace(placemark.SubThoroughfare, streetNumber);
            }

            var geoAddress = new GeoAddress
            {
                StreetNumber = streetNumber,
                Street       = placemark.Thoroughfare,
                Latitude     = placemark.Location.Coordinate.Latitude,
                Longitude    = placemark.Location.Coordinate.Longitude,
                City         = placemark.Locality ?? placemark.SubLocality,
                FullAddress  = fullAddress,
                State        = placemark.AdministrativeArea,
                ZipCode      = placemark.PostalCode
            };

            return(geoAddress);
        }
        private GeoAddress ConvertAddressToGeoAddress(Address address)
        {
            var streetNumber = ConvertStreetNumberRangeToSingle(address.SubThoroughfare, address.PostalCode);
            var fullAddress  = GetFormatFullAddress(address);

            // replace corrected street number in the full address
            if (streetNumber.HasValue())
            {
                fullAddress = fullAddress.Replace(address.SubThoroughfare, streetNumber);
            }

            var geoAddress = new GeoAddress
            {
                StreetNumber = streetNumber,
                Street       = address.Thoroughfare,
                Latitude     = address.Latitude,
                Longitude    = address.Longitude,
                City         = address.Locality ?? address.SubLocality,
                FullAddress  = fullAddress,
                State        = address.AdminArea,
                ZipCode      = address.PostalCode
            };

            return(geoAddress);
        }
Exemplo n.º 3
0
        /// <summary>行政区划区域检索</summary>
        /// <remarks>
        /// http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
        /// </remarks>
        /// <param name="query"></param>
        /// <param name="tag"></param>
        /// <param name="region"></param>
        /// <param name="formatAddress"></param>
        /// <returns></returns>
        public async Task <GeoAddress> PlaceSearchAsync(String query, String tag, String region, Boolean formatAddress = true)
        {
            // 编码
            query  = HttpUtility.UrlEncode(query);
            tag    = HttpUtility.UrlEncode(tag);
            region = HttpUtility.UrlEncode(region);

            var url = _placeUrl + $"&query={query}&tag={tag}&region={region}&city_limit=true&ret_coordtype={CoordType}";

            var list = await InvokeAsync <IList <Object> >(url, "results");

            if (list == null || list.Count == 0)
            {
                return(null);
            }

            var rs = list.FirstOrDefault() as IDictionary <String, Object>;

            if (rs == null)
            {
                return(null);
            }

            var geo = new GeoAddress();

            if (rs["location"] is IDictionary <String, Object> ds && ds.Count >= 2)
            {
                var point = new GeoPoint
                {
                    Longitude = ds["lng"].ToDouble(),
                    Latitude  = ds["lat"].ToDouble()
                };

                geo.Location = point;
            }
Exemplo n.º 4
0
        /// <summary>根据坐标获取地址</summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(GeoPoint point)
        {
            var rs = await GetGeocoderAsync(point);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            if (rs["location"] is IDictionary <String, Object> ds && ds.Count >= 2)
            {
                point.Longitude = ds["lng"].ToDouble();
                point.Latitude  = ds["lat"].ToDouble();
            }

            var addr = new GeoAddress
            {
                Address    = rs["formatted_address"] + "",
                Confidence = rs["confidence"].ToInt(),
            };

            if (rs["addressComponent"] is IDictionary <String, Object> component)
            {
                var reader = new JsonReader();
                reader.ToObject(component, null, addr);

                addr.Code         = component["adcode"].ToInt();
                addr.Township     = component["town"] + "";
                addr.StreetNumber = component["street_number"] + "";
            }

            addr.Location = point;

            return(addr);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Get the latitude and longitude from an address
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public static GeoLocation GetLocationFromAddress(GeoAddress address)
        {
            var requestUri  = GetLocationConversionUrl(address);
            var geolocation = new GeoLocation();

            using (var wc = new WebClient())
            {
                var result = wc.DownloadString(new Uri(requestUri));
                var xmlElm = XElement.Parse(result);

                var status = (from elm in xmlElm.Descendants()
                              where elm.Name == "status"
                              select elm).FirstOrDefault();
                //Console.WriteLine("Google Status {0}", status);
                if (status != null && status.Value.ToLower() == "ok")
                {
                    var location = (from elm in xmlElm.Descendants()
                                    where elm.Name == "location"
                                    select elm).FirstOrDefault();
                    if (location != null)
                    {
                        var lat = location.Descendants("lat").First().Value;
                        var lng = location.Descendants("lng").First().Value;
                        geolocation.Latitude  = lat;
                        geolocation.Longitude = lng;
                    }
                }
            }
            return(geolocation);
        }
Exemplo n.º 6
0
        /// <summary>根据坐标获取地址</summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(GeoPoint point)
        {
            var rs = await GetGeocoderAsync(point);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var geo = new GeoAddress
            {
                Address = rs["formatted_address"] + ""
            };

            geo.Location = new GeoPoint
            {
                Longitude = point.Longitude,
                Latitude  = point.Latitude
            };
            if (rs["addressComponent"] is IDictionary <String, Object> component)
            {
                var reader = new JsonReader();
                reader.ToObject(component, null, geo);

                geo.Code = component["adcode"].ToInt();

                geo.Township = null;
                geo.Towncode = null;
                if (component["township"] is String ts)
                {
                    geo.Township = ts;
                }
                if (component["towncode"] is String tc)
                {
                    geo.Towncode = tc;
                }

                // 去掉乡镇代码后面多余的0
                var tcode = geo.Towncode;
                if (!tcode.IsNullOrEmpty() && tcode.Length > 6 + 3)
                {
                    geo.Towncode = tcode.TrimEnd("000");
                }

                if (component["streetNumber"] is IDictionary <String, Object> sn && sn.Count > 0)
                {
                    geo.Street       = sn["street"] + "";
                    geo.StreetNumber = sn["number"] + "";
                }
            }

            geo.Location = point;
            // 替换竖线
            if (!geo.Address.IsNullOrEmpty())
            {
                geo.Address = geo.Address.Replace("|", null);
            }

            return(geo);
        }
Exemplo n.º 7
0
        public async Task FindLocationAsync_ValidUSAddressQuery_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByQueryParameters();

            parameters.Query = GeoAddress.CreateAddress(
                "1 Microsoft Way",
                "Redmond",
                "WA",
                "98052",
                "US");

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().First().Name, Is.EqualTo("1 Microsoft Way, Redmond, WA 98052"));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q").Value, Is.EqualTo(parameters.Query.GetFormattedString()));
        }
Exemplo n.º 8
0
        public async Task FindLocationAsync_ValidLocationQueryMaxResults10_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByQueryParameters();

            parameters.MaxResults = new MaxResults(10);
            parameters.Query      = GeoAddress.CreateLandmark("Greenville");

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.EqualTo(10));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q").Value, Is.EqualTo(parameters.Query.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "maxRes"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "maxRes").Value, Is.EqualTo(new MaxResults(10).Key));
        }
Exemplo n.º 9
0
        public async Task FindLocationAsync_ValidLandMarkQueryIncludingNeighborhood_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByQueryParameters();

            parameters.IncludeNeighborhood = IncludeNeighborhood.Include;
            parameters.Query = GeoAddress.CreateLandmark("Brookyln New York");

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().EstimatedTotal, Is.EqualTo(3));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(p => p.EntityType == "PopulatedPlace"), Is.EqualTo(1));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(p => p.EntityType == "Neighborhood"), Is.EqualTo(2));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "q").Value, Is.EqualTo(parameters.Query.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "inclnb"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "inclnb").Value, Is.EqualTo(IncludeNeighborhood.Include.Key));
        }
Exemplo n.º 10
0
        /// <summary>查询地址获取坐标</summary>
        /// <param name="address">地址</param>
        /// <param name="city">城市</param>
        /// <param name="formatAddress">是否格式化地址</param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(String address, String city = null, Boolean formatAddress = false)
        {
            var rs = await GetGeocoderAsync(address, city);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var ds = rs["location"] as IDictionary <String, Object>;

            if (ds == null || ds.Count < 2)
            {
                return(null);
            }

            var gp = new GeoPoint
            {
                Longitude = ds["lng"].ToDouble(),
                Latitude  = ds["lat"].ToDouble()
            };

            if (formatAddress)
            {
                return(await GetGeoAsync(gp));
            }

            var geo = new GeoAddress
            {
                Location = gp,
                Level    = rs["level"] + ""
            };

            return(geo);
        }
Exemplo n.º 11
0
        public static List <float> GeoLocationApiUserAddress(string userName, ApplicationDbContext context, string convertedAddress)
        {
            try
            {
                List <float> location   = new List <float>();
                GeoAddress   geoAddress = new GeoAddress();
                var          client     = new RestClient("https://maps.googleapis.com/maps/api/geocode/json?address=" + convertedAddress + "&key=AIzaSyCCt_tk8Is_0wRtffA3H0YHZEs_8ZwRO3U");
                var          request    = new RestRequest(Method.GET);
                request.AddHeader("postman-token", "d0687862-1bdc-4966-e25f-ad919249e058");
                request.AddHeader("cache-control", "no-cache");
                request.AddHeader("authorization", "Basic QUl6YVN5Q0N0X3RrOElzXzB3UnRmZkEzSDBZSFpFc184WndSTzNVOg==");
                IRestResponse <GeoLocationData> response = client.Execute <GeoLocationData>(request);

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    geoAddress.address = response.Data.results[0].formatted_address;
                    var lattitude = response.Data.results[0].geometry[0].location[0].lat;
                    var longitude = response.Data.results[0].geometry[0].location[0].lng;
                    location.Add(lattitude);
                    location.Add(longitude);
                    return(location);
                }
                return(null);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// To the address.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <returns>IAddress.</returns>
        public static IGeoAddress ToAddress(this Place source)
        {
            if (source == null)
            {
                return(null);
            }

            var address = new GeoAddress
            {
                Name  = source.Name,
                Line1 = string.Format("{0} {1}",
                                      source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.StreetNumber))
                                      .Select(x => x.LongName)
                                      .FirstOrDefault(),
                                      source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.Route))
                                      .Select(x => x.LongName)
                                      .FirstOrDefault()),
                City =
                    source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.Locality))
                    .Select(x => x.LongName)
                    .FirstOrDefault(),
                Region = source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.AdministrativeAreaLevel1))
                         .Select(x => x.LongName)
                         .FirstOrDefault(),
                Country =
                    source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.Country))
                    .Select(x => x.LongName)
                    .FirstOrDefault(),
                PostalCode =
                    source.AddressComponents?.Where(x => x.Types.Any(x1 => x1 == GoogleAddressTypes.PostalCode))
                    .Select(x => x.LongName)
                    .FirstOrDefault(),
                PhoneNumber = source.FormattedPhoneNumber,
                Location    =
                {
                    Latitude  = source.Geometry?.Location.Latitude,
                    Longitude = source.Geometry?.Location.Longitude
                },
                Source =
                {
                    Provider    = "google",
                    ObjectID    = source.PlaceID,
                    RetrievedOn = DateTime.Now
                }
            };

            foreach (var addressType in source.Types)
            {
                if (Enum.TryParse <AddressTypes>(addressType.ToString(), out AddressTypes at))
                {
                    address.AddressType.Add(at);
                }
            }

            return(address);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Get the latitude and longitude from an address
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public static GeoLocation GetLocationFromAddress(GeoAddress address)
        {
            var requestUri  = GetLocationConversionUrl(address);
            var geolocation = new GeoLocation();

            using (var wc = new WebClient())
            {
                var result = wc.DownloadString(new Uri(requestUri));
                var xmlElm = XElement.Parse(result);

                var status = (from elm in xmlElm.Descendants()
                              where elm.Name == "status"
                              select elm).FirstOrDefault();
                //Console.WriteLine("Google Status {0}", status);
                if (status != null && status.Value.ToLower() == "ok")
                {
                    var location = (from elm in xmlElm.Descendants()
                                    where elm.Name == "location"
                                    select elm).FirstOrDefault();
                    var locatoinType = (from elm in xmlElm.Descendants()
                                        where elm.Name == "location_type"
                                        select elm).FirstOrDefault();
                    if (location != null)
                    {
                        var lat = location.Descendants("lat").First().Value;
                        var lng = location.Descendants("lng").First().Value;
                        geolocation.Latitude  = lat;
                        geolocation.Longitude = lng;
                    }
                    if (locatoinType != null)
                    {
                        var type = locatoinType.Value;
                        switch (type)
                        {
                        case "APPROXIMATE":
                            geolocation.LocationType = LocationType.Approximate;
                            break;

                        case "ROOFTOP":
                            geolocation.LocationType = LocationType.Rooftop;
                            break;

                        case "RANGE_INTERPOLATED":
                            geolocation.LocationType = LocationType.RangeInterpolated;
                            break;

                        case "GEOMETRIC_CENTER":
                            geolocation.LocationType = LocationType.GeometricCenter;
                            break;
                        }
                    }
                }
            }
            return(geolocation);
        }
        public Address ConvertToAddress(GeoAddress geoAddress, string placeName, bool foundByName)
        {
            var address = new Address
            {
                FriendlyName = placeName,
                FullAddress  = geoAddress.FullAddress,
                Id           = Guid.NewGuid(),
                Latitude     = geoAddress.Latitude,
                Longitude    = geoAddress.Longitude,
                StreetNumber = geoAddress.StreetNumber,
                Street       = geoAddress.Street,
                ZipCode      = geoAddress.ZipCode,
                City         = geoAddress.City,
                State        = geoAddress.State,
                PlaceId      = geoAddress.Id
            };

            address.AddressType  = "postal";
            address.StreetNumber = address.StreetNumber ?? "";

            var isRange = !foundByName && geoAddress.LocationType == "RANGE_INTERPOLATED";

            //indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.

            //Mega patch for Four Twos!!! When you search for 2107 Utopia Pkwy, google returns 21-7.
            //If the search was done by name ( foundByName == true ) we assume that it's an address not a range.
            //If the search was done by geolocation ( foundByName == false ), we check the type returned by google.
            //If the search was done by name ( foundByName == true ), and the address has 2 component 21-7, the second component must be padded with a zero.
            //If the removal of the dash '-' is demanded by a company (namely in queens, by FourTwos) make a setting to remove it. Places like the UK has addresses with valid dashes.

            var components = address.StreetNumber.Split('-');

            if (isRange && address.StreetNumber.Contains("-"))
            {
                var firstMiddleCount = (components.Length / 2);

                var newStreetNumber = components.Select(AddLeadingZeroIfSingleNumber).Take(firstMiddleCount).JoinBy("-");
                ChangeStreetNumber(address, newStreetNumber);
            }

            if (address.StreetNumber.Contains("-") && components.Length == 2)
            {
                var newStreetNumber = components.Select(AddLeadingZeroIfSingleNumber).JoinBy("-");

                ChangeStreetNumber(address, newStreetNumber);
            }

            if (address.StreetNumber.IsNullOrEmpty() && placeName.HasValue())
            {
                address.FullAddress = string.Format("{0}{1}", placeName, address.FullAddress.HasValueTrimmed() ? string.Format(", {0}", address.FullAddress.ToSafeString()) : "");
            }

            return(address);
        }
Exemplo n.º 15
0
        private static GeoAddress MakeLocation(string latitudeString, string longitudeString)
        {
            double     temp;
            GeoAddress result = new GeoAddress();

            if (latitudeString != null && double.TryParse(latitudeString, out temp))
            {
                result.Latitude = temp;
            }
            if (longitudeString != null && double.TryParse(longitudeString, out temp))
            {
                result.Longitude = temp;
            }
            return(result);
        }
Exemplo n.º 16
0
        private void btnOk_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (lvList.SelectedItems.Count > 0)
            {
                Result = (lvList.SelectedItem as GeolocationItem).RawData;

                DialogResult = true;
            }
            else
            {
                DialogResult = false;
            }

            this.Close();
        }
        public static GeoAddress ConvertGeoObjectToAddress(GeoObj geoResult)
        {
            var address = new GeoAddress
            {
                FullAddress = geoResult.Formatted_address,
                Latitude    = geoResult.Geometry.Location.Lat,
                Longitude   = geoResult.Geometry.Location.Lng
            };

            geoResult.Address_components
            .FirstOrDefault(x => x.AddressComponentTypes.Any(t => t == AddressComponentType.Street_number))
            .Maybe(x => address.StreetNumber = x.Long_name);

            var component = (from c in geoResult.Address_components
                             where
                             (c.AddressComponentTypes.Any(
                                  x => x == AddressComponentType.Route || x == AddressComponentType.Street_address) &&
                              !string.IsNullOrEmpty(c.Long_name))
                             select c).FirstOrDefault();

            component.Maybe(c => address.Street = c.Long_name);

            geoResult.Address_components
            .FirstOrDefault(x => x.AddressComponentTypes.Any(t => t == AddressComponentType.Postal_code))
            .Maybe(x => address.ZipCode = x.Long_name);

            geoResult.Address_components
            .FirstOrDefault(x => x.AddressComponentTypes.Any(t => t == AddressComponentType.Locality))
            .Maybe(x => address.City = x.Long_name);

            if (address.City == null)
            {
                // some times, the city is not set by Locality, for example in Brooklyn and Queens
                geoResult.Address_components
                .FirstOrDefault(x => x.AddressComponentTypes.Any(t => t == AddressComponentType.Sublocality))
                .Maybe(x => address.City = x.Long_name);
            }

            geoResult.Address_components
            .FirstOrDefault(x => x.AddressComponentTypes.Any(t => t == AddressComponentType.Administrative_area_level_1))
            .Maybe(x => address.State = x.Short_name);

            address.LocationType = geoResult.Geometry.Location_type;

            return(address);
        }
        public async Task CalculateRoutesAsync_TransitRoute_ValidRoutes()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingRoutes>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service          = serviceMock.Object;
            var goldenGateBridge = GeoAddress.CreateLandmark("Golden Gate Bridge");
            var fishermansWharf  = GeoAddress.CreateLandmark("Fishermans Wharf");
            var parameters       = new CalculateRoutesParameters();

            parameters.WayPoints          = new[] { goldenGateBridge, fishermansWharf };
            parameters.TransiteTimeType   = TransiteTimeType.Departure;
            parameters.DesireTransiteTime = DateTime.Today.AddHours(3);
            parameters.TravelMode         = TravelMode.Transit;

            var response = await service.CalculateRoutesAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.EqualTo(1));
            Assert.That(response.ResourceSets[0].Resources.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets[0].Resources.All(r => r is Route), Is.EqualTo(true));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Routes"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0").Value, Is.EqualTo(goldenGateBridge.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1").Value, Is.EqualTo(fishermansWharf.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "dt"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "dt").Value, Is.EqualTo(parameters.DesireTransiteTime.Value.ToString(BingRoutes.DateFormatMMddyyyy_HHmmss)));
            Assert.That(request.Parameters.Find(x => x.Name == "tt"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "tt").Value, Is.EqualTo(TransiteTimeType.Departure.Key));
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode").Value, Is.EqualTo(TravelMode.Transit.Key));
        }
        public async Task CalculateRoutesAsync_DrivingRouteWithRoutePath_ValidRoutes()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingRoutes>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service     = serviceMock.Object;
            var minneapolis = GeoAddress.CreateAddress("Minneapolis", "MN");
            var stPaul      = GeoAddress.CreateAddress("St. Paul", "MN");
            var parameters  = new CalculateRoutesParameters();

            parameters.TravelMode        = TravelMode.Driving;
            parameters.WayPoints         = new[] { minneapolis, stPaul };
            parameters.RouteOptimization = RouteOptimization.Distance;
            parameters.RouteAttributes   = new [] { RouteAttribute.RoutePath };

            var response = await service.CalculateRoutesAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.EqualTo(1));
            Assert.That(response.ResourceSets[0].Resources.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets[0].Resources.All(r => r is Route), Is.EqualTo(true));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Routes"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0").Value, Is.EqualTo(minneapolis.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1").Value, Is.EqualTo(stPaul.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode").Value, Is.EqualTo(TravelMode.Driving.Key));
            Assert.That(request.Parameters.Find(x => x.Name == "optmz"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "optmz").Value, Is.EqualTo(RouteOptimization.Distance.Key));
            Assert.That(request.Parameters.Find(x => x.Name == "ra"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "ra").Value, Is.EqualTo(RouteAttribute.RoutePath.Key));
        }
Exemplo n.º 20
0
        private GeoAddress GetAddressFromLocations(List <Location> locations)
        {
            Location firstLoc = locations.FirstOrDefault();

            if (firstLoc != null)
            {
                var geoAddress = new GeoAddress();
                geoAddress.Name        = firstLoc.Name;
                geoAddress.Address     = firstLoc.Address?.AddressLine;
                geoAddress.City        = firstLoc.Address?.Locality;
                geoAddress.CountryCode = firstLoc.Address?.CountryRegionIso2;
                geoAddress.Country     = firstLoc.Address?.CountryRegion;
                geoAddress.Distric1    = firstLoc.Address?.AdminDistrict;
                geoAddress.Distric2    = firstLoc.Address?.AdminDistrict2;
                geoAddress.EntityType  = firstLoc.EntityType;
                return(geoAddress);
            }

            return(null);
        }
        public async Task CalculateRoutesAsync_WalkingRoute_ValidRoutes()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingRoutes>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service      = serviceMock.Object;
            var eiffelTower  = GeoAddress.CreateLandmark("Eiffel Tower");
            var louvreMuseum = GeoAddress.CreateLandmark("louvre museum");
            var parameters   = new CalculateRoutesParameters();

            parameters.WayPoints         = new[] { eiffelTower, louvreMuseum };
            parameters.RouteOptimization = RouteOptimization.Distance;
            parameters.TravelMode        = TravelMode.Walking;

            var response = await service.CalculateRoutesAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.EqualTo(1));
            Assert.That(response.ResourceSets[0].Resources.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets[0].Resources.All(r => r is Route), Is.EqualTo(true));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Routes"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.0").Value, Is.EqualTo(eiffelTower.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "wp.1").Value, Is.EqualTo(louvreMuseum.GetFormattedString()));
            Assert.That(request.Parameters.Find(x => x.Name == "optmz"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "optmz").Value, Is.EqualTo(RouteOptimization.Distance.Key));
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "travelMode").Value, Is.EqualTo(TravelMode.Walking.Key));
        }
Exemplo n.º 22
0
        /// <summary>查询地址获取坐标</summary>
        /// <param name="address">地址</param>
        /// <param name="city">城市</param>
        /// <param name="formatAddress">是否格式化地址</param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(String address, String city = null, Boolean formatAddress = false)
        {
            var rs = await GetGeocoderAsync(address, city);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var ds = rs["location"] as IDictionary <String, Object>;

            if (ds == null || ds.Count < 2)
            {
                return(null);
            }

            var gp = new GeoPoint
            {
                Longitude = ds["lng"].ToDouble(),
                Latitude  = ds["lat"].ToDouble()
            };

            var geo = new GeoAddress
            {
                Location = gp,
            };

            if (formatAddress && gp != null)
            {
                geo = await GetGeoAsync(gp);
            }

            geo.Precise    = rs["precise"].ToBoolean();
            geo.Confidence = rs["confidence"].ToInt();
            geo.Level      = rs["level"] + "";

            return(geo);
        }
Exemplo n.º 23
0
Arquivo: AMap.cs Projeto: xchit/X
        /// <summary>根据坐标获取地址</summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(GeoPoint point)
        {
            var rs = await GetGeocoderAsync(point);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var addr = new GeoAddress
            {
                Address = rs["formatted_address"] + ""
            };

            addr.Location = new GeoPoint
            {
                Longitude = point.Longitude,
                Latitude  = point.Latitude
            };
            if (rs["addressComponent"] is IDictionary <String, Object> component)
            {
                var reader = new JsonReader();
                reader.ToObject(component, null, addr);

                addr.Code     = component["adcode"].ToInt();
                addr.Township = component["town"] + "";

                if (rs["street_number"] is IDictionary <String, Object> sn && sn.Count > 0)
                {
                    addr.Street       = sn["street"] + "";
                    addr.StreetNumber = component["street_number"] + "";
                }
            }

            addr.Location = point;

            return(addr);
        }
Exemplo n.º 24
0
Arquivo: AMap.cs Projeto: xchit/X
        /// <summary>查询地址获取坐标</summary>
        /// <param name="address">地址</param>
        /// <param name="city">城市</param>
        /// <param name="formatAddress">是否格式化地址。高德地图默认已经格式化地址</param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(String address, String city = null, Boolean formatAddress = false)
        {
            var rs = await GetGeocoderAsync(address, city);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var gp = new GeoPoint();

            var ds = (rs["location"] + "").Split(",");

            if (ds != null && ds.Length >= 2)
            {
                gp.Longitude = ds[0].ToDouble();
                gp.Latitude  = ds[1].ToDouble();
            }

            if (formatAddress)
            {
                return(await GetGeoAsync(gp));
            }

            var addr = new GeoAddress();

            var reader = new JsonReader();

            reader.ToObject(rs, null, addr);

            addr.Code         = rs["adcode"].ToInt();
            addr.Township     = rs["township"] + "";
            addr.StreetNumber = rs["number"] + "";

            addr.Location = gp;

            return(addr);
        }
Exemplo n.º 25
0
        /// <summary>
        /// Get the address from a latitude and longitude
        /// </summary>
        /// <param name="location"><see cref="GeoLocation"/></param>
        /// <returns>Null if no address is resolved</returns>
        public static GeoAddress GetAddressFromLatLong(GeoLocation location)
        {
            var requestUri = GetAddressConversionUrl(location);

            using (var wc = new WebClient())
            {
                try
                {
                    var result = wc.DownloadString(new Uri(requestUri));
                    var xmlElm = XElement.Parse(result);
                    var status = (from elm in xmlElm.Descendants()
                                  where elm.Name == "status"
                                  select elm).FirstOrDefault();
                    Console.WriteLine("Google Status {0}", status);
                    if (status != null && status.Value.ToLower() == "ok")
                    {
                        var address = new GeoAddress();
                        var street  = string.Empty;
                        var country = string.Empty;
                        var city    = string.Empty;
                        var zip     = string.Empty;
                        var region1 = string.Empty;
                        var region2 = string.Empty;
                        var region3 = string.Empty;
                        foreach (var descendant in xmlElm.Descendants("address_component"))
                        {
                            var type = descendant.Descendants("type").FirstOrDefault();
                            if (type != null && type.Value == "street_number")
                            {
                                address.Number = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "route")
                            {
                                street = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "locality")
                            {
                                city = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "administrative_area_level_3")
                            {
                                region3 = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "administrative_area_level_2")
                            {
                                region2 = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "administrative_area_level_1")
                            {
                                region1 = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "country")
                            {
                                country = descendant.Descendants("long_name").First().Value;
                            }
                            if (type != null && type.Value == "postal_code")
                            {
                                zip = descendant.Descendants("long_name").First().Value;
                            }
                            //Console.WriteLine(descendant.Name);
                        }
                        address.City    = city;
                        address.Zip     = zip;
                        address.Country = country;
                        address.Region1 = region1;
                        address.Region2 = region2;
                        address.Region3 = region3;
                        address.Street  = street;
                        return(address);
                    }
                    return(null);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return(null);
                }
            }
        }
Exemplo n.º 26
0
        /// <summary>查询地址获取坐标</summary>
        /// <param name="address">地址</param>
        /// <param name="city">城市</param>
        /// <param name="formatAddress">是否格式化地址。高德地图默认已经格式化地址</param>
        /// <returns></returns>
        public async Task <GeoAddress> GetGeoAsync(String address, String city = null, Boolean formatAddress = false)
        {
            var rs = await GetGeocoderAsync(address, city);

            if (rs == null || rs.Count == 0)
            {
                return(null);
            }

            var gp = new GeoPoint();

            var ds = (rs["location"] + "").Split(",");

            if (ds != null && ds.Length >= 2)
            {
                gp.Longitude = ds[0].ToDouble();
                gp.Latitude  = ds[1].ToDouble();
            }

            var geo    = new GeoAddress();
            var reader = new JsonReader();

            reader.ToObject(rs, null, geo);

            geo.Code = rs["adcode"].ToInt();

            if (rs["township"] is IList <Object> ts && ts.Count > 0)
            {
                geo.Township = ts[0] + "";
            }
            if (rs["number"] is IList <Object> ns && ns.Count > 0)
            {
                geo.StreetNumber = ns[0] + "";
            }

            geo.Location = gp;

            if (formatAddress)
            {
                var geo2 = await GetGeoAsync(gp);

                if (geo2 != null)
                {
                    geo = geo2;
                    if (geo.Level.IsNullOrEmpty())
                    {
                        geo.Level = rs["level"] + "";
                    }
                }
            }

            {
                var addr = rs["formatted_address"] + "";
                if (!addr.IsNullOrEmpty())
                {
                    geo.Address = addr;
                }
            }
            // 替换竖线
            if (!geo.Address.IsNullOrEmpty())
            {
                geo.Address = geo.Address.Replace("|", null);
            }

            return(geo);
        }
Exemplo n.º 27
0
        public async Task <GeoAddress> DecodeAsync(
            double latitude,
            double longitude,
            CancellationToken cancellationToken)
        {
            string id = $"{latitude}_{longitude}";

            GeoAddressCache cached = await _mediaStoreContext.GeoAddressCache.AsQueryable()
                                     .Where(x => x.Id == id)
                                     .FirstOrDefaultAsync(cancellationToken);

            if (cached != null)
            {
                return(new GeoAddress
                {
                    Address = cached.Address,
                    City = cached.City,
                    Country = cached.Country,
                    CountryCode = cached.CountryCode,
                    Distric1 = cached.Distric1,
                    Distric2 = cached.Distric2,
                    EntityType = cached.EntityType,
                    Name = cached.Name,
                });
            }

            GeoAddress geoAddress = await _geoDecoderService.DecodeAsync(
                latitude,
                longitude,
                cancellationToken);

            if (geoAddress != null)
            {
                cached = new GeoAddressCache
                {
                    Address     = geoAddress.Address,
                    City        = geoAddress.City,
                    Country     = geoAddress.Country,
                    CountryCode = geoAddress.CountryCode,
                    Distric1    = geoAddress.Distric1,
                    Distric2    = geoAddress.Distric2,
                    EntityType  = geoAddress.EntityType,
                    Name        = geoAddress.Name,
                    Id          = id
                };
            }
            else
            {
                cached = new GeoAddressCache
                {
                    Id = id
                };
            }

            await _mediaStoreContext.GeoAddressCache.InsertOneAsync(
                cached,
                options : null,
                cancellationToken);

            return(geoAddress);
        }
Exemplo n.º 28
0
 private static Address ToAddress(GeoAddress geoAddress)
 {
     return(new GeoObjToAddressMapper().ConvertToAddress(geoAddress, null, false));
 }
Exemplo n.º 29
0
 private void ChangeLocation(GeoAddress address)
 {
     location = address;
     OnPropertyChanged(() => MapBounds);
 }
Exemplo n.º 30
0
 private void ChangeLocation(LocationRect box)
 {
     location           = new GeoAddress();
     location.Longitude = box.Center.Longitude;
     location.Latitude  = box.Center.Latitude;
 }