Skip to content

Instantly share code, notes, and snippets.

@mhweber
Created January 23, 2020 20:21
Show Gist options
  • Save mhweber/b826811eea82a10df9c110c92a3e979c to your computer and use it in GitHub Desktop.
Save mhweber/b826811eea82a10df9c110c92a3e979c to your computer and use it in GitHub Desktop.
raster to point
raster_2d = 2-dimensional array imported with gdal
nodata = nodata value from gdal import for 2-d array
geotransform = geotrasform from gdal import of 2-d array
def raster_to_point(raster_2d, nodata, geotransform):
raster_2d = raster_2d.flatten()
locs = np.where(raster_2d <> nodata)[0] #Get locs in array w/ data
raster_2d = raster_2d[locs] #Reduce data to those locs
geo = list(geotransform) #Make geotransform from raster a list
x = locs % xsize #Convert flattened locations to x coord
x = geo[0] + (x * geo[1]) + (geo[1] / 2)
y = locs / xsize #Convert flattened locations to y coord
y = geo[3] + (y * geo[5]) + (geo[5] / 2)
#Make pandas data frame
gdf = pd.DataFrame({'VALUE':raster_2d, 'Latitude':y, 'Longitude':x})
#Convert to geopandas
geometry = [Point(xy) for xy in zip(gdf.Longitude, gdf.Latitude)]
gdf = gdf.drop(['Longitude', 'Latitude'], axis=1)
gdf = gpd.GeoDataFrame(gdf, geometry=geometry, crs=proj)
return gdf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment