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()