当前位置: 首页>>代码示例>>Python>>正文


Python QgsCoordinateReferenceSystem.createFromEpsg方法代码示例

本文整理汇总了Python中qgis.core.QgsCoordinateReferenceSystem.createFromEpsg方法的典型用法代码示例。如果您正苦于以下问题:Python QgsCoordinateReferenceSystem.createFromEpsg方法的具体用法?Python QgsCoordinateReferenceSystem.createFromEpsg怎么用?Python QgsCoordinateReferenceSystem.createFromEpsg使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在qgis.core.QgsCoordinateReferenceSystem的用法示例。


在下文中一共展示了QgsCoordinateReferenceSystem.createFromEpsg方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: viewport_geo_array

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
def viewport_geo_array(map_canvas):
    """Obtain the map canvas current extent in EPSG:4326.

    :param map_canvas: A map canvas instance.
    :type map_canvas: QgsMapCanvas

    :returns: A list in the form [xmin, ymin, xmax, ymax] where all
        coordinates provided are in Geographic / EPSG:4326.
    :rtype: list

    .. note:: Delegates to extent_to_geo_array()
    """

    # get the current viewport extent
    myRect = map_canvas.extent()

    if map_canvas.hasCrsTransformEnabled():
        myCrs = map_canvas.mapRenderer().destinationCrs()
    else:
        # some code duplication from extentToGeoArray here
        # in favour of clarity of logic...
        myCrs = QgsCoordinateReferenceSystem()
        myCrs.createFromEpsg(4326)

    return extent_to_geo_array(myRect, myCrs)
开发者ID:gsuhartono,项目名称:inasafe,代码行数:27,代码来源:utilities.py

示例2: extentToGeoArray

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
def extentToGeoArray(theExtent, theSourceCrs):
    """Convert the supplied extent to geographic and return as as array.

    Args:
        theExtent: QgsRectangle to be transformed to geocrs.
        theSourceCrs: QgsCoordinateReferenceSystem representing the original
            extent's CRS.

    Returns:
        list: Transformed extents in EPSG:4326 in the form
              [xmin, ymin, xmix, ymax]

    Raises:
        None
    """

    myGeoCrs = QgsCoordinateReferenceSystem()
    myGeoCrs.createFromEpsg(4326)
    myXForm = QgsCoordinateTransform(
        theSourceCrs,
        myGeoCrs)

    # Get the clip area in the layer's crs
    myTransformedExtent = myXForm.transformBoundingBox(theExtent)

    myGeoExtent = [myTransformedExtent.xMinimum(),
                   myTransformedExtent.yMinimum(),
                   myTransformedExtent.xMaximum(),
                   myTransformedExtent.yMaximum()]
    return myGeoExtent
开发者ID:imadedikyadehermawan,项目名称:inasafe,代码行数:32,代码来源:clipper.py

示例3: _extentsToLayer

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
    def _extentsToLayer(self):
        """Memory layer for aggregation by using canvas extents as feature.

        We do this because the user elected to use no aggregation layer so we
        make a 'dummy' one which covers the whole study area extent.

        This layer is needed when postprocessing because we always want a
        vector layer to store aggregation information in.

        Returns:
            QgsMapLayer - a memory layer representing the extents of the clip.
        """

        # Note: this code duplicates from Dock.viewportGeoArray - make DRY. TS

        myRect = self.iface.mapCanvas().extent()
        myCrs = QgsCoordinateReferenceSystem()
        myCrs.createFromEpsg(4326)
        myGeoExtent = extent_to_geo_array(myRect, myCrs)

        if not self.layer.isValid():
            myMessage = self.tr(
                'An exception occurred when creating the entire area layer.')
            raise (Exception(myMessage))

        myProvider = self.layer.dataProvider()

        myAttrName = self.tr('Area')
        myProvider.addAttributes(
            [QgsField(myAttrName, QtCore.QVariant.String)])

        self.layer.startEditing()
        # add a feature the size of the impact layer bounding box
        myFeature = QgsFeature()
        # noinspection PyCallByClass,PyTypeChecker,PyArgumentList
        myFeature.setGeometry(QgsGeometry.fromRect(
            QgsRectangle(
                QgsPoint(myGeoExtent[0], myGeoExtent[1]),
                QgsPoint(myGeoExtent[2], myGeoExtent[3]))))
        myFeature.setAttributeMap({0: QtCore.QVariant(
            self.tr('Entire area'))})
        myProvider.addFeatures([myFeature])
        self.layer.commitChanges()

        try:
            self.keywordIO.update_keywords(
                self.layer,
                {self.defaults['AGGR_ATTR_KEY']: myAttrName})
        except InvalidParameterError:
            self.keywordIO.write_keywords(
                self.layer,
                {self.defaults['AGGR_ATTR_KEY']: myAttrName})
        except KeywordDbError, e:
            raise e
开发者ID:gsuhartono,项目名称:inasafe,代码行数:56,代码来源:aggregator.py

示例4: zoomTo

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
 def zoomTo(self, name):
     for res in self.results:
         if unicode(res.description) == unicode(name):
             dest_crs = self.canvas.mapRenderer().destinationCrs()
             src_crs = QgsCoordinateReferenceSystem()
             src_crs.createFromEpsg(res.epsg)
             transform = QgsCoordinateTransform(src_crs, dest_crs)
             new_point = transform.transform(res.x, res.y)
             x = new_point.x()
             y = new_point.y()
             self.canvas.setExtent(QgsRectangle(x,y,x,y))
             self.canvas.zoomScale(res.zoom)
             self.canvas.refresh()
             self.marker.setCenter(new_point)
             self.marker.show()
             return
开发者ID:ibennett,项目名称:QGIS-Gazetteer-Plugin,代码行数:18,代码来源:gazetteersearch.py

示例5: setCanvasCrs

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
def setCanvasCrs(theEpsgId, theOtfpFlag=False):
    """Helper to set the crs for the CANVAS before a test is run.

    Args:

        * theEpsgId  - Valid EPSG identifier (int)
        * theOtfpFlag - whether on the fly projections should be enabled
                        on the CANVAS. Default to False.
    """
        # Enable on-the-fly reprojection
    CANVAS.mapRenderer().setProjectionsEnabled(theOtfpFlag)

    # Create CRS Instance
    myCrs = QgsCoordinateReferenceSystem()
    myCrs.createFromEpsg(theEpsgId)  # google mercator

    # Reproject all layers to WGS84 geographic CRS
    CANVAS.mapRenderer().setDestinationCrs(myCrs)
开发者ID:rudithiede,项目名称:QGIS-Bucket-Fill,代码行数:20,代码来源:test_bucketfill.py

示例6: visible

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
 def visible(self,value):
     if value == True:
         if self.x is not None and self.y is not None:
             self._visible = True
             dest_crs = self.canvas.mapRenderer().destinationCrs()
             src_crs = QgsCoordinateReferenceSystem()
             src_crs.createFromEpsg(self.epsg)
             transform = QgsCoordinateTransform(src_crs, dest_crs)
             new_point = transform.transform(self.x, self.y)
             self._xtrans = new_point.x()
             self._ytrans = new_point.y()
             self.marker.setCenter(new_point)
             self.marker.show()
         else:
             self._visible = False
             raise ValueError("Can't show marker without x and y coordinates.")
     else:
         self._visible = False
         self.marker.hide()
开发者ID:rudivs,项目名称:QGIS-Gazetteer-Plugin,代码行数:21,代码来源:gazetteersearch.py

示例7: getWGS84resolution

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
def getWGS84resolution(theLayer, theGeoExtent=None):
    """Return resolution of raster layer in EPSG:4326

    Input
        theLayer: Raster layer
        theGeoExtent: Bounding box in EPSG:4326
        # FIXME (Ole), the second argumunt should be obtained within
                       this function to make it independent
    Output
        resolution.

    If input layer is already in EPSG:4326, simply return the resolution
    If not, work it out based on EPSG:4326 representations of its extent
    """

    msg = tr('Input layer to getWGS84resolution must be a raster layer. '
           'I got: %s' % str(theLayer.type())[1:-1])
    if not theLayer.type() == QgsMapLayer.RasterLayer:
        raise RuntimeError(msg)

    if theLayer.crs().authid() == 'EPSG:4326':
        # If it is already in EPSG:4326, simply use the native resolution
        myCellSize = theLayer.rasterUnitsPerPixel()
    else:
        # Otherwise, work it out based on EPSG:4326 representations of
        # its extent

        # Reproject extent to EPSG:4326
        myGeoCrs = QgsCoordinateReferenceSystem()
        myGeoCrs.createFromEpsg(4326)

        # Estimate cellsize
        # FIXME (Ole): Get geoextent from layer
        myColumns = theLayer.width()
        myGeoWidth = abs(theGeoExtent[3] - theGeoExtent[0])
        myCellSize = myGeoWidth / myColumns

    return myCellSize
开发者ID:mysetiawan,项目名称:inasafe,代码行数:40,代码来源:is_utilities.py

示例8: _createPolygonLayer

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
    def _createPolygonLayer(self, crs=None, fields=None):
        """Creates an empty shape file layer"""

        if crs is None:
            crs = QgsCoordinateReferenceSystem()
            crs.createFromEpsg(4326)

        if fields is None:
            fields = {}

        myTempdir = temp_dir(sub_dir='preprocess')
        myOutFilename = unique_filename(suffix='.shp',
                                        dir=myTempdir)
        mySHPWriter = QgsVectorFileWriter(myOutFilename,
                                          'UTF-8',
                                          fields,
                                          QGis.WKBPolygon,
                                          crs)
        #flush the writer to write to file
        del mySHPWriter
        myName = self.tr('Entire area')
        myLayer = QgsVectorLayer(myOutFilename, myName, 'ogr')
        LOGGER.debug('created' + myLayer.name())
        return myLayer
开发者ID:gsuhartono,项目名称:inasafe,代码行数:26,代码来源:aggregator.py

示例9: coordRefSys

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]
     coordRefSys = QgsCoordinateReferenceSystem()
     if QGis.QGIS_VERSION_INT >= 10900:
         idEpsgRSGoogle = "EPSG:%d" % epsg
         createCrs = coordRefSys.createFromOgcWmsCrs(idEpsgRSGoogle)
     else:
         idEpsgRSGoogle = epsg
         createCrs = coordRefSys.createFromEpsg(idEpsgRSGoogle)
     if not createCrs:
         google_proj_def = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 "
         google_proj_def += "+units=m [email protected] +wktext +no_defs"
         isOk = coordRefSys.createFromProj4(google_proj_def)
         if not isOk:
             return None
     return coordRefSys
开发者ID:TapiwaThato,项目名称:qgis-openlayers-plugin,代码行数:18,代码来源:weblayer.py

示例10: coordRefSys

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]
     coordRefSys = QgsCoordinateReferenceSystem()
     if QGis.QGIS_VERSION_INT >= 10900:
         idEpsgRSGoogle = "EPSG:%d" % epsg
         createCrs = coordRefSys.createFromOgcWmsCrs(idEpsgRSGoogle)
     else:
         idEpsgRSGoogle = epsg
         createCrs = coordRefSys.createFromEpsg(idEpsgRSGoogle)
     if not createCrs:
         proj_def =  "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 "
         proj_def += "+towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
         isOk = coordRefSys.createFromProj4(proj_def)
         if not isOk:
             return None
     return coordRefSys
开发者ID:nakijun,项目名称:qgis-tmsforkorea-plugin,代码行数:18,代码来源:naver_maps.py

示例11: ToGrid

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
class ToGrid(Operator):
    [STAT_AREA_IDX, STAT_COUNT_IDX] = range(2)

    def __init__(self, options=None, name="Base Abstract Grid Operator"):
        super(ToGrid, self).__init__(options, name)
        self._tmp_dir = options["tmp_dir"]

        self.mercator_crs = QgsCoordinateReferenceSystem()
        self.mercator_crs.createFromEpsg(3395)

    @property
    def output_types(self):
        return [OperatorDataTypes.Grid, OperatorDataTypes.Shapefile]

    @property
    def output_names(self):
        return ["Grid with Zone and Count Attributes", "Grid Shapefile"]

    output_descriptions = output_names

    # protected methods override
    ###########################
    def _verify_inputs(self, inputs):
        pass

    def _verify_outputs(self, outputs):
        pass

    # protected methods
    ###########################
    def _outputGeometryType(self):
        return QGis.WKBPolygon

    def _outputGeometryFromLatLon(self, lat, lon):
        # conversion lat/lon to grid_id is required
        # it acts as rounding function to lat/lon
        return self._outputGeometryFromGridId(latlon_to_grid(lat, lon))

    def _outputGeometryFromGridId(self, grid_id):
        [lat, lon] = grid_to_latlon(int(grid_id))
        return QgsGeometry.fromRect(
            QgsRectangle(
                lon - DEFAULT_HALF_GRID_SIZE,
                lat - DEFAULT_HALF_GRID_SIZE,
                lon + DEFAULT_HALF_GRID_SIZE,
                lat + DEFAULT_HALF_GRID_SIZE,
            )
        )

    def _create_grid(self, grid_name, grid_file, x_min, y_min, x_max, y_max, x_off, y_off):
        x_off2, y_off2 = x_off / 2.0, y_off / 2.0
        x_min = floor(x_min / x_off) * x_off
        x_max = ceil(x_max / x_off) * x_off
        y_min = floor(y_min / y_off) * y_off
        y_max = ceil(y_max / y_off) * y_off

        xtotal = int((x_max - x_min) / x_off) + 1
        ytotal = int((y_max - y_min) / y_off) + 1

        logAPICall.log(
            "x_min %f x_max %f y_min %f y_max %f x_off %f y_off %f xtotal %d, ytotal %d"
            % (x_min, x_max, y_min, y_max, x_off, y_off, xtotal, ytotal),
            logAPICall.DEBUG_L2,
        )
        fields = {0: QgsField("GRID_GID", QVariant.String)}
        writer = QgsVectorFileWriter(grid_file, "utf-8", fields, QGis.WKBPolygon, self._crs, "ESRI Shapefile")
        f = QgsFeature()
        for x in range(xtotal):
            for y in range(ytotal):
                lon = x_min + (x * x_off) + (x_off2)
                lat = y_min + (y * y_off) + (y_off2)
                # out_geom = QgsGeometry.fromRect(QgsRectangle(lon-x_off2, lat-y_off2,
                #                                             lon+x_off2, lat+y_off2))
                f.setGeometry(self._outputGeometryFromLatLon(lat, lon))
                f.addAttribute(0, QVariant(latlon_to_grid(lat, lon)))
                writer.addFeature(f)
        del writer
        return load_shapefile(grid_file, grid_name)

    def _create_zone_statistics(self, zone_layer, zone_field, count_field, zone_stat, zone_names):
        # project geometry into mercator and get area in m2
        mercator_transform = QgsCoordinateTransform(zone_layer.crs(), self.mercator_crs)
        zone_gid_idx = layer_field_index(zone_layer, GID_FIELD_NAME)
        zone_field_idx = layer_field_index(zone_layer, zone_field)
        count_field_idx = layer_field_index(zone_layer, count_field)
        for _f in layer_features(zone_layer):
            # project into mercator and get area in m2
            geom = _f.geometry()
            geom.transform(mercator_transform)
            area = geom.area()

            gid = _f.attributeMap()[zone_gid_idx].toString()
            # if count field is not defined, then set count to 0
            if count_field_idx >= 0:
                count = _f.attributeMap()[count_field_idx].toDouble()[0]
            else:
                count = 0

            self._update_stat(zone_stat, gid, count, area)
            zone_names[gid] = _f.attributeMap()[zone_field_idx]
#.........这里部分代码省略.........
开发者ID:gem,项目名称:sidd,代码行数:103,代码来源:grids.py

示例12: do_operation

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
    def do_operation(self):
        """ perform create mapping scheme operation """

        # validate inputs
        fp_layer = self.inputs[0].value
        zone_layer = self.inputs[1].value
        zone_field = self.inputs[2].value
        count_field = self.inputs[3].value
        area_field = self.inputs[4].value

        # make sure input is correct
        # NOTE: these checks cannot be performed at set input time
        #       because the data layer maybe is not loaded yet
        self._test_layer_loaded(fp_layer)
        self._test_layer_loaded(zone_layer)
        self._test_layer_field_exists(zone_layer, GID_FIELD_NAME)
        self._test_layer_field_exists(zone_layer, zone_field)
        # count_field is not required
        # if count field is not defined, then generate building count from footprints
        # area_field is not required

        # local variables
        analyzer = QgsOverlayAnalyzer()
        area_idx = ToGrid.STAT_AREA_IDX
        cnt_idx = ToGrid.STAT_COUNT_IDX

        zone_names, zone_stat, zone_stat2, zone_totals = {}, {}, {}, {}

        # 1. find building count and total area for each zone
        # project geometry into mercator and get area in m2
        mercator_crs = QgsCoordinateReferenceSystem()
        mercator_crs.createFromEpsg(3395)
        mercator_transform = QgsCoordinateTransform(zone_layer.crs(), mercator_crs)

        try:
            # use zone geometry area
            self._create_zone_statistics(zone_layer, zone_field, count_field, zone_stat, zone_names)
        except Exception as err:
            raise OperatorError(str(err), self.__class__)

        # 2. create grids around extent of zone
        tmp_grid1 = "grid_" + get_unique_filename()
        tmp_grid1_file = self._tmp_dir + tmp_grid1 + ".shp"
        extent = zone_layer.extent()
        [x_min, y_min, x_max, y_max] = [extent.xMinimum(), extent.yMinimum(), extent.xMaximum(), extent.yMaximum()]
        tmp_grid_lyr1 = self._create_grid(
            tmp_grid1, tmp_grid1_file, x_min, y_min, x_max, y_max, DEFAULT_GRID_SIZE, DEFAULT_GRID_SIZE
        )

        # tally total building area if there is defined
        bldg_area_idx = layer_field_index(zone_layer, area_field)
        zone_area = {}
        zone_has_area = False
        if bldg_area_idx > 0:
            zone_has_area = True
            zone_gid_idx = layer_field_index(zone_layer, GID_FIELD_NAME)
            for _f in layer_features(zone_layer):
                gid = _f.attributeMap()[zone_gid_idx].toString()
                area = _f.attributeMap()[bldg_area_idx].toDouble()[0]
                if zone_area.has_key(gid):
                    zone_area[gid] = str(float(zone_area[gid])) + area
                else:
                    zone_area[gid] = area

        # 3. intersect grids and zones to obtain polygons with
        # - grid_id and zone_id
        # - ratio of grid covered by zone (polygon area / zone area)
        # apply ratio to zone building count to obtain count assigned to polygon
        tmp_join = "joined_%s" % get_unique_filename()
        tmp_join_file = "%s%s.shp" % (self._tmp_dir, tmp_join)
        try:
            # do intersection
            analyzer.intersection(tmp_grid_lyr1, zone_layer, tmp_join_file)
            tmp_join_layer = load_shapefile(tmp_join_file, tmp_join)
        except AssertionError as err:
            raise OperatorError(str(err), self.__class__)
        except Exception as err:
            raise OperatorError(str(err), self.__class__)

        # do tally
        zone_gid_idx = layer_field_index(tmp_join_layer, GID_FIELD_NAME)
        grid_gid_idx = layer_field_index(tmp_join_layer, "GRID_GID")
        bldg_cnt_idx = layer_field_index(tmp_join_layer, count_field)
        for _f in layer_features(tmp_join_layer):
            geom = _f.geometry()
            geom.transform(mercator_transform)
            area = geom.area()

            # generate all stats of interest
            zone_gid = _f.attributeMap()[zone_gid_idx].toString()
            grid_gid = _f.attributeMap()[grid_gid_idx].toString()
            stat = zone_stat[zone_gid]
            # calculate count/area as proportion of total zone area
            area_ratio = area / stat[area_idx]
            if bldg_cnt_idx > 0:
                bldg_cnt = _f.attributeMap()[bldg_cnt_idx].toDouble()[0] * area_ratio
            else:
                bldg_cnt = 0
            if zone_has_area:
                area = zone_area[zone_gid] * area_ratio
#.........这里部分代码省略.........
开发者ID:gem,项目名称:sidd,代码行数:103,代码来源:grids.py

示例13: do_operation

# 需要导入模块: from qgis.core import QgsCoordinateReferenceSystem [as 别名]
# 或者: from qgis.core.QgsCoordinateReferenceSystem import createFromEpsg [as 别名]
    def do_operation(self):
        """ perform footprint load operation """
        
        # input/output data checking already done during property set        
        # load and verify
        infile = self.inputs[0].value
        
        tmp_fp_layername = 'fp_%s' % get_unique_filename()
        tmp_fp_layer = load_shapefile(infile, tmp_fp_layername)
        if not tmp_fp_layer:
            raise OperatorError('Error loading footprint file' % (infile), self.__class__)

        if self._fp_ht_field is not None:
            ht_idx = layer_field_index(tmp_fp_layer, self._fp_ht_field)
        else:
            ht_idx = -1
        logAPICall.log('tmp_fp_layer.crs().epsg() %s ' % tmp_fp_layer.crs().epsg(),
                       logAPICall.DEBUG)
        if tmp_fp_layer.crs().epsg() != self._crs.epsg():
            transform = QgsCoordinateTransform(tmp_fp_layer.crs(), self._crs)
            transform_required = True
        else:
            transform_required = False
        
        mercator_crs = QgsCoordinateReferenceSystem()
        #mercator_crs.createFromProj4("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
        mercator_crs.createFromEpsg(3395)        
        mercator_transform = QgsCoordinateTransform(tmp_fp_layer.crs(), mercator_crs)
        
        # output grid
        fields = {
            0 : QgsField(GID_FIELD_NAME, QVariant.Int),
            1 : QgsField(LON_FIELD_NAME, QVariant.Double),
            2 : QgsField(LAT_FIELD_NAME, QVariant.Double),
            3 : QgsField(AREA_FIELD_NAME, QVariant.Double),
            4 : QgsField(HT_FIELD_NAME, QVariant.Int),
        }
        output_file = '%sfpc_%s.shp' % (self._tmp_dir, get_unique_filename())
        logAPICall.log('create outputfile %s ... ' % output_file, logAPICall.DEBUG)        
        try:
            writer = QgsVectorFileWriter(output_file, "utf-8", fields, QGis.WKBPoint, self._crs, "ESRI Shapefile")
            f = QgsFeature()
            gid = 0
            for _f in layer_features(tmp_fp_layer):
                # NOTE: geom.transform does projection in place to underlying
                #       C object, for some reason, multiple projection does not
                #       work correctly. following is a work-around
                 
                # 1. get geometry
                geom = _f.geometry()
                # 2. get original centroid point and project is required
                centroid  = geom.centroid().asPoint()
                if transform_required:
                    t_centroid = transform.transform(centroid)
                else:
                    t_centroid = centroid
                
                # 3. project into mercator and get area in m2
                geom.transform(mercator_transform)
                area = geom.area()
                
                # write to file
                gid += 1
                f.setGeometry(QgsGeometry.fromPoint(t_centroid))
                f.addAttribute(0, QVariant(gid))
                f.addAttribute(1, QVariant(t_centroid.x()))
                f.addAttribute(2, QVariant(t_centroid.y()))
                f.addAttribute(3, QVariant(area))
                if ht_idx != -1:
                    f.addAttribute(4, _f.attributeMap()[ht_idx])
                else:
                    f.addAttribute(4, QVariant(0))
                writer.addFeature(f)            
            del writer, f
        except Exception as err:
            remove_shapefile(output_file)
            raise OperatorError("error creating footprint centroids: %s" % err, self.__class__)

        fp_layer = load_shapefile(output_file, tmp_fp_layername)
        if not fp_layer:
            raise OperatorError('Error loading footprint centroid file' % (output_file), self.__class__)        
        
        # clean up
        del tmp_fp_layer
        
        # store data in output
        self.outputs[0].value = fp_layer
        self.outputs[1].value = output_file
开发者ID:ImageCatInc,项目名称:sidd,代码行数:90,代码来源:footprint.py


注:本文中的qgis.core.QgsCoordinateReferenceSystem.createFromEpsg方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。