Beispiel #1
0
    def _single_feature(feat, transformer):
        # existing feature json
        obj = {"type": "Feature"}
        json_str = QgsJsonUtils.exportAttributes(feat)
        props = json.loads(json_str)
        props = _xyz_props(props)
        if QGS_XYZ_ID in props:
            v = props.pop(QGS_XYZ_ID)
            if not is_new: obj[XYZ_ID] = v
        obj["properties"] = props

        geom = feat.geometry()
        res = geom.transform(transformer)
        geom_ = json.loads(geom.asJson())
        if geom_ is None:
            # print(obj)
            return obj
        obj["geometry"] = geom_

        # bbox = geom.boundingBox()
        # # print("bbox: %s"%bbox.toString())
        # if bbox.isEmpty():
        #     if "coordinates" in geom_:
        #         obj["bbox"] = list(geom_["coordinates"]) * 2
        # else:
        #     obj["bbox"] = [bbox.xMinimum(), bbox.yMinimum(), 0.0, bbox.xMaximum(), bbox.yMaximum(), 0.0]
        #     obj["bbox"] = [bbox.xMinimum(), bbox.yMinimum(), bbox.xMaximum(), bbox.yMaximum()]
        return obj
Beispiel #2
0
    def _single_feature(feat):
        # existing feature json
        if feat is None: return None
        obj = {"type": "Feature"}
        json_str = QgsJsonUtils.exportAttributes(feat)
        props = json.loads(json_str)
        props.pop(QGS_ID, None)
        v = props.pop(QGS_XYZ_ID, None)
        if (v is not None and v is not ""):
            if v in exist_feat_id:
                return None
            exist_feat_id.add(v)
            if not is_new: obj[XYZ_ID] = v

        props = _xyz_props(props)
        obj["properties"] = props

        geom = feat.geometry()
        geom_ = json.loads(geom.asJson())
        if geom_ is None:
            # print_qgis(obj)
            return obj
        obj["geometry"] = geom_

        # bbox = geom.boundingBox()
        # # print_qgis("bbox: %s"%bbox.toString())
        # if bbox.isEmpty():
        #     if "coordinates" in geom_:
        #         obj["bbox"] = list(geom_["coordinates"]) * 2
        # else:
        #     obj["bbox"] = [bbox.xMinimum(), bbox.yMinimum(), 0.0, bbox.xMaximum(), bbox.yMaximum(), 0.0]
        #     obj["bbox"] = [bbox.xMinimum(), bbox.yMinimum(), bbox.xMaximum(), bbox.yMaximum()]
        return obj
Beispiel #3
0
    def testExportAttributes(self):
        """ test exporting feature's attributes to JSON object """
        fields = QgsFields()

        # test empty attributes
        feature = QgsFeature(fields, 5)
        expected = "{}"
        self.assertEqual(QgsJsonUtils.exportAttributes(feature), expected)

        # test feature with attributes
        fields.append(QgsField("name", QVariant.String))
        fields.append(QgsField("cost", QVariant.Double))
        fields.append(QgsField("population", QVariant.Int))

        feature = QgsFeature(fields, 5)
        feature.setGeometry(QgsGeometry(QgsPoint(5, 6)))
        feature.setAttributes(['Valsier Peninsula', 6.8, 198])

        expected = """{"name":"Valsier Peninsula",
"cost":6.8,
"population":198}"""
        self.assertEqual(QgsJsonUtils.exportAttributes(feature), expected)

        # test using field formatters
        source = QgsVectorLayer(
            "Point?field=fldtxt:string&field=fldint:integer", "parent",
            "memory")
        pf1 = QgsFeature()
        pf1.setFields(source.fields())
        pf1.setAttributes(["test1", 1])

        setup = QgsEditorWidgetSetup('ValueMap',
                                     {"map": {
                                         "one": 1,
                                         "two": 2,
                                         "three": 3
                                     }})
        source.setEditorWidgetSetup(1, setup)

        expected = """{"fldtxt":"test1",
"fldint":"one"}"""
        self.assertEqual(QgsJsonUtils.exportAttributes(pf1, source), expected)
Beispiel #4
0
    def testExportAttributes(self):
        """ test exporting feature's attributes to JSON object """
        fields = QgsFields()

        # test empty attributes
        feature = QgsFeature(fields, 5)
        expected = "{}"
        self.assertEqual(QgsJsonUtils.exportAttributes(feature), expected)

        # test feature with attributes
        fields.append(QgsField("name", QVariant.String))
        fields.append(QgsField("cost", QVariant.Double))
        fields.append(QgsField("population", QVariant.Int))

        feature = QgsFeature(fields, 5)
        feature.setGeometry(QgsGeometry(QgsPoint(5, 6)))
        feature.setAttributes(['Valsier Peninsula', 6.8, 198])

        expected = """{"name":"Valsier Peninsula",
"cost":6.8,
"population":198}"""
        self.assertEqual(QgsJsonUtils.exportAttributes(feature), expected)

        # test using field formatters
        source = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer",
                                "parent", "memory")
        pf1 = QgsFeature()
        pf1.setFields(source.fields())
        pf1.setAttributes(["test1", 1])

        setup = QgsEditorWidgetSetup('ValueMap', {"map": {"one": 1, "two": 2, "three": 3}})
        source.setEditorWidgetSetup(1, setup)

        expected = """{"fldtxt":"test1",
"fldint":"one"}"""
        self.assertEqual(QgsJsonUtils.exportAttributes(pf1, source), expected)
Beispiel #5
0
    def _single_feature(feat):
        # existing feature json
        if feat is None:
            return None
        obj = {"type": "Feature"}
        json_str = QgsJsonUtils.exportAttributes(feat)
        props = json.loads(json_str)
        props.pop(QGS_ID, None)
        v = props.pop(QGS_XYZ_ID, None)
        if v is not None and v != "":
            if v in exist_feat_id:
                return None
            exist_feat_id.add(v)
            if not is_new:
                obj[XYZ_ID] = v
        fields = feat.fields()
        expression_field_names = [
            f.name()
            for i, f in enumerate(fields)
            if fields.fieldOrigin(i) == fields.OriginExpression
        ]
        # print({k.name(): fields.fieldOrigin(i) for i, k in enumerate(fields)})
        props = _xyz_props(props, ignore_keys=expression_field_names)
        livemap_props = _livemap_props(props, xyz_id=obj.get(XYZ_ID)) if is_livemap else dict()
        props = _clean_props(props)
        obj["properties"] = dict(props, **livemap_props)

        geom = feat.geometry()
        geom_ = json.loads(geom.asJson())
        if geom_ is None:
            # print_qgis(obj)
            return obj
        obj["geometry"] = make_valid_xyz_json_geom(geom_)

        # bbox = geom.boundingBox() # print_qgis("bbox: %s"%bbox.toString()) if bbox.isEmpty():
        # if "coordinates" in geom_: obj["bbox"] = list(geom_["coordinates"]) * 2 else: obj[
        # "bbox"] = [bbox.xMinimum(), bbox.yMinimum(), 0.0, bbox.xMaximum(), bbox.yMaximum(),
        # 0.0] obj["bbox"] = [bbox.xMinimum(), bbox.yMinimum(), bbox.xMaximum(), bbox.yMaximum()]
        return obj