def testAppendStreetGrow(self): map = createMap(self.testdatadir) map.open(mode="a") streets, group = map.getLayerAndGroupByName("00_Streets") streets.open("a") # Add a new street newstreet = CellElementPolyline(((16.175, 58.5901), (16.176, 58.5905)), objtype=2) newbbox = newstreet.bboxrec.union(streets.bboxrec) newbbox = newbbox.buffer(streets.scale) streets.bboxrec = newbbox actual = Set([ce for ce in streets.getCellElements()]) expected = actual.copy() newstreet.discretizeGeometry(streets.getCell(1)) # streets.addCellElement(newstreet) # expected.add(newstreet) actual = Set([ce for ce in streets.getCellElements()]) # Test if the new streets exists in the layer object self.assertEqual(actual, expected) # Test if the new street was written to file streets.close() del streets del map map = createMap(self.testdatadir) map.open(mode="a") streets, group = map.getLayerAndGroupByName("00_Streets") streets.open("r") # actual = Set([ce.serialize(cell) for ce in streets.getCellElements()]) # expected = Set([ce.serialize(cell) for ce in expected]) actual = Set([ce for ce in streets.getCellElements()]) self.assertEqual(len(actual), len(expected)) if actual != expected: print "difference:",actual.symmetric_difference(expected) print "actual: ",actual print "expected: ",expected self.assertEqual(actual, expected, "Cell elements don't match after read back")
def testSimple(self): map = createMap(self.testdatadir) map.open("a") streets,group = map.getLayerAndGroupByName("00_Streets") streets.open("a") expected = Set([CellElementPolyline(((16.1757486998903914, 58.5899908940009482), (16.1770312736989581, 58.5901528940066783), (16.1780288311056211, 58.5902788940111350)), objtype=3), CellElementPolyline(((16.1770312736989581, 58.5901528940066783), (16.1766037490961025, 58.5908908940327819), (16.1764612408951507, 58.5911788940429688)), objtype=3), CellElementPolyline(((16.1749649047851562, 58.5906388940238685), (16.1766037490961025, 58.5908908940327819), (16.1779575770051451, 58.5910528940385120)), objtype=3)]) cell = streets.getCell(1) actual = Set([ce for ce in streets.getCellElements()]) self.assertEqual(actual, expected)
def testAppendStreet(self): map = createMap(self.testdatadir) map.open(mode="a") streets, group = map.getLayerAndGroupByName("00_Streets") streets.open("a") actual = Set([ce for ce in streets.getCellElements()]) expected = actual.copy() # Add a new street newstreet = CellElementPolyline(((16.185, 58.5912), (16.186, 58.5915)), objtype=2) newstreet.discretizeGeometry(streets.getCell(1)) streets.addCellElement(newstreet) expected.add(newstreet) actual = Set([ce for ce in streets.getCellElements()]) # Test if the new streets exists in the layer object self.assertEqual(actual, expected) # Test if the new street was written to file streets.close() del streets del map map = createMap(self.testdatadir) map.open() streets, group = map.getLayerAndGroupByName("00_Streets") streets.open("r") # actual = Set([ce.serialize(cell) for ce in streets.getCellElements()]) # expected = Set([ce.serialize(cell) for ce in expected]) actual = Set([ce for ce in streets.getCellElements()]) expected = Set([ce for ce in expected]) self.assertEqual(len(actual), len(expected)) if actual != expected: for m in actual: if m.objtype == 2: print streets.scale[0] print m print newstreet print m==newstreet self.assertEqual(actual, expected, "Cell elements don't match after read back")
def testAddGroup(self): map = createMap(self.testdatadir) map.open(mode='a') map.bigendian = True trailgroup = GroupNormal(map, name="00_Trails") map.addGroup(trailgroup) trailgroup.open("w") # Add trail layer and feature to new group trails = Layer(map, name="00_Trails", filename="00trails", layertype=LayerTypePolyline) trails.open(mode='w') map.addLayer(trails) trails.setXScale(1e-5) trails.setYScale(1e-5) trailgroup.addLayer(trails) newtrailwkt = "LINESTRING (16.185 58.5912, 16.186 58.5915)" newtrail = CellElementPolyline(trails, wkt=newtrailwkt) newtrail.discretizeGeometry(trails.getCell(1)) cellelementrefs = trails.addCellElement(newtrail) feature = FeatureNormal(name="Apgatan", layerindex=map.getLayerIndex(trails), objtype=29, cellelementreflist=cellelementrefs) trailgroup.addFeature(feature) map.writeImage('trails.img') map.close() os.system("cat " + os.path.join(self.testdatadir, "00map.ini")) map = createMap(self.testdatadir) map.open('r') trailgroup = map.getGroupByName("00_Trails") trailgroup.open() print "Trails", trails
def testAddGroup(self): map = createMap(self.testdatadir) map.open(mode='a') map.bigendian = True trailgroup = GroupNormal(map, name="00_Trails") map.addGroup(trailgroup) trailgroup.open("w") # Add trail layer and feature to new group trails = Layer(map, name="00_Trails", filename="00trails", layertype=LayerTypePolyline) trails.open(mode='w') map.addLayer(trails) trails.setXScale(1e-5) trails.setYScale(1e-5) trailgroup.addLayer(trails) newtrailwkt = "LINESTRING (16.185 58.5912, 16.186 58.5915)" newtrail = CellElementPolyline(trails, wkt=newtrailwkt) newtrail.discretizeGeometry(trails.getCell(1)) cellelementrefs = trails.addCellElement(newtrail) feature = FeatureNormal(name="Apgatan", layerindex=map.getLayerIndex(trails), objtype=29, cellelementreflist=cellelementrefs) trailgroup.addFeature(feature) map.writeImage('trails.img') map.close() os.system("cat " +os.path.join(self.testdatadir, "00map.ini")) map = createMap(self.testdatadir) map.open('r') trailgroup = map.getGroupByName("00_Trails") trailgroup.open() print "Trails",trails
def testAddPolylineLayer(self): trails = Layer(self.map, name="Trails", filename="trails", layertype=LayerTypePolyline) trails.open(mode='w') self.map.addLayer(trails) # Add a new trail newtrail = CellElementPolyline(((16.185, 58.5912), (16.186, 58.5915)), objtype=0) newtrail.discretizeGeometry(trails.getCell(1)) trails.addCellElement(newtrail) self.map.close() map = createMap(self.testdatadir) map.open() trails, group = map.getLayerAndGroupByName("Trails") trails.open('r') actual = Set(trails.getCellElements()) expected = Set([newtrail]) self.assertSetsEqual(actual, expected)
def testCreateLayerSansBBox(self): m = self.m layer = Layer(m, name="The Layer", filename="layer", layertype=LayerTypePolyline) m.addLayer(layer) layer.open("w") line = CellElementPolyline(((16.185, 58.5912), (16.186, 58.5915)), objtype=2) layer.addCellElement(line) self.mi.close() ## Read back mi = MapImage(self.outimage) mi.open('r') m = mi.maps[0]
def testSimple(self): refmap = Map(MapDirectory('./layerdata8')) refmap.open('r') reflayer = refmap.getLayerByName('00_Trails_4WD') reflayer.open('r') map = Map(MapDirectory(self.testdatadir.dir), maptype=MapTypeImage) map.open("w") map.bbox = ((-18.04, 28.4), (-17.7, 28.89)) map.bbox = refmap.bbox ## Add trails layer trails = Layer(map, name="00_Trails", filename="00trails", layertype=LayerTypePolyline) trails.open(mode='w') trailstyle = DetailMapLayerStyle() trailstyle.style = 'TRAIL_LINE' map.addLayer(trails, layerstyle = trailstyle) trailwkt = 'LINESTRING (-17.768953959275908 28.775591075650038,-17.768678531255482 28.7757692937809,-17.768346397466143 28.775890806142854,-17.767981860380281 28.775923209439377,-17.767779339777025 28.775923209439377,-17.767212282087907 28.775874604494597,-17.766669526871183 28.775777394605033,-17.766151074126846 28.775647781418947,-17.765438201603384 28.775388555046781,-17.764879244738399 28.775145530322874,-17.764514707652538 28.774943009719617,-17.764239279632111 28.77467568252332,-17.763040357660834 28.774238238020288,-17.762813534585188 28.774189633075505,-17.762513804092368 28.774222036372027,-17.762513804092368 28.774222036372027)' trail = CellElementPolyline(trails, wkt=trailwkt, objtype=11) cellelementrefs = trails.addCellElement(trail) print "cellelementrefs", cellelementrefs ## Add group roadsgroup = map.getGroupByName('00_Roads') roadsgroup.addLayer(trails) feature = FeatureNormal(name="Apstigen", layerindex=map.getLayerIndex(trails), objtype=29, cellelementreflist=cellelementrefs) roadsgroup.addFeature(feature) ## Add topo map.addTopo('layerdata8/00t0.blx') # map.mapdir.copyfile('layerdata8/topo3d.ini') map.close() map.writeImage('trails.imi') self.assertTrue('00map.ini' in os.listdir(self.testdatadir.dir)) files = os.listdir(self.testdatadir.dir) expectedfiles = Set(('bmp2bit.ics', 'bmp4bit.ics', '00map.ini', 'add_maps.cfg', 'db00.dbd' , '00trails.lay', '00trails.clt', 'gr0.ext', 'gr0.clp', 'gr0.aux', 'gr1.ext', 'gr1.clp', 'gr1.aux', 'gr2.ext', 'gr2.clp', 'gr2.aux', 'gr3.ext', 'gr3.clp', 'gr3.aux', '00z.dat', '00cn.dat', '00t0.blx', 'topo3d.ini')) self.assertEqual(expectedfiles, Set(files)) expectedinitfile = "" inifile = open(os.path.join(self.testdatadir.dir, '00map.ini')) print inifile.read() map = Map(MapDirectory(self.testdatadir.dir)) map.open("r") roadsgroup = map.getGroupByName('00_Roads') roadsgroup.open('r') print "features: ", list(roadsgroup.getFeatures()) trails = map.getLayerByName('00_Trails') trails.open('r') trails.check() print trails.cellnumbers
def add_element(self, statement, tags, coords): cm = self.charmap if statement.tag in ('polygon', 'polyline', 'point'): layer, group = self.map.getLayerAndGroupByName(\ self.map.mapnumstr + '_' + statement.get('layer') ) objtype = statement.get('objtype') or 1 if statement.tag == 'polyline': assert(layer.layertype == Layer.LayerTypePolyline) if len(coords) < 2: return unk = None if self.routable: unk = 0 cellelement = CellElementPolyline.fromfloat(layer, coords, \ objtype=group.getObjtypeIndex(self.map.getLayerIndex(layer), objtype), unk=None) if self.routable: routingelements = statement.findall("routing") ra = RoutingAttributes() ra.segmentflags = 0 ra.speedcat = 0 cellelement.routingattributes = ra for routing in statement.findall("routing"): for key, value in routing.items(): if key == 'oneway': ra.bidirectional = value != 'on' elif key == 'freeway': ra.freeway = (value == 'on') elif key == 'speedcat': ra.speedcat = int(value) elif key == 'segmenttype': ra.segmenttype = int(value) if 'junction' in tags and self.tags['junction'] == 'roundabout': ra.roundabout = True ra.bidirectional = False if 'oneway' in tags and tags['oneway'] == 'yes': ra.bidirectional = False elif statement.tag == 'polygon': try: objtype = group.getObjtypeIndex(self.map.getLayerIndex(layer), objtype) cellelement = CellElementArea.fromfloat(layer, (coords,), objtype=objtype) except GeometryError: logging.warning('Improper polygon found: ' + str(coords)) return elif statement.tag == 'point': assert(layer.layertype == Layer.LayerTypePoint) cellelement = CellElementPoint.fromfloat(layer, coords[0], objtype = group.getObjtypeIndex(self.map.getLayerIndex(layer), objtype)) cellelementrefs = layer.addCellElement(cellelement) name = self._findname(statement, tags) if hasname(name): feature = FeatureNormal(name=cm.translate(name), layerindex=self.map.getLayerIndex(layer), objtype=objtype, cellelementreflist=cellelementrefs) group.addFeature(feature) elif statement.tag == 'poi': poigroup = self.map.getPOIGroup() poilayer = self.map.getPOILayers()[0] category = statement.get('category') subcategory = statement.get('subcategory') or 'NOSUB1000' cat = poigroup.catman.getCategoryByName(category) subcat = cat.getSubCategoryByName(subcategory) poice = CellElementPOI.fromfloat(poilayer, coords[0], categoryid=cat.id, subcategoryid=subcat.id) name = self._findname(statement, tags) if hasname(name): attributes = [] for a in statement.findall('attr'): if a.get('k') in tags: attributes.append(cm.translate(tags[a.get('k')])) elif a.text: attributes.append(cm.translate(a.text.encode)) else: attributes.append('') feature = FeaturePOI(poilayer.addCellElement(poice), [cm.translate(name)] + attributes, cat.id, subcat.id) poigroup.addFeature(feature) elif statement.tag == 'coastline': if len(coords) < 2: return if self.coastline == None: self.coastline = coastline.CoastLine() self.coastline.add(coords) self.coastlayername = statement.get('layer')
def testAddFeature(self): map = createMap(self.testdatadir) map.open(mode='a') roads = map.getGroupByName("00_Roads") roads.open('a') streets, streetsgroup = map.getLayerAndGroupByName("00_Streets") nfeatures=roads.getFeatureCount() self.assertEqual(roads.getFeatureCount(), 29) newstreetwkt = "LINESTRING (16.185 58.5912, 16.186 58.5915)" newstreet = CellElementPolyline(streets, wkt=newstreetwkt) newstreet.discretizeGeometry(streets.getCell(1)) cellelementrefs = streets.addCellElement(newstreet) feature = FeatureStreet(name="Apgatan", layerindex=map.getLayerIndex(streets), objtype=29, cellelementreflist=cellelementrefs) roads.addFeature(feature) # Check that the # of features increased self.assertEqual(roads.getFeatureCount(), nfeatures+1) found=False for i in range(0, roads.getFeatureCount()): tmpfeature = roads.getFeatureByIndex(i) if tmpfeature == feature: print feature found = True self.assertTrue(found, "New feature not found") names = [roads.getFeatureByIndex(i).name for i in range(0, roads.getFeatureCount())] self.assertTrue(areSorted(names), "Features are not sorted") print roads.layers # Re-open map and verify that the new feature is present map.close() del map del streets map = createMap(self.testdatadir) map.open() roads = map.getGroupByName("00_Roads") print roads.layers roads.open('r') found = False for i in range(0, roads.getFeatureCount()): tmpfeature = roads.getFeatureByIndex(i) print tmpfeature if tmpfeature.name == feature.name: streets, streetsgroup = map.getLayerAndGroupByName("00_Streets") if tmpfeature == feature: found = True # Check that the # of features increased self.assertEqual(roads.getFeatureCount(), nfeatures+1) self.assertTrue(found, "New feature not found after re-opening the map") names = [roads.getFeatureByIndex(i).name for i in range(0, roads.getFeatureCount())] self.assertTrue(areSorted(names), "Features are not sorted")
def testAddFeature(self): map = createMap(self.testdatadir) map.open(mode='a') roads = map.getGroupByName("00_Roads") roads.open('a') streets, streetsgroup = map.getLayerAndGroupByName("00_Streets") nfeatures = roads.getFeatureCount() self.assertEqual(roads.getFeatureCount(), 29) newstreetwkt = "LINESTRING (16.185 58.5912, 16.186 58.5915)" newstreet = CellElementPolyline(streets, wkt=newstreetwkt) newstreet.discretizeGeometry(streets.getCell(1)) cellelementrefs = streets.addCellElement(newstreet) feature = FeatureStreet(name="Apgatan", layerindex=map.getLayerIndex(streets), objtype=29, cellelementreflist=cellelementrefs) roads.addFeature(feature) # Check that the # of features increased self.assertEqual(roads.getFeatureCount(), nfeatures + 1) found = False for i in range(0, roads.getFeatureCount()): tmpfeature = roads.getFeatureByIndex(i) if tmpfeature == feature: print feature found = True self.assertTrue(found, "New feature not found") names = [ roads.getFeatureByIndex(i).name for i in range(0, roads.getFeatureCount()) ] self.assertTrue(areSorted(names), "Features are not sorted") print roads.layers # Re-open map and verify that the new feature is present map.close() del map del streets map = createMap(self.testdatadir) map.open() roads = map.getGroupByName("00_Roads") print roads.layers roads.open('r') found = False for i in range(0, roads.getFeatureCount()): tmpfeature = roads.getFeatureByIndex(i) print tmpfeature if tmpfeature.name == feature.name: streets, streetsgroup = map.getLayerAndGroupByName( "00_Streets") if tmpfeature == feature: found = True # Check that the # of features increased self.assertEqual(roads.getFeatureCount(), nfeatures + 1) self.assertTrue(found, "New feature not found after re-opening the map") names = [ roads.getFeatureByIndex(i).name for i in range(0, roads.getFeatureCount()) ] self.assertTrue(areSorted(names), "Features are not sorted")