Example #1
0
    def permutateTable(self):
        """Permutates points in study area."""

        #### Create New GA Table ####
        newTable = GAPY.ga_table()
        kTable = self.kTable
        N = len(kTable)
        newSimDict = {}
        maxID = 0

        c = 0
        for i in xrange(N):
            row = kTable[i]
            id = row[0]
            x,y = row[1]
            point = (x, y)
            if id in self.ids:
                flag = 1
                while flag:
                    dX = (RAND.random() * self.envelopeSA.lenX) \
                         + self.minX
                    dY = (RAND.random() * self.envelopeSA.lenY) \
                         + self.minY
                    point = (dX, dY)
                    if self.reduce:
                        inside = self.reducePath.contains_point((dX, dY)) 
                    else:
                        inside = self.studyAreaPath.contains_point((dX, dY))
                    if inside:
                        newTable.insert(id, point, 1.0)
                        flag = 0
            else:
                if self.simDict.has_key(id):
                    pass
                else:
                    newTable.insert(id, point, 1.0)

        newTable.flush()
        del self.kTable, self.simDict

        #### Distance from points to study area boundary ####
        near, nearXY, nextNear = UTILS.nearestPoint(self.studyAreaPoly, 
                                                    newTable)

        #### Resolve Simulate Points ####
        if self.simulate:
            simTable = GAPY.ga_table()
            tempN = len(newTable)
            simID = self.maxID + 1
            for i in xrange(tempN):
                row = newTable[i]
                id = row[0]
                x,y = row[1]
                simTable.insert(id, (x,y), 1.0)
                if near[id] <= self.stepMax:
                    nearX, nearY = nearXY[id]
                    dX = nearX + (nearX - x)
                    dY = nearY + (nearY - y)
                    point = (dX, dY)
                    inside = self.studyAreaPath.contains_point((dX, dY))
                    if not inside:
                        simTable.insert(simID, point, 1.0)
                        newSimDict[simID] = id
                        simID += 1
            del newTable
            simTable.flush()
            self.kTable = simTable
        else:
            self.kTable = newTable

        #### Reassign Attributes ####
        self.simDict = newSimDict
        self.N = len(self.kTable)
        self.near = near
        self.nearXY = nearXY
        self.nextNear = nextNear
Example #2
0
    def setOriginalTable(self):
        """Finalizes original GA Table."""

        #### Distance from points to study area boundary ####
        ssdo = self.ssdo
        near, nearXY, nextNear = UTILS.nearestPoint(self.studyAreaPoly, 
                                                    self.ssdo.gaTable)

        #### Create New GA Table ####
        kTable = GAPY.ga_table()

        #### Create Data Structures ####
        ids = []
        tempSim = {}
        self.simDict = {}
        weightDict = {}
        weightVals = []

        #### Pass Over Original GA Table ####
        gaTable = self.ssdo.gaTable
        N = len(gaTable)
        maxID = 0
        c = 0
        for i in xrange(N):
            row = gaTable[i]
            id = row[0]
            xy = row[1]

            #### Inside Checks ####
            inPoly = self.studyAreaPath.contains_point(xy)
            onEdge = near[id] < self.xyTolerance
            inside = inPoly or onEdge

            #### Skip or Cont... Depending On Inside ####
            keepResult = True
            if not self.noEdge:
                if not inside:
                    keepResult = False

            if keepResult:
                #### Weight Field ####
                if self.weightField:
                    weight = row[2]
                    weightDict[id] = c
                    weightVals.append(weight)
                else:
                    weight = 1.0
                c += 1

                #### Insert Into Table ####
                kTable.insert(id, xy, weight)

                #### Resolve Inside/Outside IDs ####
                if self.reduce:
                    inReduced = self.reducePath.contains_point(xy)
                    if inReduced:
                        #### Inside Reduced Study Area ####
                        ids.append(id)
                else:
                    if inside:
                        ids.append(id)
                maxID = max(maxID, id) 

                #### Add Simulated Points ####
                if self.simulate:
                    x,y = xy
                    if near[id] <= self.stepMax:
                        nearX, nearY = nearXY[id]
                        dX = nearX + (nearX - x)
                        dY = nearY + (nearY - y)
                        inside = self.studyAreaPath.contains_point((dX, dY))
                        onLine = near[id] < self.xyTolerance
                        outside = (not inside and not onLine)
                        if outside:
                            tempSim[id] = [ (dX, dY), weight ]
        
        #### Resolve Simulated Points ####
        simPointsOut = []
        if self.simulate:
            simID = maxID + 1
            for origKey, origVals in tempSim.iteritems():
                self.simDict[simID] = origKey
                xy, weight = origVals
                kTable.insert(simID, xy, weight)
                simID += 1
                simPointsOut.append(xy)

        #### Check if All Features Are Outside Study Area ####
        if len(ids) == 0:
            ARCPY.AddIDMessage("ERROR", 1008)
            raise SystemExit()

        #### Finalize Table ####
        kTable.flush()

        self.weightVals = NUM.array(weightVals)
        self.weightDict = weightDict
        self.N = len(kTable)
        self.ids = set(ids)
        self.near = near
        self.nearXY = nearXY
        self.nextNear = nextNear
        self.kTable = kTable
        self.maxID = maxID