yuanhung yeh
2020-10-27 5b98e9857d5081c30fcef0206c38f384dc542514
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
import datetime
 
from pyproj.crs import CRS
from pyproj import Transformer
 
#wgs84=CRS.from_epsg(4326)
#twd97=CRS.from_epsg(3826)
 
#trans97to84=Transformer.from_crs(twd97,wgs84)
#trans84to97=Transformer.from_crs(wgs84,twd97)
 
class Coords():
 
     def crs_t97tow84(self,dx,dy,dz=0,in3d=False):
         xyz= self.trans97to84.transform(dx,dy)
         if( in3d ):
           return [xyz[1] ,xyz[0],dz]
         return [xyz[1] ,xyz[0]]
 
     def crs_w84tot97(self,dx,dy,dz=0,in3d=False):
         xyz=  self.trans84to97.transform(dy,dx)
         if( in3d ): 
           return [xyz[0] ,xyz[1],dz]
         return [xyz[0] ,xyz[1]]
     
     def __init__(self,default97='3826'):
         self.wgs84=CRS.from_epsg(4326)
         self.twd97=CRS.from_epsg(int(default97))
 
         self.trans97to84=Transformer.from_crs(self.twd97,self.wgs84)
         self.trans84to97=Transformer.from_crs(self.wgs84,self.twd97)
 
class Geotext():
 
     def add(self,id,gtype,sn,dx,dy,dz):
         #print(id,':',sn)
         #print(dx,dy,dz)
         if(id != self.id):
            if(self.sn !=0):
               self.done()
         self.id=id
         self.gtype=gtype
         self.sn=sn
         if(len(self.points)>=sn ):
            print('something wrong!!! sn < point!({})'.format(id))
        
         self.points.append([dx,dy,dz])
         self.dtStart=datetime.datetime.now()
 
     def clearpoint(self):
         self.id=''
         self.gtype=''
         self.points.clear()
         self.org.clear()
 
     def done(self,msg={}):
         self.org=self.points
         if (self.fnReady !=None):
            self.points=self.fnReady(self.points)
         #print(self.makewkt())
         #print('id={}'.format(self.id))
         if (self.fnNext !=None):
            self.fnNext(self.makewktpt())
         print('id={},({})'.format(self.id,datetime.datetime.now()-self.dtStart))
         if(len(self.points) != self.sn):
            print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') 
            print(msg)
         self.sn=0
         self.points.clear()
         self.org.clear()
 
     def makewktpt(self):
         resultText=''
         for pt in self.points:
             if(len(resultText)>0):
                 resultText+=','
             thisrow= ' '.join ('%s' %id for id in pt)
             resultText+= thisrow
         #print('wkt->',resultText)
         return (self.id,self.gtype,resultText,self.org)
 
     def __init__(self,fnReady=None,fnNext=None):
         print('try init')
         self.gtype=''
         self.points=[]
         self.org=[]
         self.id=''
         self.sn=0
         self.fnNext=fnNext
         self.fnReady=fnReady
         self.dtStart=datetime.datetime.now()