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.
62 lines
2.2 KiB
62 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})
|
|
print('AO and Rayons loaded')
|
|
|
|
|
|
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)
|