コード例 #1
0
def run(shapePath):
    'Load regions from shapefile'
    # Parse shapePath
    shapeName = store.extractFileBaseName(shapePath).decode('utf-8')
    proj4, shapelyGeometries, fieldPacks, fieldDefinitions = geometry_store.load(shapePath)
    # Initialize
    srid = getSRID(proj4)
    featureCount = 0
    # Make tags
    tagTexts = [
        shapeName,
    ]
    tags = model.getTags('\n'.join(tagTexts), addMissing=True)
    # For each geometry,
    for shapelyGeometry, fieldPack in itertools.izip(shapelyGeometries, fieldPacks):
        # Gather properties
        featureProperties = {}
        for fieldValue, (fieldName, fieldType) in itertools.izip(fieldPack, fieldDefinitions):
            if fieldType == osgeo.ogr.OFTString and fieldValue:
                fieldValue = fieldValue.decode('latin-1')
            featureProperties[fieldName] = fieldValue
        # Make feature
        feature = model.Feature()
        feature.owner_id = personID
        feature.geometry = geoalchemy.WKBSpatialElement(buffer(shapelyGeometry.wkb), srid)
        feature.scope = model.scopePublic
        feature.properties = featureProperties
        feature.tags = tags
        Session.add(feature)
        # Increment
        featureCount += 1
    # Commit
    Session.commit()
    # Return
    return '%s: %s' % (shapeName, featureCount)
コード例 #2
0
def run(shapePath):
    'Load regions from shapefile'
    # Parse shapePath
    shapeName = store.extractFileBaseName(shapePath)
    countryAlpha3, administrativeLevel = re.match(r'(.*)_adm(\d+)', shapeName).groups()
    countryAlpha3 = countryAlpha3.upper()
    administrativeLevel = int(administrativeLevel)
    # Load
    try:
        countryName = countryPackByAlpha3[countryAlpha3][0].decode('utf-8')
    except KeyError:
        return '%s: Unable to match country code' % shapeName
    proj4, shapelyGeometries, fieldPacks, fieldDefinitions = geometry_store.load(shapePath)
    # Initialize
    srid = getSRID(proj4)
    featureCount = 0
    # Make tags
    tagTexts = [
        countryName + (u' Administrative Level %s' % administrativeLevel if administrativeLevel > 0 else ''),
    ]
    tags = model.getTags('\n'.join(tagTexts), addMissing=True)
    # For each geometry,
    for shapelyGeometry, fieldPack in itertools.izip(shapelyGeometries, fieldPacks):
        # Gather properties
        featureProperties = {}
        for fieldValue, (fieldName, fieldType) in itertools.izip(fieldPack, fieldDefinitions):
            if fieldType == osgeo.ogr.OFTString and fieldValue:
                fieldValue = fieldValue.decode('latin-1')
            featureProperties[fieldName] = fieldValue
        if administrativeLevel > 0:
            featureName = featureProperties['NAME_%s' % administrativeLevel]
        else:
            featureName = featureProperties['NAME_ENGLI']
        featureProperties['Name'] = featureName
        # Make feature
        feature = model.Feature()
        feature.owner_id = personID
        feature.geometry = geoalchemy.WKBSpatialElement(buffer(shapelyGeometry.wkb), srid)
        feature.scope = model.scopePublic
        feature.properties = featureProperties
        feature.tags = tags
        Session.add(feature)
        # Increment
        featureCount += 1
    # Commit
    Session.commit()
    # Return
    return '%s: %s' % (shapeName, featureCount)
コード例 #3
0
class MapsController(BaseController):
    def view(self, responseFormat='json'):
        'Assemble a map'
        # Get responseFormat
        responseFormat = responseFormat.lower()
        if responseFormat not in ['json']:
            abort(400, 'Must specify a valid responseFormat: json')
        # Authenticate via personID or key
        personID = h.getPersonIDViaKey()
        # Load srid
        srid = request.params.get('srid', '')
        try:
            proj4 = model.validateSRID(srid)
        except model.GeoRegistryError, error:
            abort(400, str(error))
        # Load tags
        try:
            tags = model.getTags(request.params.get('tags', ''))
        except model.GeoRegistryError, error:
            abort(400, str(error))
コード例 #4
0
     abort(400, str(error))
 # Load featureDictionaries
 try:
     featureDictionaries = geojson.loads(
         request.params.get('featureCollection', ''))['features']
 except simplejson.JSONDecodeError, error:
     abort(400,
           'Could not parse featureCollection as geojson (%s)' % error)
 except KeyError:
     abort(400, 'Could not get features from featureCollection')
 if not featureDictionaries:
     abort(400,
           'Must specify at least one feature in featureCollection')
 # Load tags
 try:
     tags = model.getTags(request.params.get('tags', ''),
                          addMissing=True)
 except model.GeoRegistryError, error:
     abort(400, str(error))
 # Load public
 public = request.params.get('public', 0)
 try:
     public = int(public)
 except ValueError:
     abort(400, 'Could not parse public=%s as an integer' % public)
 # Make sure that the user has write access to the given featureIDs
 try:
     featureByID = dict((x.id, x) for x in model.getWritableFeatures(
         [x.get('id') for x in featureDictionaries], personID))
 except model.GeoRegistryError, error:
     abort(400, str(error))
 # Prepare
コード例 #5
0
 try:
     proj4 = model.validateSRID(srid)
 except model.GeoRegistryError, error:
     abort(400, str(error))
 # Load featureDictionaries
 try:
     featureDictionaries = geojson.loads(request.params.get('featureCollection', ''))['features']
 except simplejson.JSONDecodeError, error:
     abort(400, 'Could not parse featureCollection as geojson (%s)' % error)
 except KeyError:
     abort(400, 'Could not get features from featureCollection')
 if not featureDictionaries:
     abort(400, 'Must specify at least one feature in featureCollection')
 # Load tags
 try:
     tags = model.getTags(request.params.get('tags', ''), addMissing=True)
 except model.GeoRegistryError, error:
     abort(400, str(error))
 # Load public
 public = request.params.get('public', 0)
 try:
     public = int(public)
 except ValueError:
     abort(400, 'Could not parse public=%s as an integer' % public)
 # Make sure that the user has write access to the given featureIDs
 try:
     featureByID = dict((x.id, x) for x in model.getWritableFeatures([x.get('id') for x in featureDictionaries], personID))
 except model.GeoRegistryError, error:
     abort(400, str(error))
 # Prepare
 features = []