示例#1
0
def test_as_attribute_name():
    url = 'postgresql://*****:*****@localhost:5432/as_attrname'
    db = AlchemyDataAccess()
    db.connect(url)
    db.create(True)
    db.add_postgis_extension()
    db.create_all_tables()
    SpatialUnitDynamicMapperFactory.instance().dataaccess = db
    tablename1 = 'amz_states'
    shpfilepath1 = os.path.join(os.path.dirname(__file__), '../../data',
                                'amz_states_epsg_4326.shp')
    as_attribute_name = 'NM_ESTADO'
    gp = Geoprocessing()
    sus1 = SpatialUnitInfoRepository(db)
    uc1 = AddSpatialUnit(tablename1, shpfilepath1, as_attribute_name, sus1,
                         SpatialUnitDynamicMapperFactory.instance(), gp)
    su1 = uc1.execute(db)
    sus_list = sus1.list()
    assert len(sus_list) == 1
    assert sus_list[0].dataname == tablename1
    assert sus_list[0].as_attribute_name == 'NM_ESTADO'
    assert sus_list[0].centroid.lat == -6.384962796500002
    assert sus_list[0].centroid.lng == -58.97111531179317
    surepo1 = SpatialUnitDynamicMapperFactory.instance()\
       .create_spatial_unit(tablename1, as_attribute_name)
    su1 = surepo1.get()
    assert len(su1.features) == 13
    assert su1.features[0].name == 'ACRE'
    assert su1.features[1].name == 'AMAPÁ'
    db.drop()
示例#2
0
 def execute(self, da: DataAccess) -> ConfigInfo:
     spatial_units_repo = SpatialUnitInfoRepository(da)
     self._spatial_units = spatial_units_repo.list()
     deter_class_group_repo = DeterClassGroupRepository(da)
     self._deter_class_groups = deter_class_group_repo.list()
     self._most_recent_risk_indicators = self._get_most_recent_risk_indicators(
         da)
     return ConfigInfo(self._spatial_units, self._deter_class_groups,
                       self._most_recent_risk_indicators)
示例#3
0
	def _has_indicator_dalayed(self):
		sus_repo = SpatialUnitInfoRepository(self._dataaccess)
		sus_info = sus_repo.list()		
		for su_info in sus_info:
			sutablename = su_info.dataname
			as_attribute_name = su_info.as_attribute_name			
			rirepo = RiskIndicatorsRepository(sutablename, as_attribute_name, self._dataaccess)
			ri_most_recent = rirepo.get_most_recent()
			if self._deter_last_row.date > ri_most_recent.date:
				return True
		return False
def test_uc_historical():
    db = setdb(
        'postgresql://*****:*****@localhost:5432/det_risk_uc_historic')
    set_class_groups(db)
    deter_repo = DeterRepository()
    deter_hist = DeterHistoricalRepository()
    units_repo = SpatialUnitInfoRepository(db)
    units = units_repo.list()
    sutablename = units[0].dataname
    as_attribute_name = units[0].as_attribute_name
    surepo = SpatialUnitDynamicMapperFactory.instance()\
       .create_spatial_unit(sutablename, as_attribute_name)
    su = surepo.get()
    startdate = datetime.date(2020, 2, 1)
    enddate = datetime.date(2019, 11, 1)
    groups_repo = DeterClassGroupRepository(db)
    class_groups = groups_repo.list()
    uc = DetermineRiskIndicators(su, deter_repo, deter_hist, class_groups,
                                 startdate, enddate)
    model_indicators = uc.execute()
    rirepo = RiskIndicatorsRepository(sutablename, as_attribute_name, db)
    rirepo.save(model_indicators)
    indicators = rirepo.list()
    indicators_per_feature = {}
    expected_total_per_feature = determine_risk_indicators_results.total_per_feature_historical
    for ind in indicators:
        if ind.feature.id not in indicators_per_feature:
            indicators_per_feature[ind.feature.id] = 0
        indicators_per_feature[ind.feature.id] += ind.percentage
    assert len(model_indicators) == len(indicators) == 1350
    assert (len(indicators_per_feature) == len(expected_total_per_feature) ==
            177)
    # for i in indicators_per_feature:
    # 	print(f'{{\'id\': {i}, \'percentage\': {indicators_per_feature[i]}}},')
    for i in range(len(expected_total_per_feature)):
        assert expected_total_per_feature[i]['id'] in indicators_per_feature
        assert (round(expected_total_per_feature[i]['percentage'], 5) == round(
            indicators_per_feature[expected_total_per_feature[i]['id']], 5))
    # for i in indicators:
    # 	print(f'{{\'id\': {i.feature.id}, \'percentage\': {i.percentage},'
    # 			+ f'\'classname\': \'{i.classname}\', \'date\': \'{i.date}\'}},')
    expected_classname = determine_risk_indicators_results.deter_historical
    gp = Geoprocessing()
    for i in range(len(indicators)):
        assert expected_classname[i]['id'] == indicators[i].feature.id
        assert round(expected_classname[i]['percentage'],
                     5) == round(indicators[i].percentage, 5)
        assert expected_classname[i]['date'] == str(indicators[i].date)
        assert int(indicators[i].area * 100 / indicators[i].percentage)\
          == int(gp.degrees_to_km2(indicators[i].feature.geom.area))
    db.drop()
示例#5
0
 def __init__(self, da: DataAccess, every_in_minutes: int):
     deter_repo = DeterRepository()
     su_info_repo = SpatialUnitInfoRepository(da)
     init = Initializer(su_info_repo)
     init.execute(da)
     deter_daily_update = DeterDailyUpdate(deter_repo, every_in_minutes)
     deter_daily_update.execute(da)
示例#6
0
def set_spatial_units(db):
    data_path = os.path.join(os.path.dirname(__file__), '../data')
    sus = [{
        'tablename': 'csAmz_150km',
        'shpfile': f'{data_path}/csAmz_150km_epsg_4326.shp',
        'as_attribute_name': 'id'
    }, {
        'tablename': 'csAmz_300km',
        'shpfile': f'{data_path}/csAmz_300km_epsg_4326.shp',
        'as_attribute_name': 'id'
    }, {
        'tablename': 'amz_states',
        'shpfile': f'{data_path}/amz_states_epsg_4326.shp',
        'as_attribute_name': 'NM_ESTADO'
    }, {
        'tablename': 'amz_municipalities',
        'shpfile': f'{data_path}/amz_municipalities_epsg_4326.shp',
        'as_attribute_name': 'nm_municip'
    }]
    gp = Geoprocessing()
    sus_info_repo = SpatialUnitInfoRepository(db)
    for su in sus:
        uc = AddSpatialUnit(su['tablename'], su['shpfile'],
                            su['as_attribute_name'], sus_info_repo,
                            SpatialUnitDynamicMapperFactory.instance(), gp)
        uc.execute(db)
示例#7
0
	def _determine_risks(self, startdate):
		sus_repo = SpatialUnitInfoRepository(self._dataaccess)
		sus_info = sus_repo.list()
		enddate = self._get_enddate()	
		groups_repo = DeterClassGroupRepository(self._dataaccess)
		class_groups = groups_repo.list()
		for su_info in sus_info:
			sutablename = su_info.dataname
			as_attribute_name = su_info.as_attribute_name
			surepo = SpatialUnitDynamicMapperFactory.instance()\
						.create_spatial_unit(sutablename, as_attribute_name)
			su = surepo.get()
			rirepo = RiskIndicatorsRepository(sutablename, as_attribute_name, self._dataaccess)
			uc = DetermineRiskIndicators(su, self._deter_repo, [], class_groups, startdate, enddate)	
			indicators = uc.execute()
			rirepo.overwrite_from_date(indicators, enddate)		
示例#8
0
def determine_risk_indicators(db):
    deter_alerts = DeterRepository()
    startdate = datetime.date(2021, 2, 28)
    enddate = datetime.date(2020, 12, 31)
    groups_repo = DeterClassGroupRepository(db)
    class_groups = groups_repo.list()
    units_repo = SpatialUnitInfoRepository(db)
    units = units_repo.list()
    for u in units:
        sutablename = u.dataname
        as_attribute_name = u.as_attribute_name
        surepo = SpatialUnitDynamicMapperFactory.instance()\
                    .create_spatial_unit(sutablename, as_attribute_name)
        su = surepo.get()
        uc = DetermineRiskIndicators(su, deter_alerts, None, class_groups,
                                     startdate, enddate)
        model_indicators = uc.execute()
        rirepo = RiskIndicatorsRepository(sutablename, as_attribute_name, db)
        rirepo.save(model_indicators)
示例#9
0
def test_add_two_spatial_units():
    url = 'postgresql://*****:*****@localhost:5432/two_sus'
    db = AlchemyDataAccess()
    db.connect(url)
    db.create(True)
    db.add_postgis_extension()
    db.create_all_tables()
    SpatialUnitDynamicMapperFactory.instance().dataaccess = db
    tablename1 = 'csAmz_150km'
    tablename2 = 'csAmz_300km'
    as_attribute_name = 'id'
    shpfilepath1 = os.path.join(os.path.dirname(__file__), '../../data',
                                'csAmz_150km_epsg_4326.shp')
    shpfilepath2 = os.path.join(os.path.dirname(__file__), '../../data',
                                'csAmz_300km_epsg_4326.shp')
    gp = Geoprocessing()
    sus1 = SpatialUnitInfoRepository(db)
    uc1 = AddSpatialUnit(tablename1, shpfilepath1, as_attribute_name, sus1,
                         SpatialUnitDynamicMapperFactory.instance(), gp)
    uc2 = AddSpatialUnit(tablename2, shpfilepath2, as_attribute_name, sus1,
                         SpatialUnitDynamicMapperFactory.instance(), gp)
    su1 = uc1.execute(db)
    su2 = uc2.execute(db)
    sus2 = SpatialUnitInfoRepository(db)
    sus_list = sus2.list()
    assert len(sus_list) == 2
    assert sus_list[0].dataname == tablename1
    assert sus_list[1].dataname == tablename2
    assert sus_list[0].as_attribute_name == 'id'
    assert sus_list[1].as_attribute_name == 'id'
    assert sus_list[0].centroid.lat == -5.491382969006503
    assert sus_list[0].centroid.lng == -58.467185764253415
    assert sus_list[1].centroid.lat == -5.491382969006503
    assert sus_list[1].centroid.lng == -57.792239759933764
    surepo1 = SpatialUnitDynamicMapperFactory.instance()\
       .create_spatial_unit(tablename1, as_attribute_name)
    surepo2 = SpatialUnitDynamicMapperFactory.instance()\
       .create_spatial_unit(tablename2, as_attribute_name)
    su1 = surepo1.get()
    su2 = surepo2.get()
    assert len(su1.features) == 240
    assert len(su2.features) == 70
    db.drop()
示例#10
0
def determine_risk_indicators(db):
	deter_alerts = DeterRepository()
	deter_hist = DeterHistoricalRepository()
	startdate = datetime.datetime.now().date()
	enddate = datetime.date(2017, 1, 1)
	groups_repo = DeterClassGroupRepository(db)
	class_groups = groups_repo.list()	
	units_repo = SpatialUnitInfoRepository(db)
	units = units_repo.list()
	for u in units:
		sutablename = u.dataname
		print(f'Processing {sutablename} risk indicators...')
		as_attribute_name = u.as_attribute_name
		surepo = SpatialUnitDynamicMapperFactory.instance()\
				.create_spatial_unit(sutablename, as_attribute_name)
		su = surepo.get()	
		uc = DetermineRiskIndicators(su, deter_alerts, deter_hist, 
									class_groups, startdate, enddate)	
		model_indicators = uc.execute()
		rirepo = RiskIndicatorsRepository(sutablename, as_attribute_name, db)
		rirepo.save(model_indicators)
def set_spatial_units(db):
    sutablename = 'csAmz_150km'
    shpfilepath = os.path.join(os.path.dirname(__file__), '../../data',
                               'csAmz_150km_epsg_4326.shp')
    as_attribute_name = 'id'
    geoprocess = Geoprocessing()
    SpatialUnitDynamicMapperFactory.instance().dataaccess = db
    sunits = SpatialUnitInfoRepository(db)
    uc1 = AddSpatialUnit(sutablename, shpfilepath, as_attribute_name, sunits,
                         SpatialUnitDynamicMapperFactory.instance(),
                         geoprocess)
    uc1.execute(db)
    SpatialUnitDynamicMapperFactory.instance().add_class_mapper(sutablename)
示例#12
0
def set_spatial_units(db):
    tablename1 = 'csAmz_150km'
    tablename2 = 'csAmz_300km'
    shpfilepath1 = os.path.join(os.path.dirname(__file__), '../../data',
                                'csAmz_150km_epsg_4326.shp')
    shpfilepath2 = os.path.join(os.path.dirname(__file__), '../../data',
                                'csAmz_300km_epsg_4326.shp')
    as_attribute_name = 'id'
    gp = Geoprocessing()
    sus1 = SpatialUnitInfoRepository(db)
    uc1 = AddSpatialUnit(tablename1, shpfilepath1, as_attribute_name, sus1,
                         SpatialUnitDynamicMapperFactory.instance(), gp)
    uc2 = AddSpatialUnit(tablename2, shpfilepath2, as_attribute_name, sus1,
                         SpatialUnitDynamicMapperFactory.instance(), gp)
    uc1.execute(db)
    uc2.execute(db)
示例#13
0
import sys
sys.path.insert(0,'..')
import warnings
warnings.filterwarnings("ignore")
from ams.usecases import DeterDailyUpdate
from ams.usecases import Initializer
from ams.repository import (DeterRepository,
							SpatialUnitInfoRepository)
from ams.dataaccess import AlchemyDataAccess
from webapp.app.config import Config
from ams.usecases.classify_deter_polygons import ClassifyDeterPolygons

da = AlchemyDataAccess()
da.connect(Config.DATABASE_URL)
su_info_repo = SpatialUnitInfoRepository(da)
init = Initializer(su_info_repo)
init.execute(da)
deter_repo = DeterRepository()
update = DeterDailyUpdate(deter_repo, -1, Config.DATABASE_URL)
update.execute(da, True)

class_deter_polys = ClassifyDeterPolygons(Config.DATABASE_URL, Config.INPUT_GEOTIFF_FUNDIARY_STRUCTURE)
class_deter_polys.execute()