-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathref_body.py
114 lines (89 loc) · 3.44 KB
/
ref_body.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#-*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: db_ref_body.py
# Purpose: kolekce referencnich bodu, generovani pravidelne site bodu
#
# Author: Karel Psota
#
# Created: 28.04.2011
# Copyright: (c) Karel Psota 2011
# Licence: Simplified BSD License
#-------------------------------------------------------------------------------
import sys
import xml.etree.ElementTree as ET
from ref_bod import ReferencniBod
import math
class ReferencniBody:
def __init__(self):
self.ref_body = []
def check_ref_point(self, zdroje, geom):
geomx = geom.asPoint().x()
geomy = geom.asPoint().y()
near = False
for zdroj in zdroje.zdroje:
dx = zdroj.x - geomx
dy = zdroj.y - geomy
distance = math.hypot(dx, dy)
if distance < 100:
near = True
return near
def vytvor_db(self,layer,zdroje):
"nacte referencnich bodu z XML souboru a ulozi je do listu"
iter = layer.getFeatures()
for feature in iter:
geom = feature.geometry()
if self.check_ref_point(zdroje, geom):
print "Feature ID: " + str(feature.id()) + " is near to sources. It has been excluded from computation"
else:
print "Feature ID %d: " % feature.id()
r = ReferencniBod(feature.id(),geom.asPoint().x(),geom.asPoint().y())
self.ref_body.append(r)
def set_z_refbody(self, teren):
"nastavi z-sourandnici pro ref.body"
self.teren = teren
ref_body_copy = []
ref_body_copy.extend(self.ref_body)
del self.ref_body[0:len(self.ref_body)]
for rb in ref_body_copy:
z = teren.get_z_bodu(getattr(rb, "x"), getattr(rb, "y"))
if z != -99:
rb.set_z(z)
self.ref_body.append(rb)
else :
print "\nReferencni bod",getattr(rb, "x"), getattr(rb, "y"),"lezi mimo",
print "rozsah terenu, bude vynechan z vypoctu \n"
def set_z_refbody_custom(self,z):
for rb in self.ref_body:
rb.set_z(z)
def generuj_sit(self, topleft_x, topleft_y, lowerright_x, lowerright_y,
krok):
"generator pravidelne site ref. bodu"
pocet_sloupcu = abs(int((topleft_x - lowerright_x)/krok))
pocet_radku = abs(int((lowerright_y - topleft_y)/krok))
y = topleft_y
idr = 0
for m in range(pocet_radku):
x = topleft_x
for n in range(pocet_sloupcu):
ref_bod = ReferencniBod(idr, x, y)
self.ref_body.append(ref_bod)
x += krok
idr += idr
y -= krok
if len(self.ref_body) != 0:
print "Sit byla uspesne vygenerovana"
else:
print("Nastala chyba pri generovani site, zkontrolujte zadane" +
"souradnice")
def get_ref_body(self):
"vrati vsechny ref. body jako seznam objektu"
return self.ref_body
def print_ref_body(self):
"vytiskne souradnice x,y,z refbodu"
print "Referencni body:"
for rb in self.ref_body:
print getattr(rb, "x"), getattr(rb, "y"), getattr(rb, "z")
def main():
pass
if __name__ == '__main__':
main()