class DatabasePolygonMap(PolygonMap): def __init__(self, mapSource, connection, subset): PolygonMap.__init__(self, mapSource, subset) self._connection = connection self._matchQuery = None def load(self): query = Query(self._connection) query.SELECT('gid', self.name) query.SELECT('the_geom', self.name, 'AsText') query.SELECT(self._primary, self.name) for key, gen in self._fields: query.SELECT(key, self.name) whereList = [] try: for entry in self._subset: item = self.name + '.' + self._primary + '=\'' + entry + '\'' whereList.append(item) query.where = ' OR '.join(whereList) except TypeError: pass polyDict = PolygonDictionary() pairs = [] for entry in query: d = [] for key, gen in self._fields: d.append((gen, entry[key])) data = Dictionary() data.update(d) p = GeneralizedPolygon(enum.ABSTRACT, entry['gid'], entry['the_geom'], data, self) polyKey = keygen(entry[self._primary]) pairs.append((polyKey, p)) polyDict.update(pairs) return polyDict def loadMatchingPolygonData(self, mapName, fieldID): if not self._matchQuery: self._matchQuery = Query(self._connection) self._matchQuery.FROM('%(mapName)s') for key, gen in self._fields: self._matchQuery.SELECT(key, self.name) self._matchQuery.where = '%(mapName)s.gid=%(fieldID)s AND ST_Equals' self._matchQuery.where += '(%(mapName)s.the_geom,' + self.name self._matchQuery.where += '.the_geom);' self._matchQuery.SELECT self._matchQuery.setVariable('mapName', mapName) self._matchQuery.setVariable('fieldID', fieldID) data = [] for entry in self._matchQuery: for key, gen in self._fields: data.append((gen, entry[key])) return data
def load(self): query = Query(self._connection) query.SELECT('gid', self.name) for key, value in self._fields: query.SELECT(key, self.name) query.FROM('%(geomSource)s') query.where = '%(geomSource)s.gid=%(id)s AND ' query.where += 'ST_Contains(%(geomSource)s.the_geom, ' query.where += self.name + '.the_geom)' spatialQuery = Query(self._connection) spatialQuery.SELECT('the_geom', self.name, 'AsText') for key, value in self._fields: spatialQuery.SELECT(key, self.name) pointList = GeneralizedPointList(enum.ABSTRACT, query, spatialQuery, self._fields, self) return pointList