static void Main(string[] args) { Views view = new Views(); List <Contract> contracts = view.getContracts(); foreach (var c in view.getContracts()) { Console.WriteLine(c.name); } Contract contract1 = contracts[0]; List <Station> stations = view.getStations(contract1); foreach (var c in stations) { Console.WriteLine("La stations de : " + c.name); } //view.getInfos(2,"rouen"); GeoCoordinatePortable.GeoCoordinate g = new GeoCoordinatePortable.GeoCoordinate(49.443232, 1.099971); Station s = view.findClosestStation(g, stations); Console.WriteLine(s.name); }
private SuggestionsResult GetSuggestionsInternal(string partialMatch, GeoCoordinatePortable.GeoCoordinate location, List <string> scoringStrategies) { if (string.IsNullOrEmpty(partialMatch)) // no input ==> no output! { return(new SuggestionsResult()); } var matchingCities = Dataset.Where(c => c.Name.StartsWith(partialMatch, StringComparison.CurrentCultureIgnoreCase)).ToList(); var scores = new List <double>(matchingCities.Select(mc => 1.0)); foreach (var strategyName in scoringStrategies) { var strat = Factory.CreateScoringStrategy(strategyName); var newScores = strat.ComputeScore(matchingCities, partialMatch, location); scores = scores.Zip(newScores, (oldScore, newScore) => oldScore * newScore).ToList(); } var resultItems = matchingCities.Zip(scores, (c, score) => new SuggestionsResultItem() { name = c.Name, latitude = c.Location.Latitude.ToString(), longitude = c.Location.Longitude.ToString(), score = Math.Round(score, 2) }) .OrderByDescending(mc => mc.score); var result = new SuggestionsResult(); foreach (var i in resultItems) { result.AddItem(i); } return(result); }
public ResponseMessage <List <RecyclingBank> > GetAllClose(RecyclingBankRequest _recyclingBankRequest) { ResponseMessage <List <RecyclingBank> > response = new ResponseMessage <List <RecyclingBank> >(); try { List <RecyclingBank> banks = _recyclingBankRepository.GetAll(); var currentLocation = new GeoCoordinatePortable.GeoCoordinate(double.Parse(_recyclingBankRequest.Coordinate.Split(',')[0], CultureInfo.InvariantCulture), double.Parse(_recyclingBankRequest.Coordinate.Split(',')[1], CultureInfo.InvariantCulture)); foreach (var item in banks) { var bankLocation = new GeoCoordinatePortable.GeoCoordinate(double.Parse(item.Position.Split(',')[0], CultureInfo.InvariantCulture), double.Parse(item.Position.Split(',')[1], CultureInfo.InvariantCulture)); if (currentLocation.GetDistanceTo(bankLocation) < (_recyclingBankRequest.Radius * 1000)) { response.ResponseObject.Add(item); } } response.IsSuccess = true; response.ErrorMessage = "Success"; } catch (Exception ex) { response.IsSuccess = false; response.ErrorMessage = ex.Message; } return(response); }
public static void ComputeDistance(Route route) { var coordinates = route.Coordinates .Split('\n') .ToList() .Select(c => c.Split(',').Select(c => double.Parse(c, CultureInfo.InvariantCulture)).ToList()) .ToList(); var distance = 0d; for (var index = 1; index < coordinates.Count; index++) { var start = new GeoCoordinatePortable.GeoCoordinate(coordinates[index - 1][1], coordinates[index - 1][0]); var end = new GeoCoordinatePortable.GeoCoordinate(coordinates[index][1], coordinates[index][0]); distance += start.GetDistanceTo(end); } distance = Math.Round(distance / 1000, 3); route.CalculatedDistance = Math.Round(distance * 1.0064, 2); }
public double GetDistance(double xLa, double xLong, double yLa, double yLong) { GeoCoordinatePortable.GeoCoordinate cordx = new GeoCoordinatePortable.GeoCoordinate(xLa, xLong); GeoCoordinatePortable.GeoCoordinate cordy = new GeoCoordinatePortable.GeoCoordinate(yLa, yLong); return(cordx.GetDistanceTo(cordy)); }
public async Task <SubscriptionMatchGroup> GetSubscriptionMatches(OCM.Core.Data.OCMEntities dataModel, POIManager poiManager, OCM.Core.Data.UserSubscription subscription, Model.CoreReferenceData refData, DateTime?dateFrom = null) { SubscriptionMatchGroup subscriptionMatchGroup = new SubscriptionMatchGroup(); var checkFromDate = DateTime.UtcNow.AddMinutes(-CHECK_INTERVAL_MINS); //check from last 5 mins etc if (subscription.DateLastNotified != null) { checkFromDate = subscription.DateLastNotified.Value; //check from date last notified } else { checkFromDate = subscription.DateCreated; } if (dateFrom != null) { checkFromDate = dateFrom.Value; } subscriptionMatchGroup.DateFrom = checkFromDate; //FIXME: re-test with updated coordinate objects (nettopology etc) GeoCoordinatePortable.GeoCoordinate searchPos = null; UserSubscriptionFilter filter = null; if (subscription.FilterSettings != null) { try { filter = JsonConvert.DeserializeObject <UserSubscriptionFilter>(subscription.FilterSettings); } catch (Exception) { //failed to parse subscription filter } } if (subscription.Latitude != null && subscription.Longitude != null) { searchPos = new GeoCoordinatePortable.GeoCoordinate((double)subscription.Latitude, (double)subscription.Longitude); } if (subscription.NotifyEmergencyChargingRequests) { var emergencyCharging = dataModel.UserChargingRequests.Where(c => c.DateCreated >= checkFromDate && c.IsActive == true && c.IsEmergency == true); var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.ChargingRequestEmergency, Description = "New Emergency Charging Requests" }; foreach (var chargingRequest in emergencyCharging) { //filter on location if (searchPos != null) { if (GeoManager.CalcDistance(chargingRequest.Latitude, chargingRequest.Longitude, (double)searchPos.Latitude, (double)searchPos.Longitude, DistanceUnit.KM) < subscription.DistanceKm) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = chargingRequest }); } } else { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = chargingRequest }); } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } if (subscription.NotifyGeneralChargingRequests) { //TODO: subscription not filtered on lat/long will return global charging requests var generalCharging = dataModel.UserChargingRequests.Where(c => c.DateCreated >= checkFromDate && c.IsActive == true && c.IsEmergency == false); var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.ChargingRequestGeneral, Description = "New Charging Requests" }; //filter on location foreach (var gc in generalCharging) { if (searchPos != null) { if (GeoManager.CalcDistance(gc.Latitude, gc.Longitude, (double)searchPos.Latitude, (double)searchPos.Longitude, DistanceUnit.KM) < subscription.DistanceKm) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = gc }); } } else { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = gc }); } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } //check if any POI Edits (pending approval) match this subscription if (subscription.NotifyPoiedits) { var poiEdits = dataModel.EditQueueItems.Where(c => c.DateSubmitted >= checkFromDate && c.PreviousData != null && c.IsProcessed == false); if (poiEdits.Any()) { var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.EditedPOI, Description = "Proposed POI Edits" }; foreach (var p in poiEdits) { try { var updatedPOI = JsonConvert.DeserializeObject <ChargePoint>(p.EditData); if (IsPOISubscriptionFilterMatch(updatedPOI, filter, subscription)) { if (searchPos != null) { if (GeoManager.CalcDistance(updatedPOI.AddressInfo.Latitude, updatedPOI.AddressInfo.Longitude, (double)searchPos.Latitude, (double)searchPos.Longitude, DistanceUnit.KM) < subscription.DistanceKm) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = p, POI = updatedPOI }); } } else { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = p, POI = updatedPOI }); } } } catch (Exception) { ;; } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } } //check if any new POIs if (subscription.NotifyPoiadditions) { /* var newPOIs = dataModel.ChargePoints.Where(c => c.DateCreated >= checkFromDate && c.SubmissionStatusType.IsLive == true && * (searchPos == null || * (searchPos != null && * c.AddressInfo.SpatialPosition.Distance(searchPos) / 1000 < subscription.DistanceKM * )) * ).ToList();*/ var filterParams = new APIRequestParams { CreatedFromDate = checkFromDate, AllowMirrorDB = true }; if (searchPos != null) { filterParams.DistanceUnit = DistanceUnit.KM; filterParams.Distance = subscription.DistanceKm; filterParams.Latitude = searchPos.Latitude; filterParams.Longitude = searchPos.Longitude; } if (subscription.CountryId != null) { filterParams.CountryIDs = new int[] { (int)subscription.CountryId }; } var poiCollection = poiManager.GetPOIList(filterParams); if (poiCollection.Any()) { var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.NewPOI, Description = "New POIs Added" }; foreach (var p in poiCollection) { //var poi = OCM.API.Common.Model.Extensions.ChargePoint.FromDataModel(p); if (IsPOISubscriptionFilterMatch(p, filter, subscription)) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { POI = p }); } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } } //check if any POI Updates match this subscription if (subscription.NotifyPoiupdates) { var poiUpdates = dataModel.EditQueueItems.Where(c => c.DateProcessed >= checkFromDate && c.IsProcessed == true && c.PreviousData != null); if (poiUpdates.Any()) { var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.UpdatedPOI, Description = "POIs Updated" }; foreach (var p in poiUpdates) { try { var updatedPOI = JsonConvert.DeserializeObject <ChargePoint>(p.EditData); if (IsPOISubscriptionFilterMatch(updatedPOI, filter, subscription)) { if (searchPos != null) { if (GeoManager.CalcDistance(updatedPOI.AddressInfo.Latitude, updatedPOI.AddressInfo.Longitude, (double)searchPos.Latitude, (double)searchPos.Longitude, DistanceUnit.KM) < subscription.DistanceKm) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = p, POI = updatedPOI }); } } else { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = p, POI = updatedPOI }); } } } catch (Exception) { ;; } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } } //check if any new comments match this subscription if (subscription.NotifyComments) { var newComments = dataModel.UserComments.Where(c => c.DateCreated >= checkFromDate && (searchPos == null || (searchPos != null && c.ChargePoint.AddressInfo.SpatialPosition.Distance(new NetTopologySuite.Geometries.Point((double)searchPos.Latitude, (double)searchPos.Longitude)) / 1000 < subscription.DistanceKm )) ); if (newComments.Any()) { var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.NewComment, Description = "New Comments Added" }; foreach (var c in newComments) { var poi = OCM.API.Common.Model.Extensions.ChargePoint.FromDataModel(c.ChargePoint, refData); if (IsPOISubscriptionFilterMatch(poi, filter, subscription)) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = OCM.API.Common.Model.Extensions.UserComment.FromDataModel(c, true), POI = poi }); } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } } //check if any new Media uploads match this subscription if (subscription.NotifyMedia) { var newMedia = dataModel.MediaItems.Where(c => c.DateCreated >= checkFromDate && (searchPos == null || (searchPos != null && c.ChargePoint.AddressInfo.SpatialPosition.Distance(new NetTopologySuite.Geometries.Point((double)searchPos.Latitude, (double)searchPos.Longitude)) / 1000 < subscription.DistanceKm )) ); if (newMedia.Any()) { var subscriptionMatch = new SubscriptionMatch { Category = SubscriptionMatchCategory.NewMediaUpload, Description = "New Photos Added" }; foreach (var c in newMedia) { var poi = OCM.API.Common.Model.Extensions.ChargePoint.FromDataModel(c.ChargePoint, refData); if (IsPOISubscriptionFilterMatch(poi, filter, subscription)) { subscriptionMatch.ItemList.Add(new SubscriptionMatchItem { Item = OCM.API.Common.Model.Extensions.MediaItem.FromDataModel(c), POI = poi }); } } if (subscriptionMatch.ItemList.Any()) { subscriptionMatchGroup.SubscriptionMatches.Add(subscriptionMatch); } } } return(subscriptionMatchGroup); }