Ejemplo n.º 1
0
def removeDuplilines(poly, type):
    p = []
    t = []
    stencil = 1000
    sbar = SubProgressBar(maxval=len(poly)).start()
    found = False
    for i in range(len(poly)):
        for j in range(len(poly))[i + 2:i + 2 + stencil]:
            if isClose(poly[i], poly[j]):
                ia = (i + 1) % len(poly)
                ib = (j - 1) % len(poly)
                if isClose(poly[ia], poly[ib]):
                    poly1, ptmp1, poly2, ptmp2, poly3 = np.split(
                        poly, [i, ia, ib, j])
                    p.append(np.concatenate((poly1, poly3), axis=0))
                    if type == 1: t.append(1)
                    p.append(poly2)
                    t.append(1)
                    found = True
            if found: break
        if found: break
        sbar.update(i)
    sbar.finish()
    if p == []:
        p.append(poly)
        t.append(type)
    return p, v, t
Ejemplo n.º 2
0
   def putContent(self,fileName,head=[]):

      # ~~> file extension processing
      _,tail = path.splitext(fileName)
      if tail[1:] != self.fileType:
         if head != []:
            head = ['\n'.join(head).replace(':FileType '+self.fileType,':FileType '+tail[1:])]
         self.fileType = tail[1:]

      # ~~> write head
      if head != []: core = head
      else: core = [':FileType '+self.fileType+' ASCII EnSim 1.0',
         ':Application BlueKenue', ':Version 3.2.24',
         ':WrittenBy sebourban', ':CreationDate Thu, Dec 08, 2011 02:47 PM',
         ':Name ' + path.basename(fileName),
         #':AttributeName 1 level',
         #':AttributeType 1 float',
         #':AttributeUnits 1 m',
         ':EndHeader' ]

      # ~~> look for closed lines
      if self.type == []:
         for ip in self.poly:
            if isClose(ip[0][:2],ip[len(ip)-1][:2]): self.type.append(1)
            else: self.type.append(0)

      # ~~> fill-up empty attributes
      if self.atrbut == {}:
         self.atrbut = {1:['ArbitraryName1']}
         for _ in self.poly: self.atrbut[1].append(0)
         self.oatrbut = [1]

      # ~~> fill-up attribute names
      if head == []:
         for i,o in zip(range(len(self.oatrbut)),self.oatrbut): core.insert(-1,':AttributeName '+repr(i+1)+' '+repr(o))

      # ~~ Write body ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      for i,ip,iv,it in zip(range(len(self.poly)),self.poly,self.vals,self.type):
         il = len(ip)
         if il != 0 and not isClose(ip[0],ip[len(ip)-1]): il += it
         line = repr(il)
         for o in self.oatrbut: line  = line + ' ' + str(self.atrbut[o][i])
         core.append(line)
         if self.fileType == 'i2s':
            for xyi in ip: core.append(repr(xyi[0])+' '+repr(xyi[1]))
            if il != len(ip): core.append(repr(ip[0][0])+' '+repr(ip[0][1]))
         elif self.fileType == 'i3s':
            if np.shape(iv)[1] == 0:
               for xyi in ip: core.append(repr(xyi[0])+' '+repr(xyi[1])+' 0.0')
               if il != len(ip): core.append(repr(ip[0][0])+' '+repr(ip[0][1])+' 0.0')
            else:
               for xyi,val in zip(ip,iv): core.append(repr(xyi[0])+' '+repr(xyi[1])+' '+' '.join([ repr(v) for v in val ]))
               if il != len(ip): core.append(repr(ip[0][0])+' '+repr(ip[0][1])+' '+' '.join([ repr(v) for v in iv[0] ]))

      # ~~ Put all ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      putFileContent(fileName,core)
Ejemplo n.º 3
0
def removeDuplicates(poly,type): # /!\ does not work anymore
   found = True
   while found:
      i = 0; found = False
      while i < len(poly)-1:
         if isClose( poly[i],poly[i+1],size=10 ):
            found = True
            poly = np.delete(poly,i+1,0)
         i += 1
   if len(poly) == 1: return [],0
   elif len(poly) == 2: return [],0 #poly,0
   else:
      if type != 0:
         if isClose( poly[len(poly)-1],poly[0],size=10 ): poly = np.delete(poly,len(poly)-1,0)
      if len(poly) < 3: return [],0 #poly,0
      return poly,type
Ejemplo n.º 4
0
def removeDuplicates(poly, type):  # /!\ does not work anymore
    found = True
    while found:
        i = 0
        found = False
        while i < len(poly) - 1:
            if isClose(poly[i], poly[i + 1], size=10):
                found = True
                poly = np.delete(poly, i + 1, 0)
            i += 1
    if len(poly) == 1: return [], 0
    elif len(poly) == 2: return [], 0  #poly,0
    else:
        if type != 0:
            if isClose(poly[len(poly) - 1], poly[0], size=10):
                poly = np.delete(poly, len(poly) - 1, 0)
        if len(poly) < 3: return [], 0  #poly,0
        return poly, type
Ejemplo n.º 5
0
def removeDuplilines(poly,type):
   p = []; t = []; stencil = 1000
   sbar = SubProgressBar(maxval=len(poly)).start()
   found = False
   for i in range(len(poly)):
      for j in range(len(poly))[i+2:i+2+stencil]:
         if isClose( poly[i],poly[j] ):
            ia = (i+1)%len(poly)
            ib = (j-1)%len(poly)
            if isClose( poly[ia],poly[ib] ):
               poly1,ptmp1,poly2,ptmp2,poly3 = np.split(poly,[i,ia,ib,j])
               p.append(np.concatenate((poly1, poly3), axis=0))
               if type == 1: t.append(1)
               p.append(poly2)
               t.append(1)
               found = True
         if found: break
      if found: break
      sbar.update(i)
   sbar.finish()
   if p == []:
      p.append(poly); t.append(type)
   return p,v,t
Ejemplo n.º 6
0
    def putContent(self, fileName, head=[]):

        # ~~> file extension processing
        _, tail = path.splitext(fileName)
        if tail[1:] != self.fileType:
            if head != []:
                head = [
                    '\n'.join(head).replace(':FileType ' + self.fileType,
                                            ':FileType ' + tail[1:])
                ]
            self.fileType = tail[1:]

        # ~~> write head
        if head != []: core = head
        else:
            core = [
                ':FileType ' + self.fileType + ' ASCII EnSim 1.0',
                ':Application BlueKenue',
                ':Version 3.2.24',
                ':WrittenBy sebourban',
                ':CreationDate Thu, Dec 08, 2011 02:47 PM',
                ':Name ' + path.basename(fileName),
                #':AttributeName 1 level',
                #':AttributeType 1 float',
                #':AttributeUnits 1 m',
                ':EndHeader'
            ]

        # ~~> look for closed lines
        if self.type == []:
            for ip in self.poly:
                if isClose(ip[0][:2], ip[len(ip) - 1][:2]): self.type.append(1)
                else: self.type.append(0)

        # ~~> fill-up empty attributes
        if self.atrbut == {}:
            self.atrbut = {1: ['ArbitraryName1']}
            for _ in self.poly:
                self.atrbut[1].append(0)
            self.oatrbut = [1]

        # ~~> fill-up attribute names
        if head == []:
            for i, o in zip(range(len(self.oatrbut)), self.oatrbut):
                core.insert(-1,
                            ':AttributeName ' + repr(i + 1) + ' ' + repr(o))

        # ~~ Write body ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        for i, ip, iv, it in zip(range(len(self.poly)), self.poly, self.vals,
                                 self.type):
            il = len(ip)
            if il != 0 and not isClose(ip[0], ip[len(ip) - 1]): il += it
            line = repr(il)
            for o in self.oatrbut:
                line = line + ' ' + str(self.atrbut[o][i])
            core.append(line)
            if self.fileType == 'i2s':
                for xyi in ip:
                    core.append(repr(xyi[0]) + ' ' + repr(xyi[1]))
                if il != len(ip):
                    core.append(repr(ip[0][0]) + ' ' + repr(ip[0][1]))
            elif self.fileType == 'i3s':
                if np.shape(iv)[1] == 0:
                    for xyi in ip:
                        core.append(repr(xyi[0]) + ' ' + repr(xyi[1]) + ' 0.0')
                    if il != len(ip):
                        core.append(
                            repr(ip[0][0]) + ' ' + repr(ip[0][1]) + ' 0.0')
                else:
                    for xyi, val in zip(ip, iv):
                        core.append(
                            repr(xyi[0]) + ' ' + repr(xyi[1]) + ' ' +
                            ' '.join([repr(v) for v in val]))
                    if il != len(ip):
                        core.append(
                            repr(ip[0][0]) + ' ' + repr(ip[0][1]) + ' ' +
                            ' '.join([repr(v) for v in iv[0]]))

        # ~~ Put all ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        putFileContent(fileName, core)
Ejemplo n.º 7
0
    def parseContent(self, fileName):
        # TODO: Read the whole header

        # ~~ Get all ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        core = getFileContent(fileName)

        # ~~ Parse head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        icore = 0
        self.atrbut = {}
        self.natrbut = 0
        self.oatrbut = []
        while re.match(ken_header, core[icore].strip()):
            # ~~> instruction FileType
            proc = re.match(asc_FileType, core[icore].strip())
            if proc: self.fileType = proc.group('type').lower()
            # ~~> instruction AttributeName
            proc = re.match(asc_AttributeName, core[icore].strip())
            if proc:
                self.natrbut += 1
                if self.natrbut == int(proc.group('number')):
                    self.oatrbut.append(proc.group('after').strip())
                    self.atrbut.update({self.oatrbut[-1]: []})
                else:
                    print '... Could not read the order of your Attributes:', core[
                        icore]
                    sys.exit(1)
            # ... more instruction coming ...
            icore += 1
        self.head = core[0:icore]
        # /!\ icore starts the body

        # ~~ Parse body ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # This is also fairly fast, so you might not need a progress bar
        self.poly = []
        self.vals = []
        self.type = []
        self.npoin = 0
        while icore < len(core):
            if core[icore].strip() == '':
                icore += 1
                continue
            # ~~> polygon head
            proc = re.match(var_1int, core[icore].strip())
            if not proc:
                print '\nCould not parse the following polyline header: ' + core[
                    icore].strip()
                sys.exit(1)
            nrec = int(proc.group('number'))
            a = proc.group('after').strip().split()
            if len(a) != self.natrbut:
                if self.natrbut != 0:
                    print '... Could not find the correct number of attribute:', core[
                        icore].strip(), ', ', self.natrbut, ' expected'
                    sys.exit(1)
                else:
                    self.natrbut = len(a)
                    self.oatrbut = range(1, len(a) + 1)
                    self.atrbut = dict([(i + 1, [a[i]])
                                        for i in range(len(a))])
            else:
                for i in range(len(self.oatrbut)):
                    self.atrbut[self.oatrbut[i]].append(a[i])
            xyi = []
            val = []
            icore += 1
            for irec in range(nrec):
                nbres = core[icore + irec].strip().split()
                proc = re.match(var_1dbl, nbres[0])
                if not proc:
                    proc = re.match(var_1int, nbres[0])
                    if not proc:
                        print '\nCould not parse the following polyline record: ' + core[
                            icore + irec].strip()
                        sys.exit(1)
                nbres[0] = float(proc.group('number'))
                procd = re.match(var_1dbl, nbres[1])
                proci = re.match(var_1int, nbres[1])
                if procd: nbres[1] = float(procd.group('number'))
                elif proci: nbres[1] = float(procd.group('number'))
                xyi.append(nbres[:2])
                val.append(nbres[2:])
            if xyi != []:
                cls = 0
                if isClose(xyi[0], xyi[len(xyi) - 1], size=10):
                    xyi.pop(len(xyi) - 1)
                    val.pop(len(val) - 1)
                    cls = 1
                self.poly.append(np.asarray(xyi, dtype=np.float))
                self.vals.append(np.asarray(val, dtype=np.float))
                self.type.append(cls)
            self.npoin += len(xyi)
            icore += nrec

        self.npoly = len(self.poly)
Ejemplo n.º 8
0
   def parseContent(self,fileName):
      # TODO: Read the whole header

      # ~~ Get all ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      core = getFileContent(fileName)

      # ~~ Parse head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      icore = 0; self.atrbut = {}; self.natrbut = 0; self.oatrbut = []
      while re.match(ken_header,core[icore].strip()):
         # ~~> instruction FileType
         proc = re.match(asc_FileType,core[icore].strip())
         if proc: self.fileType = proc.group('type').lower()
         # ~~> instruction AttributeName
         proc = re.match(asc_AttributeName,core[icore].strip())
         if proc:
            self.natrbut += 1
            if self.natrbut == int(proc.group('number')):
               self.oatrbut.append(proc.group('after').strip())
               self.atrbut.update({self.oatrbut[-1]:[]})
            else:
               print '... Could not read the order of your Attributes:',core[icore]
               sys.exit(1)
         # ... more instruction coming ...
         icore += 1
      self.head = core[0:icore]
      # /!\ icore starts the body

      # ~~ Parse body ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # This is also fairly fast, so you might not need a progress bar
      self.poly = []; self.vals = []; self.type = []; self.npoin = 0
      while icore < len(core):
         if core[icore].strip() == '':
            icore += 1
            continue
         # ~~> polygon head
         proc = re.match(var_1int,core[icore].strip())
         if not proc:
            print '\nCould not parse the following polyline header: '+core[icore].strip()
            sys.exit(1)
         nrec = int(proc.group('number'))
         a = proc.group('after').strip().split()
         if len(a) != self.natrbut:
            if self.natrbut != 0:
               print '... Could not find the correct number of attribute:',core[icore].strip(),', ',self.natrbut,' expected'
               sys.exit(1)
            else:
               self.natrbut = len(a)
               self.oatrbut = range(1,len(a)+1)
               self.atrbut = dict([ (i+1,[a[i]]) for i in range(len(a)) ])
         else:
            for i in range(len(self.oatrbut)): self.atrbut[self.oatrbut[i]].append(a[i])
         xyi = []; val = []; icore += 1
         for irec in range(nrec):
            nbres = core[icore+irec].strip().split()
            proc = re.match(var_1dbl,nbres[0])
            if not proc:
               proc = re.match(var_1int,nbres[0])
               if not proc:
                  print '\nCould not parse the following polyline record: '+core[icore+irec].strip()
                  sys.exit(1)
            nbres[0] = float(proc.group('number'))
            procd = re.match(var_1dbl,nbres[1])
            proci = re.match(var_1int,nbres[1])
            if procd: nbres[1] = float(procd.group('number'))
            elif proci: nbres[1] = float(procd.group('number'))
            xyi.append(nbres[:2])
            val.append(nbres[2:])
         if xyi != []:
            cls = 0
            if isClose(xyi[0],xyi[len(xyi)-1],size=10) :
               xyi.pop(len(xyi)-1)
               val.pop(len(val)-1)
               cls = 1
            self.poly.append(np.asarray(xyi,dtype=np.float))
            self.vals.append(np.asarray(val,dtype=np.float))
            self.type.append(cls)
         self.npoin += len(xyi)
         icore += nrec

      self.npoly = len(self.poly)