Esempio n. 1
0
 def runTest(self):
   factory = kmldom.KmlFactory_GetFactory()
   # TODO: This crashes CreateFromImport as do all non-Object complex elements
   # kml = factory.CreateKml()
   # This returns an ElementPtr for the given element and works fine in
   # CreateFromImport:
   kml_as_element = factory.CreateElementById(kmldom.Type_kml)
   kml = kmldom.AsKml(kml_as_element)
   kml.set_feature(factory.CreatePlacemark())
   kmlfile = kmlengine.KmlFile.CreateFromImport(kml_as_element)
   assert kmlfile
   root = kmlfile.get_root()
   assert root
   kml = kmldom.AsKml(root)
   assert kml
   assert kml.has_feature()
   placemark = kmldom.AsPlacemark(kml.get_feature())
   assert placemark
Esempio n. 2
0
 def __GetRootFeature(self, element):
   kml = kmldom.AsKml(element)
   if kml:
     if kml.has_feature():
       return kml.get_feature()
     else:
       return None
   feature = kmldom.AsFeature(element)
   if feature:
     return feature
   return None
Esempio n. 3
0
 def runTest(self):
   kmz_filepath = os.path.join(os.path.dirname(__file__), '../../testdata/kmz/model-macky.kmz')
   kmzfile = kmlengine.KmzFile.OpenFromFile(kmz_filepath)
   assert kmzfile
   (ok, kml) = kmzfile.ReadKml()
   assert ok
   (kmlfile,errors) = kmlengine.KmlFile.CreateFromParse(kml)
   assert kmlfile
   root = kmldom.AsKml(kmlfile.get_root())
   assert root
   placemark = kmldom.AsPlacemark(root.get_feature())
   assert placemark
   assert 'SketchUp Model of Macky Auditorium' == placemark.get_name()
   assert placemark.has_geometry()
   model = kmldom.AsModel(placemark.get_geometry())
   assert model
   assert 'model_4' == model.get_id()
   (ok, dae) = kmzfile.ReadFile('geometry/CU-Macky.dae')
   assert ok
   assert 268477 == len(dae)
Esempio n. 4
0
    def genKml(self):
        docu = self.factory.CreateDocument()
        docu.set_name(str(self.fednum) + " " + self.ed_name)
        #kml = factory.CreateKml()
        self.kml = self.factory.CreateElementById(kmldom.Type_kml)
        kmlfile = kmlengine.KmlFile.CreateFromImport(self.kml)
        self.kml = kmldom.AsKml(kmlfile.get_root())
        self.kml.set_feature(docu)
        geokmlkeys = self.geokml.keys()
        geokmlkeys.sort()
        for x in geokmlkeys:
            pl = self.factory.CreatePlacemark()
            pl.set_name(x)
            pl.set_id("pd-" + x)
            point_kml = self.geokml[x]["point"]
            point_text = ''
            if type(point_kml) is types.ListType:
                try:
                    point_kml = "".join(point_kml)
                except TypeError:
                    point_kml = ""
            if "boundary" in self.geokml[x]:
                bounds_kml = self.geokml[x]["boundary"]
                if type(bounds_kml) is types.ListType:
                    try:
                        bounds_kml = "".join(bounds_kml)
                    except:
                        continue
                        '''
			bounds_to_use = list()
			for b in bounds_kml:
			    if b <> None:
				bounds_to_use.append(b)
			bounds_kml = ""
			'''
                if bounds_kml.startswith('<Polygon>'):
                    bounds_kml = '<MultiGeometry>' + bounds_kml + '</MultiGeometry>'
                try:
                    bounds_kml = bounds_kml.replace(
                        "</MultiGeometry><MultiGeometry>", "")
                    bounds_points_kml = bounds_kml.replace(
                        "<MultiGeometry>", "<MultiGeometry>" + point_kml)
                    kmlfile, errors = kmlengine.KmlFile.CreateFromParse(
                        bounds_points_kml)
                except:
                    bounds_kml = self.geokml[x]["boundary"][0]
                    bounds_points_kml = bounds_kml.replace(
                        "<MultiGeometry>", "<MultiGeometry>" + point_kml)
                    kmlfile, errors = kmlengine.KmlFile.CreateFromParse(
                        bounds_points_kml)
                if "boundarydata" in self.geokml[x]:
                    for boundarydata in self.geokml[x]['boundarydata']:
                        if 'poll_name' in boundarydata and boundarydata[
                                "poll_name"] is not None:
                            point_text += "<strong>%s</strong><br/>" % boundarydata[
                                "poll_name"]
                            break
                mg = kmldom.AsMultiGeometry(kmlfile.get_root())
            #if point_kml <> None and point_kml.startswith('<Point>'):
            else:
                kmlfile, errors = kmlengine.KmlFile.CreateFromParse(
                    "<MultiGeometry>" + point_kml + "</MultiGeometry>")
                mg = kmldom.AsMultiGeometry(kmlfile.get_root())
                if "pointdata" in self.geokml[x]:
                    for pointdata in self.geokml[x]['pointdata']:
                        this_point_kml = ""
                        if 'emrp_name' in pointdata:
                            if feduid >= 24000 and feduid < 25000:
                                this_point_text = pointdata[
                                    'bldg_namef']  # au Quebec, c'est en francais
                            else:
                                this_point_text = pointdata['bldg_namee']
                            if this_point_text == None or len(
                                    this_point_text) <= 0:
                                this_point_text = ''
                                if pointdata['st_adr_nbr'] <> None and len(
                                        pointdata['st_adr_nbr']) > 0:
                                    this_point_text += pointdata['st_adr_nbr']
                                if pointdata['st_nme'] <> None and len(
                                        pointdata['st_nme']) > 0:
                                    if len(this_point_text) > 0:
                                        this_point_text += ' '
                                    this_point_text += pointdata['st_nme']
                                if pointdata['st_drctn_c'] <> None and len(
                                        pointdata['st_drctn_c']) > 0:
                                    if len(this_point_text) > 0:
                                        this_point_text += ' '
                                    this_point_text += pointdata['st_drctn_c']
                            point_text += "<strong>%s</strong><br/>" % this_point_text
            pl.set_geometry(mg)
            pl.set_styleurl('#poll-' + str(x))
            docu.add_feature(pl)
            #snippet = self.factory.CreateSnippet()
            #snippet.set_text(point_text)
            #pl.set_snippet(snippet)
            pl.set_description(point_text + self.genInfoWindowHTML(x))
            # Styles
            style_map = self.factory.CreateStyleMap()
            style_map.set_id('poll-' + str(x))
            style_on = self.genPollStyle(x, kmldom.STYLESTATE_HIGHLIGHT)
            style_off = self.genPollStyle(x, kmldom.STYLESTATE_NORMAL)
            pair_on = self.factory.CreatePair()
            pair_on.set_key(kmldom.STYLESTATE_HIGHLIGHT)
            pair_on.set_styleselector(style_on)
            pair_off = self.factory.CreatePair()
            pair_off.set_key(kmldom.STYLESTATE_NORMAL)
            pair_off.set_styleselector(style_off)
            style_map.add_pair(pair_on)
            style_map.add_pair(pair_off)
            docu.add_styleselector(style_map)
        # Riding
        '''
	pl = factory.CreatePlacemark()
	pl.set_name(self.riding_geom['edabbr'] + ' ' + self.riding_geom['edname'])
	kmlfile,errors = kmlengine.KmlFile.CreateFromParse(self.riding_geom['boundary'])
	mg = kmldom.AsMultiGeometry(kmlfile.get_root())
	pl.set_geometry(mg)
	pl.set_styleurl('#riding-' + self.edabbr.lower())
	docu.add_feature(pl)
	ridingStyle = kmlcedric.genBasicStyle('riding-' + self.edabbr.lower(), None, None)
	ls = ridingStyle.get_linestyle()
	'''
        #ls.set_color(kmlbase.Color32(partyColor(global_res['party_name']) + 0x7f000000))
        #ls.set_color(kmlbase.Color32(0xff00ffff))
        #docu.add_styleselector(ridingStyle)
        lookat = self.factory.CreateLookAt()
        lookat.set_longitude(self.x)
        lookat.set_latitude(self.y)
        lookat.set_tilt(15)
        lookat.set_altitudemode(kmldom.ALTITUDEMODE_ABSOLUTE)
        if (self.fednum >= 24000
                and self.fednum < 25000) or (self.fednum >= 35000
                                             and self.fednum < 36000):
            lookat.set_heading(-30)
        bbox_x_km = (self.bbox_xmax - self.bbox_xmin) * 80.0
        bbox_y_km = (self.bbox_ymax - self.bbox_ymin) * 111.0
        if bbox_y_km > bbox_x_km:
            max_side_km = bbox_y_km
        else:
            max_side_km = bbox_x_km
        lookat.set_altitude(0)
        lookat.set_range(max_side_km)
        lookat.set_range(max_side_km * 1000 * 1.4)
        docu.set_abstractview(lookat)