You need to sign in or sign up before continuing.
test_squad_prc.py 3.14 KB
import urllib.request
import json
import os
import datetime
from imageio import imread
import cv2
import numpy as np
import loca_data
import duamel_model
import matplotlib.pyplot as plt
import sher_duam_class
import dateutil.parser


def GetXYPoint(_geo_lon, _geo_lan):

    lan_scale = 79497.3714882
    lon_scale = 111162.6
    pixel_size = 152.8740566
    geo_lan = 44.417242
    geo_lon = 38.72287
    size = 256

    grad_by_px_lon = pixel_size / lon_scale  # Количество градусов в одном пикселе по долготе
    grad_by_px_lan = pixel_size / lan_scale  # Количество градусов в одном пикселе по широте

    min_lon = geo_lon - ((size / 2) * grad_by_px_lon) # Минимальная долгота картинки
    min_lan = geo_lan - ((size / 2) * grad_by_px_lan) # Минимальная широта картинки
    max_lon = geo_lon + ((size / 2) * grad_by_px_lon) # Максимальная долгота картинки
    max_lan = geo_lan + ((size / 2) * grad_by_px_lan) # Максимальная широта картинки


    lon_delta = _geo_lon - min_lon
    lan_delta = _geo_lan - max_lan

    y_delta = lan_delta * lan_scale
    x_delta = lon_delta * lon_scale

    my = y_delta // pixel_size
    mx = x_delta // pixel_size

    result = dict(x = abs(mx), y = abs(my))
    return result


# path
path = 'dj_286m_1591083600.png'

# Reading an image in default
# mode
image = cv2.imread(path)

# Window name in which image is
# displayed
window_name = 'Image'

#Получаем полигон водосбора
pol = []
points = loca_data.GetGeoCoordPolygon()

for p in points:
    val = GetXYPoint(p[3], p[2])
    val_m = [val["x"], val["y"]]
    pol.append(val_m)
pts = np.array(pol, np.int32)

# Получаем полилинию для русла реки
rpol = []
rpoints = loca_data.GetRiverCoordynateLine()

for rp in rpoints:
    rval = GetXYPoint(rp[3], rp[2])
    rval_m = [rval["x"], rval["y"]]
    rpol.append(rval_m)
rpts = np.array(rpol, np.int32)

isClosed = True
# Blue color in BGR
color = (255, 0, 0)
rcolor = (0, 255, 0)
lcolor = (0, 0, 255)


# Line thickness of 2 px
thickness = 1
# Using cv2.polylines() method
# Draw a Blue polygon with
# thickness of 1 px
image = cv2.polylines(image, [pts], isClosed, color, thickness)
image = cv2.polylines(image, [rpts], False, rcolor, thickness)

# Формируем разлиновку по радарным квадратам
x0 = 10
y0 = 20
x = x0
y = y0
i = 0

x = x0 + (i * 24)
while x < 255:
    lx = [[x, 0],[x, 255]]
    lxpcx = np.array(lx, np.int32)
    image = cv2.polylines(image, [lxpcx], False, lcolor, thickness)
    i = i + 1
    x = x0 + (i * 24)

i = 0
y = y0 + (i * 24)
while y < 255:
    ly = [[0, y],[255, y]]
    lypcx = np.array(ly, np.int32)
    image = cv2.polylines(image, [lypcx], False, lcolor, thickness)
    i = i + 1
    y = y0 + (i * 24)


# Displaying the image
while(1):

    cv2.imshow('image', image)
    if cv2.waitKey(20) & 0xFF == 27:
        break

cv2.destroyAllWindows()