Beispiel #1
0
class ReportAutoSummarySerializer(gis_serializers.GeoFeatureModelSerializer):
    created = DateTimeFieldTZ()
    geometry = gis_serializers.GeometrySerializerMethodField()
    village_name = serializers.SerializerMethodField()

    def get_geometry(self, obj):
        return obj.village.polygon

    def get_village_name(self, obj):
        return obj.village.name

    class Meta:
        model = ReportAutoSummary
        geo_field = 'geometry'
        fields = (
            'id',
            'created',
            'village',
            'village_name',
            'rw',
            'source',
            'note',
            'damage_infrastruktur',
            'loss_infrastruktur',
            'damage_lintas_sektor',
            'loss_lintas_sektor',
            'damage_produktif',
            'loss_produktif',
            'damage_sosial_perumahan',
            'loss_sosial_perumahan',
            'damage_total',
            'loss_total',
        )
Beispiel #2
0
class RegionSerializer(gis_serializers.GeoFeatureModelSerializer):
    wgs84_geometry = gis_serializers.GeometrySerializerMethodField()
    area_km2 = serializers.SerializerMethodField()
    spots_per_km2 = serializers.SerializerMethodField()
    parking_areas = serializers.SerializerMethodField()

    def get_wgs84_geometry(self, instance):
        return instance.geom.transform(WGS84_SRID, clone=True)

    def get_area_km2(self, instance):
        return instance.geom.area / M2_PER_KM2

    def get_spots_per_km2(self, instance):
        return M2_PER_KM2 * instance.capacity_estimate / instance.geom.area

    def get_parking_areas(self, instance):
        parking_areas = ParkingArea.objects.intersecting_region(instance)
        return [x.pk for x in parking_areas]

    class Meta:
        model = Region
        geo_field = 'wgs84_geometry'
        fields = [
            'id',
            'name',
            'capacity_estimate',
            'area_km2',
            'spots_per_km2',
            'parking_areas',
        ]
class NoneGeoFeatureMethodSerializer(gis_serializers.GeoFeatureModelSerializer):
    new_geometry = gis_serializers.GeometrySerializerMethodField()

    def get_new_geometry(self, obj):
        return None

    class Meta:
        model = Location
        geo_field = 'new_geometry'
        fields = ['name', 'slug', 'id']
Beispiel #4
0
    class TouristicContentListSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
        url = HyperlinkedIdentityField(view_name='apiv2:touristiccontent-detail')
        category = TouristicContentCategorySerializer()
        geometry = geo_serializers.GeometrySerializerMethodField(read_only=True)

        def get_geometry(self, obj):
            return obj.geom2d_transformed

        class Meta:
            model = tourism_models.TouristicContent
            fields = ('id', 'url', 'description_teaser', 'description', 'category', 'approved', 'geometry')
    class SensitiveAreaListSerializer(DynamicFieldsMixin,
                                      serializers.ModelSerializer):
        url = HyperlinkedIdentityField(view_name='apiv2:sensitivearea-detail')
        name = serializers.SerializerMethodField(read_only=True)
        description = serializers.SerializerMethodField(read_only=True)
        period = serializers.SerializerMethodField(read_only=True)
        practices = serializers.SerializerMethodField(read_only=True)
        info_url = serializers.URLField(source='species.url')
        structure = serializers.CharField(source='structure.name')
        create_datetime = serializers.DateTimeField(source='date_insert')
        update_datetime = serializers.DateTimeField(source='date_update')
        geometry = geo_serializers.GeometrySerializerMethodField(
            read_only=True)
        species_id = serializers.SerializerMethodField(read_only=True)
        kml_url = serializers.SerializerMethodField(read_only=True)

        def get_name(self, obj):
            return get_translation_or_dict('name', self, obj.species)

        def get_description(self, obj):
            return get_translation_or_dict('description', self, obj)

        def get_period(self, obj):
            return [
                getattr(obj.species, 'period{:02}'.format(p))
                for p in range(1, 13)
            ]

        def get_practices(self, obj):
            return obj.species.practices.values_list('id', flat=True)

        def get_geometry(self, obj):
            return obj.geom2d_transformed

        def get_species_id(self, obj):
            if obj.species.category == sensitivity_models.Species.SPECIES:
                return obj.species.id
            return None

        def get_kml_url(self, obj):
            url = reverse('sensitivity:sensitivearea_kml_detail',
                          kwargs={
                              'lang': get_language(),
                              'pk': obj.pk
                          })
            return self.context['request'].build_absolute_uri(url)

        class Meta:
            model = sensitivity_models.SensitiveArea
            fields = ('id', 'url', 'name', 'description', 'period', 'contact',
                      'practices', 'info_url', 'published', 'structure',
                      'species_id', 'kml_url', 'geometry', 'update_datetime',
                      'create_datetime')
class LocationGeoFeatureMethodSerializer(gis_serializers.GeoFeatureModelSerializer):
    new_geometry = gis_serializers.GeometrySerializerMethodField()

    def get_new_geometry(self, obj):
        if obj.name.startswith('hidden'):
            return Point(0.0, 0.0)
        else:
            return obj.geometry

    class Meta:
        model = Location
        geo_field = 'new_geometry'
        exclude = []
Beispiel #7
0
class TreeSerializer(gis_serializers.GeoFeatureModelSerializer):

    location = gis_serializers.GeometrySerializerMethodField()

    class Meta:
        model = Tree
        fields = ('id', 'location')
        geo_field = 'location'

    def get_location(self, obj):
        location = obj.location
        location.transform(4326)
        return location

    def get_properties(self, instance, fields):
        return instance.properties
Beispiel #8
0
    class PathListSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
        url = HyperlinkedIdentityField(view_name='apiv2:trek-detail')
        geometry = geo_serializers.GeometrySerializerMethodField(read_only=True)
        length_2d = serializers.SerializerMethodField(read_only=True)
        length_3d = serializers.SerializerMethodField(read_only=True)

        def get_length_2d(self, obj):
            return round(obj.length_2d_m, 1)

        def get_length_3d(self, obj):
            return round(obj.length_3d_m, 1)

        def get_geometry(self, obj):
            return obj.geom2d_transformed

        class Meta:
            model = core_models.Path
            fields = ('id', 'name', 'comments', 'url', 'length_2d', 'length_3d', 'geometry')
Beispiel #9
0
class SensitiveAreaSerializer(TranslatedModelSerializer):
    species = SpeciesSerializer()
    geometry = geo_serializers.GeometrySerializerMethodField(read_only=True)
    kml_url = rest_serializers.SerializerMethodField(read_only=True)

    def get_geometry(self, obj):
        return obj.geom2d_transformed

    def get_kml_url(self, obj):
        return reverse('sensitivity:sensitivearea_kml_detail',
                       kwargs={
                           'lang': get_language(),
                           'pk': obj.pk
                       })

    class Meta:
        model = sensitivity_models.SensitiveArea
        geo_field = 'geometry'
        fields = ('id', 'species', 'description', 'contact', 'published',
                  'publication_date', 'kml_url', 'geometry')
Beispiel #10
0
class HistorySerializer(gis_serializers.GeoFeatureModelSerializer):

    id = serializers.IntegerField(source='tree.id')
    location = gis_serializers.GeometrySerializerMethodField()

    class Meta:
        model = PropertySet
        fields = ('id', 'location')
        geo_field = 'location'

    def get_location(self, obj):
        location = obj.tree.location
        location.transform(4326)
        return location

    def get_properties(self, instance, fields):
        properties = instance.properties
        properties['downloaded_at'] = instance.ingest.downloaded_at
        properties['ingested_at'] = instance.ingest.ingested_at
        return instance.properties
Beispiel #11
0
class ExposureLayerListSerializer(gis_serializers.GeoFeatureModelSerializer):
    aggregation_type = serializers.CharField(
        source="hevedetails.details.area_type")
    bbox = gis_serializers.GeometrySerializerMethodField()
    category = serializers.CharField(source="hevedetails.details.category")
    description = serializers.CharField(source="abstract")
    url = serializers.HyperlinkedIdentityField(view_name="exposures-detail")
    wms_url = serializers.SerializerMethodField()

    class Meta:
        model = Layer
        geo_field = "bbox"
        id_field = "id"
        fields = (
            "id",
            "url",
            "title",
            "name",
            "description",
            "category",
            "aggregation_type",
            "wms_url",
        )

    def get_bbox(self, obj):
        return geos.Polygon((
            (obj.bbox_x0, obj.bbox_y0),
            (obj.bbox_x0, obj.bbox_y1),
            (obj.bbox_x1, obj.bbox_y1),
            (obj.bbox_x1, obj.bbox_y0),
            (obj.bbox_x0, obj.bbox_y0),
        ))

    def get_wms_url(self, obj):
        try:
            wms_link = obj.link_set.get(link_type="OGC:WMS").url
        except ObjectDoesNotExist:
            wms_link = None
        return wms_link
Beispiel #12
0
    class POIListSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
        url = HyperlinkedIdentityField(view_name='apiv2:poi-detail')
        name = serializers.SerializerMethodField(read_only=True)
        description = serializers.SerializerMethodField(read_only=True)
        external_id = serializers.SerializerMethodField(read_only=True, help_text=_("External ID"))
        published = serializers.SerializerMethodField(read_only=True)
        create_datetime = serializers.SerializerMethodField(read_only=True)
        update_datetime = serializers.SerializerMethodField(read_only=True)
        geometry = geo_serializers.GeometrySerializerMethodField(read_only=True)
        type = POITypeSerializer(read_only=True)

        def get_published(self, obj):
            return get_translation_or_dict('published', self, obj)

        def get_external_id(self, obj):
            return obj.eid

        def get_name(self, obj):
            return get_translation_or_dict('name', self, obj)

        def get_update_datetime(self, obj):
            return obj.topo_object.date_update

        def get_create_datetime(self, obj):
            return obj.topo_object.date_insert

        def get_description(self, obj):
            return get_translation_or_dict('description', self, obj)

        def get_geometry(self, obj):
            return obj.geom2d_transformed

        class Meta:
            model = trekking_models.POI
            fields = (
                'id', 'url', 'name', 'type', 'description', 'external_id',
                'published',
                'geometry', 'update_datetime', 'create_datetime'
            )
Beispiel #13
0
class HazardLayerListSerializer(gis_serializers.GeoFeatureModelSerializer):
    bbox = gis_serializers.GeometrySerializerMethodField()
    title = serializers.CharField(source="layer.title")
    name = serializers.CharField(source="layer.name")
    description = serializers.SerializerMethodField()
    hazard_type = serializers.SerializerMethodField()
    url = serializers.HyperlinkedIdentityField(view_name="hazards-detail")
    wms_url = serializers.SerializerMethodField()

    class Meta:
        model = HeveDetails
        geo_field = "bbox"
        id_field = "id"
        fields = (
            "id",
            "url",
            "title",
            "name",
            "description",
            "hazard_type",
            "wms_url",
        )

    def get_bbox(self, obj):
        return obj.envelope.envelope

    def get_description(self, obj):
        return obj.details["description"]

    def get_hazard_type(self, obj):
        return obj.details["hazard_type"]

    def get_wms_url(self, obj):
        try:
            wms_link = obj.layer.link_set.get(link_type="OGC:WMS").url
        except ObjectDoesNotExist:
            wms_link = None
        return wms_link
Beispiel #14
0
class TrekListSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
    url = HyperlinkedIdentityField(view_name='apiv2:trek-detail')
    published = serializers.SerializerMethodField(read_only=True)
    geometry = geo_serializers.GeometrySerializerMethodField(read_only=True)
    length_2d = serializers.SerializerMethodField(read_only=True)
    length_3d = serializers.SerializerMethodField(read_only=True)
    name = serializers.SerializerMethodField(read_only=True)
    description = serializers.SerializerMethodField(read_only=True)
    description_teaser = serializers.SerializerMethodField(read_only=True)
    difficulty = DifficultySerializer(read_only=True)
    departure = serializers.SerializerMethodField(read_only=True)
    arrival = serializers.SerializerMethodField(read_only=True)
    themes = TrekThemeSerializer(many=True, read_only=True)
    networks = TrekNetworkSerializer(many=True, read_only=True)
    practice = TrekPracticeInTrekSerializer(read_only=True)
    external_id = serializers.SerializerMethodField(read_only=True)
    create_datetime = serializers.SerializerMethodField(read_only=True)
    update_datetime = serializers.SerializerMethodField(read_only=True)

    def get_update_datetime(self, obj):
        return obj.topo_object.date_update

    def get_create_datetime(self, obj):
        return obj.topo_object.date_insert

    def get_published(self, obj):
        return get_translation_or_dict('published', self, obj)

    def get_name(self, obj):
        return get_translation_or_dict('name', self, obj)

    def get_description(self, obj):
        return get_translation_or_dict('description', self, obj)

    def get_departure(self, obj):
        return get_translation_or_dict('departure', self, obj)

    def get_arrival(self, obj):
        return get_translation_or_dict('arrival', self, obj)

    def get_description_teaser(self, obj):
        return get_translation_or_dict('description_teaser', self, obj)

    def get_length_2d(self, obj):
        return round(obj.length_2d_m, 1)

    def get_length_3d(self, obj):
        return round(obj.length_3d_m, 1)

    def get_external_id(self, obj):
        return obj.eid

    def get_geometry(self, obj):
        return obj.geom2d_transformed

    class Meta:
        model = trekking_models.Trek
        fields = ('id', 'url', 'name', 'description_teaser', 'description',
                  'departure', 'arrival', 'duration', 'difficulty',
                  'length_2d', 'length_3d', 'ascent', 'descent',
                  'min_elevation', 'max_elevation', 'themes', 'networks',
                  'practice', 'external_id', 'published', 'geometry',
                  'update_datetime', 'create_datetime')
Beispiel #15
0
class ActivityLocationSerializer(gis_serializers.GeoFeatureModelSerializer):
    activity = serializers.SerializerMethodField()
    geometry = gis_serializers.GeometrySerializerMethodField()
    province_name = serializers.SerializerMethodField()
    city_name = serializers.SerializerMethodField()
    subdistrict_name = serializers.SerializerMethodField()
    village_name = serializers.SerializerMethodField()
    rw_name = serializers.SerializerMethodField()
    rt_name = serializers.SerializerMethodField()

    def get_activity(self, obj):
        activity = obj.activity
        serializer = ActivitySerializer(instance=activity)
        return serializer.data

    def get_province_name(self, obj):
        if obj.province:
            return obj.province.name

    def get_city_name(self, obj):
        if obj.city:
            return obj.city.name

    def get_subdistrict_name(self, obj):
        if obj.subdistrict:
            return obj.subdistrict.name

    def get_village_name(self, obj):
        if obj.village:
            return obj.village.name

    def get_rw_name(self, obj):
        if obj.rw:
            return obj.rw.name

    def get_rt_name(self, obj):
        if obj.rt:
            return obj.rt.name

    def get_geometry(self, obj):
        """
        Return the Location polygon of the lowest available Geolevel.
        """
        if obj.rt:
            return obj.rt.polygon
        elif obj.rw:
            return obj.rw.polygon
        elif obj.village:
            return obj.village.polygon
        elif obj.subdistrict:
            return obj.subdistrict.polygon
        elif obj.city:
            return obj.city.polygon
        elif obj.province:
            return obj.province.polygon
        else:
            return None

    class Meta:
        model = Location
        geo_field = 'geometry'
        fields = (
            'id',
            'province',
            'province_name',
            'city',
            'city_name',
            'subdistrict',
            'subdistrict_name',
            'village',
            'village_name',
            'rw',
            'rw_name',
            'rt',
            'rt_name',
            'activity'
        )
Beispiel #16
0
class EventSerializer(gis_serializers.GeoFeatureModelSerializer):
    reports = serializers.SerializerMethodField()
    geometry = gis_serializers.GeometrySerializerMethodField()
    disaster_note = serializers.SerializerMethodField()
    created = DateTimeFieldTZ()
    updated = DateTimeFieldTZ()
    closed = DateTimeFieldTZ()
    province_name = serializers.SerializerMethodField()
    city_name = serializers.SerializerMethodField()
    subdistrict_name = serializers.SerializerMethodField()
    village_name = serializers.SerializerMethodField()
    rw_name = serializers.SerializerMethodField()
    rt_name = serializers.SerializerMethodField()

    def get_reports(self, obj):
        reports = Report.objects.filter(event=obj).order_by('-created')
        serializer = ReportSerializer(instance=reports, many=True)
        return serializer.data

    def get_disaster_note(self, obj):
        return obj.disaster.note

    def get_province_name(self, obj):
        if obj.province:
            return obj.province.name

    def get_city_name(self, obj):
        if obj.city:
            return obj.city.name

    def get_subdistrict_name(self, obj):
        if obj.subdistrict:
            return obj.subdistrict.name

    def get_village_name(self, obj):
        if obj.village:
            return obj.village.name

    def get_rw_name(self, obj):
        if obj.rw:
            return obj.rw.name

    def get_rt_name(self, obj):
        if obj.rt:
            return obj.rt.name

    def get_geometry(self, obj):
        """
        Return the Event point, or polygon of the lowest available Geolevel.
        """
        if obj.point:
            return obj.point
        if obj.rt:
            return obj.rt.polygon
        elif obj.rw:
            return obj.rw.polygon
        elif obj.village:
            return obj.village.polygon
        elif obj.subdistrict:
            return obj.subdistrict.polygon
        elif obj.city:
            return obj.city.polygon
        elif obj.province:
            return obj.province.polygon
        else:
            return None

    class Meta:
        model = Event
        geo_field = 'geometry'
        fields = (
            'id',
            'disaster',
            'disaster_note',
            'created',
            'updated',
            'status',
            'closed',
            'note',
            'height_min',
            'height',
            'magnitude',
            'depth',
            'province',
            'province_name',
            'city',
            'city_name',
            'subdistrict',
            'subdistrict_name',
            'village',
            'village_name',
            'rw',
            'rw_name',
            'rt',
            'rt_name',
            'point',
            'reports',
        )