Skip to content

Instantly share code, notes, and snippets.

@prl900
Created July 30, 2023 10:52
Show Gist options
  • Save prl900/f58ec9661cb5db8a4c182a45b7df6dfe to your computer and use it in GitHub Desktop.
Save prl900/f58ec9661cb5db8a4c182a45b7df6dfe to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 57,
"id": "3c6cf767",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import cv2\n",
"\n",
"class Raster:\n",
"\n",
" def __init__(self, pixels, res, origin=(0, 0)):\n",
" \"\"\"\n",
" Initialize the raster object.\n",
"\n",
" Parameters:\n",
" pixels (NDarray): Pixels in raster.\n",
" res (float): Size of each pixel (e.g., res = 1.0 represents 1 unit in the coordinate system).\n",
" origin (tuple, optional): Tuple (x, y) representing the origin (top-left corner) of the raster.\n",
" Default is (0, 0).\n",
" \"\"\"\n",
" self.width = pixels.shape[1]\n",
" self.height = pixels.shape[0]\n",
" self.res = res\n",
" self.origin = origin\n",
" self.pixels = pixels\n",
" \n",
" \n",
" def _map_to_pixel(self, x, y):\n",
" \"\"\"\n",
" Convert world coordinates to pixel coordinates.\n",
"\n",
" Parameters:\n",
" x (float): X-coordinate in the raster's coordinate system.\n",
" y (float): Y-coordinate in the raster's coordinate system.\n",
"\n",
" Returns:\n",
" tuple: (pixel_x, pixel_y) representing the corresponding pixel coordinates.\n",
" \"\"\"\n",
" pixel_x = (x - self.origin[0]) / self.res\n",
" pixel_y = (self.origin[1] - y) / self.res\n",
" \n",
" return pixel_x, pixel_y\n",
"\n",
" \n",
" def _pixel_to_map(self, pixel_x, pixel_y):\n",
" \"\"\"\n",
" Convert pixel coordinates to world coordinates.\n",
"\n",
" Parameters:\n",
" pixel_x (float): X-coordinate of the pixel.\n",
" pixel_y (float): Y-coordinate of the pixel.\n",
"\n",
" Returns:\n",
" tuple: (x, y) representing the corresponding world coordinates.\n",
" \"\"\"\n",
" x = pixel_x * self.res + self.origin[0]\n",
" y = self.origin[1] - pixel_y * self.res\n",
" \n",
" return x, y \n",
"\n",
" \n",
" def crop(self, bounds):\n",
" \"\"\"\n",
" Crop the internal image based on the given range of latitudes and longitudes.\n",
"\n",
" Parameters:\n",
" bounds (tuple float): bounds as passed by shapely objects.\n",
"\n",
" Returns:\n",
" Raster: A new Raster object containing the cropped image.\n",
" \"\"\"\n",
" \n",
" min_lon, min_lat, max_lon, max_lat = bounds\n",
" min_pixel_x, min_pixel_y = self._map_to_pixel(min_lon, min_lat)\n",
" max_pixel_x, max_pixel_y = self._map_to_pixel(max_lon, max_lat)\n",
"\n",
" # Ensure the crop coordinates are within the raster boundaries\n",
" min_pixel_x = max(0, int(min_pixel_x))\n",
" min_pixel_y = max(0, int(min_pixel_y))\n",
" max_pixel_x = min(self.width, int(np.ceil(max_pixel_x)))\n",
" max_pixel_y = min(self.height, int(np.ceil(max_pixel_y)))\n",
"\n",
" # Perform the crop\n",
" cropped_pixels = self.pixels[min_pixel_y:max_pixel_y, min_pixel_x:max_pixel_x]\n",
"\n",
" return Raster(cropped_pixels, self.res, origin=(min_lon, max_lat))\n",
" \n",
" \n",
" def resample(self, res):\n",
" scale = self.res / res\n",
" pixels_resized = cv2.resize(self.pixels, None, fx=scale, fy=scale, interpolation=cv2.INTER_CUBIC)\n",
" \n",
" return Raster(pixels_resized, res, self.origin)\n",
"\n",
" \n",
" # This is for debugging, no need to add to API\n",
" def plot(self):\n",
" plt.imshow(self.pixels)\n",
" \n",
" \n",
" def encode(self, format='png'):\n",
" if format=='png':\n",
" # Add here code to return png as bytestream\n",
" pass\n",
" \n",
" else:\n",
" # Raise not implemented exception\n",
" pass\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "c59302a7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"arr = np.random.rand(rows, cols)\n",
"raster = Raster(arr, 1, origin=(0, 0))\n",
"\n",
"raster.plot()"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "bf4c7494",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"bounds = (0, 0, 3, 5)\n",
"cropped_raster = raster.crop(bounds)\n",
"\n",
"cropped_raster.plot()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "03fa6825",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cropped_resampled_raster = raster.resample(0.1).crop(bounds)\n",
"cropped_resampled_raster.plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2b1643de",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment