Esempio n. 1
0
def lulc(request, landcover=None, period=None):
    import datasets as ds
    ds.LoadRawData()
    ds.LoadPeriod()

    # lc_name = "Select landcover" if request.LANGUAGE_CODE == "en" else "Pilih tutupan lahan"
    landcover_list = np.append(
        {
            "value": "",
            "name_en": "Select landcover",
            "name_id": "Pilih tutupan lahan"
        }, ds.LANDCOVER)
    period_list = np.append([""], ds.PERIOD_LIST)

    if landcover == None:
        landcover_name = "Land cover" if request.LANGUAGE_CODE == "en" else "Tutupan lahan"
        ds.CalculateArea("", "")
        # print("yg ini kosong")
    else:
        landcover_name = landcover_list[next(
            index for (index, d) in enumerate(landcover_list)
            if d["value"] == landcover)]["name_" + request.LANGUAGE_CODE]
        ds.CalculateArea(landcover, period)
        # print("--> " + landcover + " -- " + period)

    periods = ["", ""] if (landcover == None) else period.split("-")

    #generate geojson data
    geojson_data1 = pg.load(filepath=settings.BASE_DIR +
                            "/main/static/data/geojson/batas_admin.geojson")
    geojson_data2 = pg.load(filepath=settings.BASE_DIR +
                            "/main/static/data/geojson/batas_admin.geojson")

    for feat in geojson_data1:
        nama_kec = feat.properties["KABKOTA"]
        if nama_kec in ds.AREA_PERIOD_BEGIN_ADMIN.index:
            feat.properties["DATA"] = ds.AREA_PERIOD_BEGIN_ADMIN.loc[nama_kec][
                "COUNT"] / 1000.00
        else:
            feat.properties["DATA"] = -1

    for feat in geojson_data2:
        nama_kec = feat.properties["KABKOTA"]
        if nama_kec in ds.AREA_PERIOD_END_ADMIN.index:
            feat.properties["DATA"] = ds.AREA_PERIOD_END_ADMIN.loc[nama_kec][
                "COUNT"] / 1000.00
        else:
            feat.properties["DATA"] = -1

    stat_data = {
        'area1': round(ds.AREA_PERIOD_BEGIN / 1000000.00, 2),
        'area2': round(ds.AREA_PERIOD_END / 1000000.00, 2),
        'growth': round(ds.AREA_GROWTH, 2),
        'num_district': ds.AREA_ADMIN_TOTAL,
        'max_district': ds.AREA_ADMIN_LARGEST,
        'fast_district': ds.AREA_ADMIN_FASTEST,
        'period1': periods[0],
        'period2': periods[1]
    }

    context = {
        'landcover_list': landcover_list,
        'selected_landcover': landcover,
        'period': period_list,
        'selected_period': period,
        'landcover_title': landcover_name,
        'map_data1': geojson_data1,
        'map_data2': geojson_data2,
        'stat_data': stat_data,
        'peat_data': ds.AREA_PEAT,
        'landcover_data': ds.AREA_LANDCOVER,
        'landcover_plan': ds.AREA_LANDCOVER_PLAN,
        'landchanges': ds.AREA_PERIOD,
        'landchange_plan': ds.AREA_CHANGES_PLAN
    }

    #return render(request, request.LANGUAGE_CODE +'_bau_lulc.html', context)
    return render(request, 'bau_lulc.html', context)
Esempio n. 2
0
def process_carbon(request, period, template, carbon_type, map_field):
    import datasets as ds
    ds.LoadRawData()
    ds.LoadPeriod()

    period_list = np.append([""], ds.PERIOD_LIST)

    if period == None:
        ds.CalculateDataEnv("", carbon_type)
    else:
        ds.CalculateDataEnv(period, carbon_type)

    map_data = ds.PEAT_DATA_ADMIN if carbon_type == "p" else ds.DATA_DISTRICT

    geojson_data1 = pg.load(filepath=settings.BASE_DIR +
                            "/main/static/data/geojson/batas_admin.geojson")
    for feat in geojson_data1:
        nama_kec = feat.properties["KABKOTA"]
        if nama_kec in map_data.index:
            feat.properties["DATA"] = map_data.loc[nama_kec][map_field]
        else:
            feat.properties["DATA"] = -1

    stat_data = {}
    if carbon_type != "p":
        stat_data["total"] = round(ds.TOTAL_DATA / 1000.00, 2)
        stat_data["rate"] = round(ds.TOTAL_RATE, 4)
        stat_data["max_district"] = ds.DATA_DISTRICT_MAX_DATA
        stat_data["min_district"] = ds.DATA_DISTRICT_MIN_DATA
        stat_data["fast_district"] = ds.DATA_DISTRICT_MAX_RATE

    context = {
        'period': period_list,
        'selected_period': period,
        'map_data1': geojson_data1
    }

    if carbon_type == "p":
        context[
            "peat_data1"] = ds.PEAT_DATA_ADMIN if period == None else ds.PEAT_DATA_ADMIN.sort_values(
                "DATA", ascending=False)
        context[
            "peat_data2"] = ds.PEAT_DATA_ZONE if period == None else ds.PEAT_DATA_ZONE.sort_values(
                "DATA", ascending=False)
    else:
        main_index = [] if period == None else ds.DATA_PERIOD_PEAT.index.get_level_values(
            level=0).unique()
        sub_index = [] if period == None else ds.DATA_PERIOD_PEAT.index.get_level_values(
            level=1).unique()

        period_data = []
        for idx in main_index:
            item = {"label": idx, "data": ds.DATA_PERIOD_PEAT.loc[idx]}
            period_data.append(item)

        context["stat_data"] = stat_data
        context["peat_data"] = ds.DATA_PERIOD
        context["peat_period_index"] = main_index
        context["peat_period_sub_index"] = sub_index
        context["peat_period_data"] = period_data
        context["district_data"] = ds.DATA_DISTRICT_TOP
        context["zone_data"] = ds.DATA_ZONE_TOP

    return render(request, template, context)