You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.2 KiB

import geojson
import numpy as np
import pandas as pd
from django.contrib.gis.geos import GEOSGeometry
from geojson import MultiPolygon
from tqdm import tqdm
from service import models
def load_data(filepath: str):
models.PlacementPoint.objects.all().delete()
df = pd.read_csv(filepath)
df = df.replace(np.nan, None)
df = df.replace('NaT', None)
for row in tqdm(df.to_dict('records'), desc='Loading data...'):
data = {k: row[k] for k in row.keys() if k not in ['id', 'location_id', 'okrug', 'rayon', 'age_month']}
data['okrug'] = models.AO.objects.get(name=row['okrug'])
data['rayon'] = models.Rayon.objects.get(name=row['rayon'])
models.PlacementPoint.objects.create(**data)
def load_ao_and_rayons(
ao_filepath: str,
rayons_filepath: str,
):
models.AO.objects.all().delete()
models.Rayon.objects.all().delete()
gj = geojson.load(ao_filepath)
objs = gj['features']
for obj in tqdm(objs, desc='Loading AOs...'):
name = obj['properties']['okrug']
coords = obj['geometry']['coordinates']
models.AO.objects.create(**{'name': name, 'polygon': GEOSGeometry(str(MultiPolygon(coords)))})
gj = geojson.load(rayons_filepath)
objs = gj['features']
for obj in tqdm(objs, desc='Loading Rayons...'):
name = obj['properties']['rayon']
coords = obj['geometry']['coordinates']
okr = obj['properties']['okrug']
ao = models.AO.objects.get(name=okr)
models.Rayon.objects.create(**{'name': name, 'polygon': GEOSGeometry(str(MultiPolygon(coords))), 'AO': ao})
def load_rivals(filepath: str):
models.Rivals.objects.all().delete()
df = pd.read_csv(filepath)
df = df.replace(np.nan, None)
df = df.replace('NaT', None)
for row in tqdm(df.to_dict('records'), desc='Loading data...'):
models.Rivals.objects.create(**row)
def load_dist(filepath: str):
models.PointDist.objects.all().delete()
df = pd.read_csv(filepath)
for row in tqdm(df.to_dict('records'), desc='Loading data...'):
row['id1'] = models.PlacementPoint.objects.get(pk=row.get('id1'))
row['id2'] = models.PlacementPoint.objects.get(pk=row.get('id2'))
models.PointDist.objects.create(**row)