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', )
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']
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 = []
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
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')
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')
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
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
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' )
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
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')
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' )
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', )