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