def testPolygon(self): p = from_wkt(poly0) self.assertEqual(p, {'type': 'Polygon', 'coordinates': (((30.0, 10.0), (10.0, 20.0), (20.0, 40.0), (40.0, 40.0), (30.0, 10.0)),) }) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(poly1) self.assertEqual(p, {'type': 'Polygon', 'coordinates': (((35.0, 10.0), (10.1, 20.0), (15.0, 40.0), (45.0, 45.0), (35.0, 10.0)), ((20.0, 30.0), (35.0, 35.0), (30.0, 20.0), (20.0, 30.0)))}) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(poly2) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(poly3) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(poly4) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(empty_poly0) self.assertEqual(p, {'type': 'Polygon', 'coordinates': None}) p = from_wkt(empty_poly1) self.assertEqual(p, {'type': 'Polygon', 'coordinates': None})
def convert(infilename, outfilename='doc.kml', namecolumn=0): sf = shapefile.Reader(infilename) k = kml.KML() doc = kml.Document(name=infilename) k.append(doc) for sr in sf.shapeRecords(): if sr.shape.points: pm = kml.Placemark(name=unicode(sr.record[namecolumn]), description= "test") if not hasattr(sr.shape, '__geo_interface__'): import ipdb; ipdb.set_trace() pm.geometry = pygeoif.as_shape(sr.shape) doc.append(pm) if sr.shape.__geo_interface__ != pygeoif.as_shape(sr.shape).__geo_interface__: #import ipdb; ipdb.set_trace() print sr.record print len(sr.shape.__geo_interface__['coordinates']), len(pygeoif.as_shape(sr.shape).__geo_interface__['coordinates']) print sr.shape.__geo_interface__['type'], pygeoif.as_shape(sr.shape).__geo_interface__['type'] #for i in range(0,len(sr.shape.__geo_interface__['coordinates'])): # print sr.shape.__geo_interface__['coordinates'][i] == pygeoif.as_shape(sr.shape).__geo_interface__['coordinates'][i] xml = '<?xml version="1.0" encoding="UTF-8"?>' + k.to_string() #try: # xml = xml.decode('utf-8', 'ignore') #except: # pass #xml = xml.encode('utf-8') out = open(outfilename, 'w') out.write(xml) out.close()
def testPoint(self): p = from_wkt(empty_p0) self.assertEqual(p, {'type': 'Point', 'coordinates': None}) self.assertRaises(NotImplementedError, from_wkt, p_zm) self.assertRaises(NotImplementedError, from_wkt, point_m0) p = from_wkt(p0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) self.assertEqual(p, {'type': 'Point', 'coordinates': (30.0, 10.0)}) p = from_wkt(p_z) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) self.assertEqual(p, {'type': 'Point', 'coordinates': (1.0, 1.0, 5.0)})
def _parse_shapefile_and_populate_db(file_path): """Given a path to a shapefile containing Community information, parse the file and add each Community to the database. """ if not os.path.exists(file_path): print(file_path + " does not exist") else: sf = shapefile.Reader(file_path) # Create a dict of {<field>: <index>} field_dict = {} for field in sf.fields: field_dict[field[0]] = sf.fields.index(field) - 1 for shapeRecord in sf.shapeRecords(): Community.add_comunity( Community.from_dict({ "id": shapeRecord.record[field_dict['AREA_S_CD']], "name": ' '.join(shapeRecord.record[ field_dict['AREA_NAME']].split(' ')[:-1]), "boundaries": WKTElement( str( pygeoif.MultiPolygon( pygeoif.as_shape( Community._longlat_to_latlong( shapeRecord.shape.__geo_interface__ )))), 4326) }))
def testMultilinestring(self): p = from_wkt(empty_mls0) self.assertEqual(p, {'type': 'MultiLineString', 'coordinates': None}) p = from_wkt(empty_mls1) self.assertEqual(p, {'type': 'MultiLineString', 'coordinates': None}) p = from_wkt(mls0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) self.assertEqual(p, {'type': 'MultiLineString', 'coordinates': (((10.0, 10.0), (20.0, 20.0), (10.0, 40.0)), ((40.0, 40.0), (30.0, 30.0), (40.0, 20.0), (30.0, 10.0)))}) p = from_wkt(mls0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mls0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mls1) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mls3) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__)
def testMultipoint(self): p = from_wkt(empty_mp0) self.assertEqual(p, {'type': 'MultiPoint', 'coordinates': None}) p = from_wkt(empty_mp1) self.assertEqual(p, {'type': 'MultiPoint', 'coordinates': None}) p = from_wkt(mp0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) self.assertEqual(p, {'type': 'MultiPoint', 'coordinates': ((10.0, 40.0), (40.0, 30.0), (20.0, 20.0), (30.0, 10.0))})
def testMultipolygon(self): p = from_wkt(mpoly_empty) self.assertEqual(p, {'type': 'MultiPolygon', 'coordinates': None}) p = from_wkt(empty_mpoly0) self.assertEqual(p, {'type': 'MultiPolygon', 'coordinates': None}) p = from_wkt(empty_mpoly1) self.assertEqual(p, {'type': 'MultiPolygon', 'coordinates': None}) p = from_wkt(mpoly0) #self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) self.assertEqual(p, {'type': 'MultiPolygon', 'coordinates': ((((30.0, 20.0), (10.0, 40.0), (45.0, 40.0), (30.0, 20.0)),), (((15.0, 5.0), (40.0, 10.0), (10.0, 20.0), (5.0, 10.0), (15.0, 5.0)),))}) p = from_wkt(mpoly0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mpoly1) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mpoly2) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(mpoly3) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__)
def convert(infilename, outfilename='doc.kml', namecolumn=0): sf = shapefile.Reader(infilename) k = kml.KML() doc = kml.Document(name=infilename) k.append(doc) for sr in sf.shapeRecords(): if sr.shape.points: pm = kml.Placemark(name=unicode(sr.record[namecolumn]), description="test") if not hasattr(sr.shape, '__geo_interface__'): import ipdb ipdb.set_trace() pm.geometry = pygeoif.as_shape(sr.shape) doc.append(pm) if sr.shape.__geo_interface__ != pygeoif.as_shape( sr.shape).__geo_interface__: #import ipdb; ipdb.set_trace() print sr.record print len(sr.shape.__geo_interface__['coordinates']), len( pygeoif.as_shape( sr.shape).__geo_interface__['coordinates']) print sr.shape.__geo_interface__['type'], pygeoif.as_shape( sr.shape).__geo_interface__['type'] #for i in range(0,len(sr.shape.__geo_interface__['coordinates'])): # print sr.shape.__geo_interface__['coordinates'][i] == pygeoif.as_shape(sr.shape).__geo_interface__['coordinates'][i] xml = '<?xml version="1.0" encoding="UTF-8"?>' + k.to_string() #try: # xml = xml.decode('utf-8', 'ignore') #except: # pass #xml = xml.encode('utf-8') out = open(outfilename, 'w') out.write(xml) out.close()
def testGeometrycollection(self): p = from_wkt(empty_gc0) self.assertEqual(p, {'type': 'GeometryCollection', 'geometries': None}) p = from_wkt(gc0) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc1) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc2) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc3) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc4) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc5) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(gc6) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__)
def __read( shapefile_path: str, encoding: str = 'utf-8', debug: bool = False, ) -> Iterator[shapefile.ShapeRecord]: with shapefile.Reader(shapefile_path, encoding=encoding) as reader: if debug: print(f"bbox: {reader.bbox}") print(f"num records: {reader.numRecords}") print(list(field[0] for field in reader.fields)) for shapeRecord in reader.iterShapeRecords(): if debug: shape = shapeRecord.shape record = shapeRecord.record.as_dict() if not record["iso_a2"] == "JP": continue print(record) print() print(f"shape type: {shape.shapeTypeName}") print(pygeoif.as_shape(shape).wkt) yield (shapeRecord)
def testLinestring(self): p = from_wkt(empty_ls0) self.assertEqual(p, {'type': 'LineString', 'coordinates': None}) p = from_wkt(ls0) self.assertEqual(p, {'type': 'LineString', 'coordinates': ((30.0, 10.0), (10.0, 30.0), (40.0, 40.0))}) self.assertEqual(p, pygeoif.as_shape(p).__geo_interface__) p = from_wkt(ls1) self.assertEqual(p, {'type': 'LineString', 'coordinates': ((0.0, 0.0), (0.0, 9.0), (9.0, 9.0), (9.0, 0.0), (0.0, 0.0))}) p = from_wkt(ls2) self.assertEqual(p['type'], 'LineString') self.assertEqual(p['coordinates'][0], (3429562.6, 5799490.68)) self.assertEqual(p['coordinates'][-1], (3431644.53, 5798012.51)) self.assertEqual(len(p['coordinates']), 25) p = from_wkt(ls3) self.assertEqual(p, {'type': 'LineString', 'coordinates': ((0.0, 0.0, 2.0), (10.0, 0.0, 4.0), (10.0, 10.0, 6.0), (0.0, 10.0, 8.0), (0.0, 0.0, 10.0))})
def create_multipolygon(self, multipolygon, **kwargs): """ **Create a Relation:multipolygon.** http://wiki.openstreetmap.org/wiki/Relation:multipolygon Any area that is complex (e.g., because its outline consists of several ways joined together, or because the area consists of multiple disjunct parts, or has holes) requires a multipolygon relation. A multipolygon relation can have any number of ways in the role outer (the outline) and any number of ways in the role inner (the holes), and these must form valid rings to build a multipolygon from. """ if not isinstance(multipolygon, dict): multipolygon = multipolygon.__geo_interface__ assert multipolygon['type'] == 'MultiPolygon' or multipolygon['type'] == 'Polygon' assert multipolygon['coordinates'] if multipolygon['type'] == 'Polygon': polygons = [pygeoif.Polygon(pygeoif.as_shape(multipolygon)), ] else: polygons = [] for coords in multipolygon['coordinates']: polygons.append(pygeoif.Polygon(coords[0], coords[1:])) ways = [] for polygon in polygons: outer = self.create_way(polygon.exterior) ways.append(('outer', str(outer))) for way in polygon.interiors: inner = self.create_way(way) ways.append(('inner', str(inner))) self.idx -= 1 self.multipolygons.append(dict(id=str(self.idx), ways=ways, tags=dict(**kwargs))) return self.idx
def __apply_geometry_field(appendee: Dict, shape: shapefile.Shape): appendee[GEOMETRY_FIELD_NAME] = pygeoif.as_shape(shape).wkt return appendee