public void AddNewNode(AddNewNodeQueryParams parameters)
        {
            GeocodingAddressModelQueryParams address = new GeocodingAddressModelQueryParams(parameters.Street, parameters.DoorNumber, parameters.PostalCode, parameters.County, parameters.District);

            Station stationAdded = new Station();
            //TODO: REFACTOR THIS
            RootGeocodingDataModel <GeocodingAddressResponseModel> coords =
                _geocodingDomain.GetCoordsFromAddress(address);

            Location location = _locationDomain.RetrieveLocation(coords.Data.FirstOrDefault().Latitude,
                                                                 coords.Data.FirstOrDefault().Longitude);

            if (location == null)
            {
                District district = _districtDomain.GetDistrictByDistrictName(address.District);
                County   county   = _countyDomain.GetCountyByCountyName(address.County);
                _locationDomain.InsertLocationData(location, district.Id_District, county.CountyId);
                location = _locationDomain.RetrieveLocation(coords.Data.FirstOrDefault().Latitude,
                                                            coords.Data.FirstOrDefault().Longitude);
            }



            //SE nao for um sensor real procurar a estação metereologica mais proxima, adicionar a bd, e depois adiconar o no a apontar para a estação
            if (parameters.IsRealSensor != true)
            {
                var stationAddedInfo = _weatherStationApplication
                                       .AddWeatherStationToDatabase(address);
                stationAdded =
                    _weatherStationApplication.RetrieveStationByStationName(stationAddedInfo.station.Name);

                Location locationStationAddded = stationAddedInfo.locationStations;

                SmartIrrigationModels.Models.DTOS.Node nodeAdded = _nodeDomain.AddNewNode(parameters, location.Id_Location,
                                                                                          stationAdded.Id_Station ?? -1);

                _weatherStationApplication.AddWeatherStationDataToDatabase(stationAdded, locationStationAddded, nodeAdded);
            }
            else
            {
                //se for um sensor real, adiciona o no com o IdNearStation a -1 e depois adiciona os sensores a apontar para o no No

                _nodeDomain.AddNewNode(parameters, location.Id_Location, -1);

                foreach (var sensor in parameters.SensorsImplemented)
                {
                    _sensorDomain.AddNewSensor(parameters.Street, sensor, location.Id_Location ?? -1);
                }
            }
        }
        public int InsertLocationData(RootGeocodingDataModel <GeocodingAddressResponseModel> data, int Id_District, int Id_County)
        {
            int affectedRows = 0;

            using (IDbConnection db = new SqlConnection(_connectionString))
            {
                foreach (GeocodingAddressResponseModel location in data.Data)
                {
                    string sql = "IF NOT EXISTS (SELECT Latitude,Longitude FROM Location WHERE Latitude = @Latitude AND Longitude=@Longitude) INSERT INTO Location (Latitude,Longitude,Altitude,Description,id_District,Id_Countie) Values (@Latitude,@Longitude,@Altitude,@Description,@Id_District,@Id_County)";
                    affectedRows += db.Execute(sql, new { Latitude = location.Latitude, Longitude = location.Longitude, Altitude = 0, Description = location.Name, Id_District = Id_District, Id_County = Id_County });
                }
            }

            return(affectedRows);
        }
        public void SaveNewLocation(GeocodingAddressModelQueryParams parameters)
        {
            //get data from API
            RootGeocodingDataModel <GeocodingAddressResponseModel> data =
                _geocodingDomain.GetCoordsFromAddress(parameters);

            County county = _countiesDomain.GetCountyByCountyName(parameters.County);

            if (county != null)
            {
                District district = _districtDomain.RetrieveDistrictByCountyName(parameters.County);

                //save in database

                int affectedRows = _locationDomain.InsertLocationData(data, district.Id_District, county.CountyId);
            }
        }
        public RootGeocodingDataModel <GeocodingAddressResponseModel> GetCoordsFromAddress(GeocodingAddressModelQueryParams queryparams)
        {
            RestClient client  = new RestClient($"{_config.GetConfiguration("PositionStackAPI:APIBASICURI")}forward");
            var        request = new RestRequest();

            request.AddHeader("Accept", "*/*");
            request.AddHeader("Accept-Encoding", "gzip, deflate");
            request.AddHeader("User-Agent", "runscope/0.1");
            request.Method = Method.GET;
            request.AddParameter("access_key", _config.GetConfiguration("PositionStackAPI:APIKEY"));
            request.AddParameter("query", $"{queryparams.Street}, {queryparams.County},{queryparams.District}");

            var response = client.Execute(request);
            RootGeocodingDataModel <GeocodingAddressResponseModel> content = JsonConvert.DeserializeObject <RootGeocodingDataModel <GeocodingAddressResponseModel> >(response.Content);


            foreach (var data in content.Data)
            {
                data.Latitude.Replace(',', '.');
                data.Longitude.Replace(',', '.');
            }

            return(content);
        }
Exemple #5
0
        public IActionResult GetAdressFromCoords(string latitude, string longitude)
        {
            RootGeocodingDataModel <GeocodingAddressResponseModel> data = _geocodingApplication.GetAddressFromCoords(latitude, longitude);

            return(Ok(data));
        }
Exemple #6
0
        public IActionResult GetCoordsFromAddress([FromQuery] GeocodingAddressModelQueryParams queryparams)
        {
            RootGeocodingDataModel <GeocodingAddressResponseModel> data = _geocodingApplication.GetCoordsFromAddress(queryparams);

            return(Ok(data));
        }
Exemple #7
0
 public int InsertLocationData(RootGeocodingDataModel <GeocodingAddressResponseModel> data, int Id_District, int Id_County) =>
 _locationRepository.InsertLocationData(data, Id_District, Id_County);