def get_overlap_lalo(atr1, atr2): """Find overlap area in lat/lon of two geocoded files Parameters: atr1/2 - dict, attribute dictionary of two input files in geo coord Returns: W/E/S/N - float, West/East/South/North in deg """ W1, E1, S1, N1 = ut.four_corners(atr1) W2, E2, S2, N2 = ut.four_corners(atr2) west = max(W1, W2) east = min(E1, E2) north = min(N1, N2) south = max(S1, S2) return west, east, south, north
def get_overlap_lalo(atr1, atr2): """Find overlap area in lat/lon of two geocoded files Inputs: atr1/2 - dict, attribute dictionary of two input files in geo coord Outputs: W/E/S/N - float, West/East/South/North in deg """ W1, E1, S1, N1 = ut.four_corners(atr1) W2, E2, S2, N2 = ut.four_corners(atr2) west = max(W1, W2) east = min(E1, E2) north = min(N1, N2) south = max(S1, S2) return west, east, south, north
def get_overlap_lalo(atr_list): """Find overlap area in lat/lon of geocoded files based on their metadata. Parameters: atr_list - list of dict, attribute dictionary of two input files in geo coord Returns: S/N/W/E - float, West/East/South/North in deg """ S, N, W, E = None, None, None, None for i, atr in enumerate(atr_list): Si, Ni, Wi, Ei = ut.four_corners(atr) if i == 0: S, N, W, E = Si, Ni, Wi, Ei else: S = max(Si, S) N = min(Ni, N) W = max(Wi, W) E = min(Ei, E) return S, N, W, E
def write_kmz_file(data, metadata, out_file, inps=None): """ Generate Google Earth KMZ file for input data matrix. Inputs: data - 2D np.array in int/float, data matrix to write out_file - string, output file name metadata - dict, containing the following attributes: WIDTH/LENGTH : required, file size X/Y_FIRST/STEP : required, for lat/lon spatial converage ref_x/y : optional, column/row number of reference pixel PROJECT_NAME : optional, for KMZ folder name inps - Namespace, optional, input options for display Output: kmz_file - string, output KMZ filename Example: from mintpy.utils import readfile, plot as pp from mintpy import save_kmz fname = 'geo_velocity_masked.h5' data, atr = readfile.read(fname) out_file = pp.auto_figure_title(fname, None)+'.kmz' save_kmz.write_kmz_file(data, atr, out_file) """ if not inps: inps = cmd_line_parse() if not inps.vlim: inps.vlim = [np.nanmin(data), np.nanmax(data)] west, east, south, north = ut.four_corners(metadata) # 2.1 Make PNG file - Data print('plotting data ...') # Figure size if not inps.fig_size: plot_shape = [east - west, north - south] fig_scale = min(pp.min_figsize_single / min(plot_shape), pp.max_figsize_single / max(plot_shape), pp.max_figsize_height / plot_shape[1]) inps.fig_size = [2. * i * fig_scale for i in plot_shape] print('create figure in size: ' + str(inps.fig_size)) fig = plt.figure(figsize=inps.fig_size, frameon=False) ax = fig.add_axes([0., 0., 1., 1.]) ax.set_axis_off() inps.colormap = pp.check_colormap_input(metadata, inps.colormap) # Plot - data matrix ax.imshow(data, cmap=inps.colormap, vmin=inps.vlim[0], vmax=inps.vlim[1], aspect='auto', interpolation='nearest') # Plot - reference pixel if inps.disp_ref_pixel: try: xref = int(metadata['REF_X']) yref = int(metadata['REF_Y']) ax.plot(xref, yref, inps.ref_marker, color=inps.ref_marker_color, ms=inps.ref_marker_size) print('show reference point') except: inps.disp_ref_pixel = False print('Cannot find reference point info!') width = int(metadata['WIDTH']) length = int(metadata['LENGTH']) ax.set_xlim([0, width]) ax.set_ylim([length, 0]) out_name_base = os.path.splitext(out_file)[0] data_png_file = out_name_base + '.png' print('writing {} with dpi={}'.format(data_png_file, inps.fig_dpi)) plt.savefig(data_png_file, pad_inches=0.0, transparent=True, dpi=inps.fig_dpi) # 2.3 Generate KML file print('generating kml file ...') proj_name = metadata.get('PROJECT_NAME', 'InSAR_MintPy') doc = KML.kml(KML.Folder(KML.name(proj_name))) # Add data png file img_name = os.path.splitext(os.path.basename(data_png_file))[0] img = KML.GroundOverlay( KML.name(img_name), KML.Icon(KML.href(os.path.basename(data_png_file))), KML.altitudeMode('clampToGround'), KML.LatLonBox(KML.north(str(north)), KML.east(str(east)), KML.south(str(south)), KML.west(str(west)))) doc.Folder.append(img) # Add colorbar png file cbar_file = '{}_cbar.png'.format(out_name_base) cbar_overlay = generate_cbar_element(cbar_file, vmin=inps.vlim[0], vmax=inps.vlim[1], unit=inps.disp_unit, cmap=inps.colormap) doc.Folder.append(cbar_overlay) kmlstr = etree.tostring(doc, pretty_print=True).decode('utf8') # Write KML file kml_file = '{}.kml'.format(out_name_base) print('writing ' + kml_file) with open(kml_file, 'w') as f: f.write(kmlstr) # 2.4 Generate KMZ file, by # 1) go to the directory of kmz file # 2) zip all data files # 3) go back to the working directory kmz_file = '{}.kmz'.format(out_name_base) cmd = 'cd {d1}; zip {fz} {fl} {fd} {fc}; cd {d2}'.format( d1=os.path.abspath(os.path.dirname(kmz_file)), fz=os.path.basename(kmz_file), fl=os.path.basename(kml_file), fd=os.path.basename(data_png_file), fc=os.path.basename(cbar_file), d2=os.getcwd()) print(cmd) os.system(cmd) print('finished wirting to {}'.format(kmz_file)) cmd = 'rm {} {} {}'.format(kml_file, data_png_file, cbar_file) print(cmd) os.system(cmd) return kmz_file
def write_kmz_overlay(data, meta, out_file, inps): """Generate Google Earth Overlay KMZ file for data in GEO coordinates. Parameters: data - 2D np.array in int/float, data matrix to write meta - dict, containing the following attributes: WIDTH/LENGTH : required, file size X/Y_FIRST/STEP : required, for lat/lon spatial converage REF_X/Y : optional, column/row number of reference pixel out_file - string, output file name inps - Namespace, optional, input options for display Returns: kmz_file - string, output KMZ filename """ south, north, west, east = ut.four_corners(meta) # 1. Make PNG file - Data print('plotting data ...') # Figure size if not inps.fig_size: inps.fig_size = pp.auto_figure_size( ds_shape=[north - south, east - west], scale=2.0) fig = plt.figure(figsize=inps.fig_size, frameon=False) ax = fig.add_axes([0., 0., 1., 1.]) ax.set_axis_off() # Plot - data matrix ax.imshow(data, vmin=inps.vlim[0], vmax=inps.vlim[1], cmap=inps.colormap, aspect='auto', interpolation='nearest') # Plot - reference pixel rx = meta.get('REF_X', None) ry = meta.get('REF_Y', None) if inps.disp_ref_pixel and rx is not None and ry is not None: ax.plot(int(rx), int(ry), inps.ref_marker, color=inps.ref_marker_color, ms=inps.ref_marker_size) print('show reference point') else: print('no plot for reference point.') width = int(meta['WIDTH']) length = int(meta['LENGTH']) ax.set_xlim([0, width]) ax.set_ylim([length, 0]) out_file_base = os.path.splitext(out_file)[0] data_png_file = out_file_base + '.png' print('writing {} with dpi={}'.format(data_png_file, inps.fig_dpi)) plt.savefig(data_png_file, pad_inches=0.0, transparent=True, dpi=inps.fig_dpi) # 2. Generate KML file kml_doc = KML.Document() # Add data png file img_name = os.path.splitext(os.path.basename(data_png_file))[0] img_overlay = KML.GroundOverlay( KML.name(img_name), KML.Icon(KML.href(os.path.basename(data_png_file))), KML.altitudeMode('clampToGround'), KML.LatLonBox( KML.north(str(north)), KML.east(str(east)), KML.south(str(south)), KML.west(str(west)), ), ) kml_doc.append(img_overlay) # Add colorbar png file cbar_file = '{}_cbar.png'.format(out_file_base) cbar_overlay = generate_cbar_element( cbar_file, vmin=inps.vlim[0], vmax=inps.vlim[1], unit=inps.disp_unit, cmap=inps.colormap, loc=inps.cbar_loc, nbins=inps.cbar_bin_num, label=inps.cbar_label, ) kml_doc.append(cbar_overlay) # Write KML file kmz_file = write_kmz_file( out_file_base, kml_doc, data_files=[data_png_file, cbar_file], keep_kml_file=inps.keep_kml_file, ) return kmz_file