예제 #1
0
    def to_kml(self, filename):
        """
        Export the group to a kml file
        """
        if not self.sights:
            print('This group does not have sights. Aborting export.')
            return

        document = KML.Document()
        document.append(KML.title(self.name))
        if self.description:
            document.append(KML.description(self.description))

        country_folders = {}
        place_folders = {}

        for sight in self.sights.all():
            if not sight.geoposition:
                continue

            placemark = KML.Placemark(
                KML.name(u'{0.name}'.format(sight)),
                KML.description(sight.get_long_description()),
                KML.Point(KML.coordinates('{0[0]}, {0[1]}, 0.0'.format(
                    sight.geoposition.coords,
                ))),
            )

            placemark.append(KML.ExtendedData(
                KML.Data(
                    name='gx_media_links',
                    value=u'{name}.jpg'.format(name=sight.name),
                )
            ))

            place_folder_id = sight.thplace.id
            country_folder_id = sight.thplace.thcountry.id

            country_folder = country_folders.setdefault(
                country_folder_id,
                KML.Folder(KML.name(sight.thplace.thcountry.name)),
            )

            place_folder = place_folders.setdefault(
                place_folder_id,
                KML.Folder(KML.name(sight.thplace.name)),
            )

            place_folder.append(placemark)
            country_folder.append(place_folder)
            document.append(country_folder)

        file_obj = open(filename, 'w')
        file_obj.write(
            etree.tostring(
                document,
                pretty_print=True,
                encoding='utf8'))