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
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
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)
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)