def createScreenOverlaysForKML(kml,logofile,logodims,logounits): screen1 = kml.newscreenoverlay(name='Colorbar') screen1.icon.href = fileTypesColorBarNames[filetype] screen1.overlayxy = simplekml.OverlayXY(x=0,y=0,xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.screenxy = simplekml.ScreenXY(x=0,y=0.1,xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.size.x = 0.1 screen1.size.y = 0.72 screen1.size.xunits = simplekml.Units.fraction screen1.size.yunits = simplekml.Units.fraction if logofile != 'null' and logofile != 'none': screen2 = kml.newscreenoverlay(name='logo') screen2.icon.href = logofile screen2.overlayxy = simplekml.OverlayXY(x=0,y=1,xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen2.screenxy = simplekml.ScreenXY(x=0,y=1,xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) if logounits == 'fraction': screen2.size.xunits = simplekml.Units.fraction screen2.size.yunits = simplekml.Units.fraction if logounits == 'pixel': screen2.size.xunits = simplekml.Units.pixel screen2.size.yunits = simplekml.Units.pixel if logodims == 'null': screen2.size.x = 0.85 screen2.size.y = 0.08 else: a = logodims.split(" ") screen2.size.x = float(a[0]) screen2.size.y = float(a[1])
def place_legend(datadir, document): """Place the ShakeMap intensity legend in the upper left corner of the viewer's map. Args: datadir (str): Path to data directory where output KMZ will be written. document (Element): LXML KML Document element. Returns: str: Path to output intensity legend file. """ icon = skml.Icon(href=LEGEND) overlayxy = skml.OverlayXY(x=0, y=90, xunits='pixels', yunits='pixels') screenxy = skml.ScreenXY(x=5, y=1, xunits='pixels', yunits='fraction') size = skml.Size(x=0, y=0, xunits='pixels', yunits='pixels') document.newscreenoverlay(name='Intensity Legend', icon=icon, overlayxy=overlayxy, screenxy=screenxy, size=size) # we need to find the legend file and copy it to # the output directory this_dir, _ = os.path.split(__file__) data_path = os.path.join(this_dir, '..', 'data', 'mapping') legend_file = os.path.join(data_path, LEGEND) legdest = os.path.join(datadir, LEGEND) shutil.copyfile(legend_file, legdest) return legdest
def PlotOverlayImg(self, filepath, xpixel, ypixel, name="ScreenOverlay"): """ filepath: file path xpixel ypixel name (option) """ print "[PlotOverlayImg] plotting image file:" + filepath + ",xpixel:" + str( xpixel) + ",ypixel" + str(ypixel) screen = self.kml.newscreenoverlay(name=name) screen.icon.href = filepath screen.overlayxy = simplekml.OverlayXY(x=0, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY( x=xpixel, y=ypixel, xunits=simplekml.Units.pixel, yunits=simplekml.Units.insetpixels) screen.size.x = -1 screen.size.y = -1 screen.size.xunits = simplekml.Units.fraction screen.size.yunits = simplekml.Units.fraction
def make_screen(the_kml): # add the screen # make screen screen = the_kml.newscreenoverlay(name='Legende') screen.icon.href = 'files/color_ramp.png' screen.icon.scale = 0.01 screen.overlayxy = simplekml.OverlayXY(x=0, y=1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY( x=150, y=15, xunits=simplekml.Units.pixel, yunits=simplekml.Units.insetpixels, ) screen.size.x = 0.36 screen.size.y = 0.08 screen.size.xunits = simplekml.Units.fraction screen.size.yunits = simplekml.Units.fraction # make second screen screen_2 = the_kml.newscreenoverlay(name='Logo') screen_2.icon.href = 'files/logo.png' screen_2.icon.scale = 0.01 screen_2.overlayxy = simplekml.OverlayXY(x=0, y=1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen_2.screenxy = simplekml.ScreenXY( x=15, y=15, xunits=simplekml.Units.pixel, yunits=simplekml.Units.insetpixels, ) screen_2.size.x = 0.1 screen_2.size.y = 0.1 screen_2.size.xunits = simplekml.Units.fraction screen_2.size.yunits = simplekml.Units.fraction
def setup_legend(screen): screen.overlayxy = simplekml.OverlayXY(x=0, y=0.5, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=10, y=0.5, xunits=simplekml.Units.pixel, yunits=simplekml.Units.fraction) '''
def _scalar2kmz(self, d, var, tndx, out_path, cleanup=True): """ Postprocess a single raster variable ``fa`` and store result in out_path. :param d: the open netCDF file :param var: the variable name :param tndx: the temporal index of the grid to store :param out_path: the path to the KMZ output :param cleanup: if true, delete png files :return: the path to the generated KMZ """ # construct kml file doc = kml.Kml(name=var) # generate the png files raster_path, cb_path, corner_coords = self._scalar2png( d, var, tndx, out_path) # add colorbar to KMZ if cb_path is not None: cbo = doc.newscreenoverlay(name='colorbar') cbo.overlayxy = kml.OverlayXY(x=0, y=1, xunits=kml.Units.fraction, yunits=kml.Units.fraction) cbo.screenxy = kml.ScreenXY(x=0.02, y=0.95, xunits=kml.Units.fraction, yunits=kml.Units.fraction) cbo.size = kml.Size(x=150, y=300, xunits=kml.Units.pixel, yunits=kml.Units.pixel) cbo.color = kml.Color.rgb(255, 255, 255, a=150) cbo.visibility = 1 #doc.addfile(cb_path) cbo.icon.href = cb_path # add ground overlay ground = doc.newgroundoverlay(name=var, color='80ffffff') ground.gxlatlonquad.coords = corner_coords #doc.addfile(raster_path) ground.icon.href = raster_path # build output file kmz_path = out_path + ".kmz" doc.savekmz(kmz_path) # cleanup if cleanup: os.remove(raster_path) if cb_path is not None: os.remove(cb_path) return kmz_path, raster_path, cb_path, corner_coords
def screen(kml): screen1 = kml.newscreenoverlay(name='Colorbar') if filechoice == 2: screen1.icon.href = 'Colorbar-water-levels.png' elif filechoice == 4: screen1.icon.href = 'Colorbar-wave-heights.png' elif filechoice == 8: screen1.icon.href = 'Colorbar-wave-periods.png' elif filechoice == 3: screen1.icon.href = 'CColorbar-wave-periods.png' elif filechoice == 1: screen1.icon.href = 'Colorbar-bathymetry.png' screen1.overlayxy = simplekml.OverlayXY(x=0, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.screenxy = simplekml.ScreenXY(x=0, y=0.1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.size.x = 0.1 screen1.size.y = 0.72 screen1.size.xunits = simplekml.Units.fraction screen1.size.yunits = simplekml.Units.fraction screen2 = kml.newscreenoverlay(name='logo') screen2.icon.href = 'logo.png' screen2.overlayxy = simplekml.OverlayXY(x=0, y=1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen2.screenxy = simplekml.ScreenXY(x=0, y=1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen2.size.x = 0.85 screen2.size.y = 0.08 screen2.size.xunits = simplekml.Units.fraction screen2.size.yunits = simplekml.Units.fraction print 'Screen Overlay completed'
def chart_legend(self, legend_figure): """ Add overlay legend in top left corner :param legend_figure: path to figure :return: kml-object """ # NOT YET TESTED screen = self.newscreenoverlay(name='Legend') # TODO: automatically make figure of legend screen.icon.href = legend_figure screen.overlayxy = simplekml.OverlayXY(x=0, y=1, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=15, y=15, xunits=simplekml.Units.insetpixels, yunits=simplekml.Units.insetpixels) screen.size.x = -1 screen.size.y = -1 screen.size.xunits = simplekml.Units.fraction screen.size.yunits = simplekml.Units.fraction return screen
def create_kmz(maplayer, outfile, mask=None, levels=None, colorlist=None): """ Create kmz files of models Args: maplayer (dict): Dictionary of one model result formatted like: .. code-block:: python { 'grid': mapio grid2D object, 'label': 'label for colorbar and top line of subtitle', 'type': 'output or input to model', 'description': 'description for subtitle' } outfile (str): File extension mask (float): make all cells below this value transparent levels (array): list of bin edges for each color, must be same length colorlist (array): list of colors for each bin, should be length one less than levels Returns: kmz file """ # Figure out lims if levels is None: levels = DFBINS if colorlist is None: colorlist = DFCOLORS if len(levels)-1 != len(colorlist): raise Exception('len(levels) must be one longer than len(colorlist)') # Make place to put temporary files temploc = tempfile.TemporaryDirectory() # Figure out file names name, ext = os.path.splitext(outfile) basename = os.path.basename(name) if ext != '.kmz': ext = '.kmz' filename = '%s%s' % (name, ext) mapfile = os.path.join(temploc.name, '%s.tiff' % basename) legshort = '%s_legend.png' % basename legfile = os.path.join(temploc.name, legshort) # Make colored geotiff out = make_rgba(maplayer['grid'], mask=mask, levels=levels, colorlist=colorlist) rgba_img, extent, lmin, lmax, cmap = out # Save as a tiff plt.imsave(mapfile, rgba_img, vmin=lmin, vmax=lmax, cmap=cmap) # Start creating kmz L = simplekml.Kml() # Set zoom window doc = L.document # have to put lookat in root document directory doc.altitudemode = simplekml.AltitudeMode.relativetoground boundaries1 = get_zoomextent(maplayer['grid']) doc.lookat.latitude = np.mean([boundaries1['ymin'], boundaries1['ymax']]) doc.lookat.longitude = np.mean([boundaries1['xmax'], boundaries1['xmin']]) doc.lookat.altitude = 0. doc.lookat.range = (boundaries1['ymax']-boundaries1['ymin']) * 111. * 1000. # dist in m from point doc.description = 'USGS near-real-time earthquake-triggered %s model for \ event id %s' % (maplayer['description']['parameters'] \ ['modeltype'], maplayer['description']['event_id']) prob = L.newgroundoverlay(name=maplayer['label']) prob.icon.href = 'files/%s.tiff' % basename prob.latlonbox.north = extent[3] prob.latlonbox.south = extent[2] prob.latlonbox.east = extent[1] prob.latlonbox.west = extent[0] L.addfile(mapfile) # Add legend and USGS icon as screen overlays # Make legend make_legend(levels, colorlist, filename=legfile, title=maplayer['label']) size1 = simplekml.Size(x=0.3, xunits=simplekml.Units.fraction) leg = L.newscreenoverlay(name='Legend', size=size1) leg.icon.href = 'files/%s' % legshort leg.screenxy = simplekml.ScreenXY(x=0.2, y=0.05, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) L.addfile(legfile) size2 = simplekml.Size(x=0.15, xunits=simplekml.Units.fraction) icon = L.newscreenoverlay(name='USGS', size=size2) icon.icon.href = 'files/USGS_ID_white.png' icon.screenxy = simplekml.ScreenXY(x=0.8, y=0.95, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) L.addfile(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, 'content', 'USGS_ID_white.png')) L.savekmz(filename) return filename
def sendLogos(): if checkPing(getLGIp()): millis = int(round(time.time() * 1000)) kml = simplekml.Kml(name="Layout") screen = kml.newscreenoverlay(name='FLOYBD') screen.icon.href = "http://"+getDjangoIp()+":8000/static/img/ownLogos.png?a="+str(millis) screen.overlayxy = simplekml.OverlayXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.rotationxy = simplekml.RotationXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.size.x = 0.20 screen.size.y = 0.15 screen.size.xunits = simplekml.Units.fraction screen.size.yunits = simplekml.Units.fraction screenName = kml.newscreenoverlay(name='App name') screenName.icon.href = "http://" + getDjangoIp() + ":8000/static/img/FlOYBDLogo.png?a=" + str(millis) screenName.overlayxy = simplekml.OverlayXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.screenxy = simplekml.ScreenXY(x=0.3, y=0.95, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.rotationxy = simplekml.RotationXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.size.x = 0.50 screenName.size.y = 0.07 screenName.size.xunits = simplekml.Units.fraction screenName.size.yunits = simplekml.Units.fraction screen1 = kml.newscreenoverlay(name='Logos') screen1.icon.href = "http://" + getDjangoIp() + ":8000/static/img/sharedLogos.png?a="+str(millis) screen1.overlayxy = simplekml.OverlayXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.screenxy = simplekml.ScreenXY(x=0.0, y=0.01, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.rotationxy = simplekml.RotationXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.size.x = 0.3 screen1.size.y = 0.25 screen1.size.xunits = simplekml.Units.fraction screen1.size.yunits = simplekml.Units.fraction currentDir = os.getcwd() fileName = "Layout.kml" dir1 = os.path.join(currentDir, "static/logos") dirPath2 = os.path.join(dir1, fileName) logger.info("\033[93m" + "Saving kml: " + str(dirPath2) + "\033[0m") kml.save(dirPath2) if db_table_exists("floybd_setting"): logger.info("\033[93m" + "Sending Logos...from: " + getDjangoIp() + " to: " + getLGIp() + "\033[0m") getLeftScreenCommand = "sshpass -p " + getLGPass() + " ssh lg@" + getLGIp() + \ " 'head -n 1 personavars.txt | cut -c17-19'" leftScreenDirty = subprocess.check_output(getLeftScreenCommand, stderr=subprocess.STDOUT, shell=True) leftScreenClean = leftScreenDirty.rstrip().decode("utf-8") leftScreenNumber = leftScreenClean[-1:] logger.debug("Left Screen: " + str(leftScreenClean)) logger.info("\033[93m" + "Left Screen Number: " + str(leftScreenNumber) + "\033[0m") command = "echo 'http://" + getDjangoIp() + ":8000/static/logos/Layout.kml?a="+str(millis) +\ "' | sshpass -p " + getLGPass() + " ssh lg@" + getLGIp() + " 'cat - > /var/www/html/kmls_" + \ leftScreenNumber+".txt'" os.system(command)
def sendLogos(lg_IP, lg_Pass, server_IP, proj_name, xPropi, yPropi, xAgraiments, yAgraiments): millis = int(round(time.time() * 1000)) kml = simplekml.Kml(name="Layout") screen = kml.newscreenoverlay(name="FlOYBD") screen.icon.href = "http://" + server_IP + \ ":5000/logos/propis_" + proj_name + ".png?a=" + str(millis) screen.overlayxy = simplekml.OverlayXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.rotationxy = simplekml.RotationXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.size.x = xAgraiments screen.size.y = yAgraiments screen.size.xunits = simplekml.Units.fraction screen.size.yunits = simplekml.Units.fraction screenName = kml.newscreenoverlay(name='App name') screenName.icon.href = "http://" + server_IP + ":5000/logos/" + proj_name + ".png?a=" + \ str(millis) screenName.overlayxy = simplekml.OverlayXY(x=0.0, y=1.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.screenxy = simplekml.ScreenXY(x=0.5, y=0.95, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.rotationxy = simplekml.RotationXY( x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screenName.size.x = xPropi screenName.size.y = yPropi screenName.size.xunits = simplekml.Units.fraction screenName.size.yunits = simplekml.Units.fraction screen1 = kml.newscreenoverlay(name='Logos') screen1.icon.href = "http://" + server_IP + \ ":5000/logos/comuns.png?a=" + str(millis) screen1.overlayxy = simplekml.OverlayXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.screenxy = simplekml.ScreenXY(x=0.0, y=0.01, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.rotationxy = simplekml.RotationXY(x=0.0, y=0.0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen1.size.x = 0.3 screen1.size.y = 0.25 screen1.size.xunits = simplekml.Units.fraction screen1.size.yunits = simplekml.Units.fraction currentDir = os.getcwd() print "current dir : " + currentDir fileName = "Layout.kml" dir1 = os.path.join(currentDir, "/logos") print dir1 dirPath2 = os.path.join(dir1, fileName) dirPathFinal = currentDir + dirPath2 kml.save(currentDir + dirPath2) getLeftScreenCommand = "sshpass -p " + lg_Pass + " ssh lg@" + lg_IP + \ " 'head -n 1 personavars.txt | cut -c17-19'" leftScreenDirty = subprocess.check_output(getLeftScreenCommand, stderr=subprocess.STDOUT, shell=True) leftScreenClean = leftScreenDirty.rstrip().decode("utf-8") leftScreenNumber = leftScreenClean[-1:] #leftScreenNumber = "4" print leftScreenNumber command = "echo 'http://" + server_IP + ":5000/logos/Layout.kml?a=" + str(millis) +\ "' | sshpass -p " + lg_Pass + " ssh lg@" + lg_IP + \ " 'cat - > /var/www/html/kmls_" + leftScreenNumber + ".txt' " #command = "echo 'abc' > /tmp/a.txt" print command subprocess.Popen(command, shell=True) print 'y'
def make_kmz(job_id, steps, mode, only_vars): """ Create KMZ file from visualization stored in wrfxweb. :param job_id: string, the name of job directory :param steps: string '1,1,1,3' takes every 3rd frame in domain 4, etc. Default: all 1 :param mode: string, 'inc', ' to include image files (default), 'ref' to use links only :param only_var: list of strings variables to include or None to include all """ logging.info('make_kmz: job_id=%s' % job_id) job_path = osp.join(osp.abspath(sys_cfg.sims_path),job_id) url_prefix = pxp.join(sys_cfg.url_root,sys_cfg.sims_url_path,job_id) logging.debug('make_kmz: job_path %s' % job_path) logging.debug('make_kmz: url_prefix %s' % url_prefix) if mode == '' or mode == "inc": kmz_filename = job_id + '_inc.kmz' href_prefix = osp.abspath(job_path) href_join = osp.join logging.debug('make_kmz: kmz file will include images from %s' % href_prefix) logging.info('make_kmz: kmz file will include images') elif mode == "ref": kmz_filename = job_id + '_ref.kmz' href_prefix = url_prefix href_join = pxp.join logging.debug('make_kmz: kmz file will link to images from %s' % href_prefix) logging.info('make_kmz: kmz file will link to images') else: logging.error('make_kmz: arg 2 must be "inc" or "ref" or omitted') exit(1) # read the catalog and the manifest cat_path = osp.join(job_path,'catalog.json') cat = json.load(open(cat_path)) if job_id not in cat: logging.error('job id %s not in the catalog' % job_id) sys.exit(1) cat_entry = cat[job_id] mf = json.load(open(osp.join(sys_cfg.sims_path,cat_entry['manifest_path']))) mdomain = max(map(int, mf.keys())) if steps=='': step=[1] else: step=map(int, steps.split(',')) if len(step) == 1: step = step*mdomain elif len(step) != mdomain: logging.error('make_kmz: steps needed for all up to max domain number = %s' % mdomain) sys.exit(1) description = cat_entry['description'] logging.info('make_kmz: job description: %s' % description) # transpose var and time in manifest, output to frame frame={} for domain in mf: for ts_esmf in mf[domain]: for var in mf[domain][ts_esmf]: if only_vars is None or var in only_vars: update_nested_dict(frame,{domain:{var:{ts_esmf:mf[domain][ts_esmf][var]}}}) doc = kml.Kml(name=description) for domain in sorted(frame): domain_folder = doc.newfolder(name = domain) istep = step[int(domain)-1] logging.info('make_kmz: processing domain %s step %s' % (domain, istep)) for var in frame[domain]: var_folder = domain_folder.newfolder(name = var) ts_esmf = sorted(frame[domain][var].keys()) ts_esmf = ts_esmf[1::istep] ts_esmf1 = ts_esmf[1:] ts_esmf1.append(None) for ts_esmf,ts_esmf1 in zip(ts_esmf,ts_esmf1): ts_folder = var_folder.newfolder(name = ts_esmf) ts_folder.timespan.begin = ts_esmf.replace('_','T')+'Z' if ts_esmf1 is not None: ts_folder.timespan.end = ts_esmf1.replace('_','T')+'Z' frame_data = frame[domain][var][ts_esmf] raster_path = frame_data['raster'] coords = frame_data['coords'] if 'colorbar' in frame_data: # add colorbar to KMZ cb_path = frame_data['colorbar'] cbo = ts_folder.newscreenoverlay(name='colorbar') cbo.overlayxy = kml.OverlayXY(x=0,y=1,xunits=kml.Units.fraction,yunits=kml.Units.fraction) cbo.screenxy = kml.ScreenXY(x=0.02,y=0.95,xunits=kml.Units.fraction,yunits=kml.Units.fraction) cbo.size = kml.Size(x=150,y=300,xunits=kml.Units.pixel,yunits=kml.Units.pixel) cbo.color = kml.Color.rgb(255,255,255,a=150) cbo.visibility = 0 cbo.icon.href = href_join(href_prefix,cb_path) # add ground overlay ground = ts_folder.newgroundoverlay(name=var,color='80ffffff') ground.gxlatlonquad.coords = coords ground.visibility = 0 ground.icon.href = href_join(href_prefix,raster_path) # build output file kmz_path = osp.join(job_path,kmz_filename) logging.info('make_kmz: creating file %s' % kmz_path) doc.savekmz(kmz_path) url = pxp.join(url_prefix,kmz_filename) logging.info('make_kmz: file created at %s' % url) try: r = requests.get(url, stream=True) content_size = int(r.headers['Content-Length']) logging.info('make_kmz: file size is %s' % content_size) cat[job_id]['kml_url']=url cat[job_id]['kml_size']=content_size json.dump(cat, open(cat_path,'w'), indent=4, separators=(',', ': ')) except: logging.warning('make_kmz: accessing the file over the web failed')
def make_kml(output_kml, output_format='kmz'): kml = simplekml.Kml(open=1, name='LandGIS: Open Land Data') kml.document.description = link("http://opengeohub.org/about-landgis", 'Read more ...') # Spatial layers kml_fld=kml.newfolder(name = 'Spatial layers') for i,r in df.iterrows(): # i,r = next(df.iterrows()) if r.layer_display_type[:2] not in ('2D'): continue try: layer_name = '{}:{}'.format(r.layer_distribution_folder, osp.splitext(r.layer_filename_pattern)[0]) layer_title = r.layer_title time_string = layer_name.split('_')[-2] layer_desc = '{}</br>{}'.format(link_layer(r), time_string) # Put TimeStamp or TimeSpan td = time_designation(time_string) except Exception as e: print("Error while processing {}: {}".format(layer_name, e)) else: setup_network_link(kml_fld, layer_title, layer_name, description=layer_desc, td=td) # 3D Layers for i,r in df.loc[df.layer_display_type.apply(lambda x: x[:2]=='3D')].iterrows(): # i,r = next(df.loc[df.layer_display_type.apply(lambda x: x[:2]=='3D')].iterrows()) try: layer_group_name = '{}:{}'.format(r.layer_distribution_folder, osp.splitext(r.layer_filename_pattern)[0]) layers = fnmatch.filter(wms_layers, layer_group_name.replace('*..*','*')) if len(layers)==0: continue time_string = layer_group_name.split('_')[-2] layer_desc = '{}</br>{}'.format(link_layer(r),time_string) kml_fld_lay = kml_fld.newfolder(name = r.layer_title, visibility=0, description=layer_desc, open=0) kml_fld_lay.style = folder_style_radio setup_timeref(kml_fld_lay, time_designation(time_string)) layer_list = [(x, x.split('_')[-3].split('..')[1]) for x in layers] layer_list = sorted(layer_list, key=lambda x: int(x[1].replace('cm',''))) for layer_name, depth_string in layer_list: # layer_name=layers[0] setup_network_link(kml_fld_lay, depth_string, layer_name) except Exception as e: print("Error while processing {}: {}".format(layer_name, e)) # Time span layers kml_fld = kml.newfolder(name = 'Time span layers') # new folder for i,r in df.loc[df.layer_display_type.apply(lambda x: x[:2] in ('TS','SS'))].iterrows(): # i,r = next(df.loc[df.layer_display_type.apply(lambda x: x[:2]=='TS')].iterrows()) layer_type = r.layer_display_type[:2] try: # Find all layers from wms layer_group_name = '{}:{}'.format(r.layer_distribution_folder, osp.splitext(r.layer_filename_pattern)[0]) layers = fnmatch.filter(wms_layers, layer_group_name) if layer_type=='TS': layer_list = [(x, x.split('_')[-2]) for x in layers] layer_list = sorted(layer_list, key=lambda x: int(x[1].replace('BC','-'))) elif layer_type == 'SS': layer_list = [(x, find_month(x.split('_')[2])) for x in layers] layer_list = sorted(layer_list, key=lambda x: month_to_number(x[1])) layer_title = r.layer_title kml_fld_lay = kml_fld.newfolder(name = layer_title, visibility=0, open=0) kml_fld_lay.timespan = simplekml.TimeSpan(layer_list[0][1].replace('BC','-'), layer_list[-1][1].replace('BC','-')) kml_fld_lay.style = folder_style_radio if layer_type == 'TS': layer_desc = '{}</br>{} .. {}'.format(link_layer(r), layer_list[0][1], layer_list[-1][1]) elif layer_type == 'SS': layer_desc = '{}</br>{}'.format(link_layer(r), layer_group_name.split('_')[-2]) kml_fld_lay.description=layer_desc for layer_name, time_string in layer_list: if layer_type == 'TS': td = time_designation(time_string.replace('BC','-')) elif layer_type == 'SS': td = None setup_network_link(kml_fld_lay, time_string, layer_name, td=td) except Exception as e: print("Error while processing {}: {}".format(layer_name, e)) # Logo in ScreenOverlay screen = kml.newscreenoverlay(name='OpenGeoHub') screen.icon.href = 'https://opengeohub.org/themes/gavias_edubiz/logo.png' screen.overlayxy = simplekml.OverlayXY(x=0, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=0, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) # screen.description = link('http://opengeohub.org/about-landgis', 'LandGis') if output_format=='kmz': kml.savekmz(output_kml) else: kml.save(output_kml)
print('[raster2kml] rendering colorbar with unit %s and colormap %s...' % (cb_unit, cmap_name)) cb_png_data = make_colorbar([cbu_min, cbu_max], 'vertical', 2, cmap, vw['name'] + ' ' + cb_unit, varname) cb_name = 'colorbar-' + base_name + '.png' with open(cb_name, 'w') as f: f.write(cb_png_data) doc.addfile(cb_name) cbo = doc.newscreenoverlay(name='colorbar') cbo.overlayxy = kml.OverlayXY(x=0, y=1, xunits=kml.Units.fraction, yunits=kml.Units.fraction) cbo.screenxy = kml.ScreenXY(x=0.02, y=0.95, xunits=kml.Units.fraction, yunits=kml.Units.fraction) cbo.size = kml.Size(x=150, y=300, xunits=kml.Units.pixel, yunits=kml.Units.pixel) cbo.color = kml.Color.rgb(255, 255, 255, a=150) cbo.visibility = 1 cbo.icon.href = cb_name print( '[raster2kml] rendering raster from variable %s (Mercator projection) ...' % varname) ground = doc.newgroundoverlay(name=varname, color='80ffffff') raster_png_data, corner_coords = basemap_raster_mercator( lon, lat, fa, fa_min, fa_max, cmap)
bb_y = np.empty(0, dtype=float) #Add Logo as screenoverlay logo_url = 'https://s3.amazonaws.com/kml-test.carteasyn.com/logo/carteasyn-gsb.png' screen = folder.newscreenoverlay(name='ScreenOverlay') m_screen = m_folder.newscreenoverlay(name='ScreenOverlay') screen.icon.href = logo_url m_screen.icon.href = logo_url #sets location, overlayxy is position on image, screenxy corresponding screen position screen.overlayxy = simplekml.OverlayXY(x=0.5, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) screen.screenxy = simplekml.ScreenXY(x=0.91, y=0.12, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) m_screen.overlayxy = simplekml.OverlayXY(x=0.5, y=0, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) m_screen.screenxy = simplekml.ScreenXY(x=0.91, y=0.12, xunits=simplekml.Units.fraction, yunits=simplekml.Units.fraction) #Image size & units screen.size.x = 180 screen.size.y = 120 screen.size.xunits = simplekml.Units.pixel screen.size.yunits = simplekml.Units.pixel