0

I'm trying to plot image I treated in dataframes. I need to add geometry to it in order to plot it with a background. I should have used GeoPandas and geodataframes in the first place.

I have arrays of temperatures that I want to plot with an OSM background.

I got geometry of my first images (non treated) with :

ds = gdal.Open(path)
width = ds.RasterXSize
height = ds.RasterYSize
gt = ds.GetGeoTransform()
minx = gt[0]
miny = gt[3] + width*gt[4] + height*gt[5] 
maxx = gt[0] + width*gt[1] + height*gt[2]
maxy = gt[3] 
COORD_4326 = ((maxy,minx), (maxy,maxx), (miny,maxx),(miny,minx))

from shapely.geometry import Polygon
geometry = Polygon(COORD_4326)

My maps are first reshaped :

carte= np.reshape(df_clean, (8, 19))

to look like this :

[[      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan 282.95377 282.95377 282.7007
  282.7007        nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan 282.9896        nan
        nan 283.2407  283.2407  282.73178 282.63565 282.63565 282.73056
  282.81693 282.81693       nan       nan       nan]
 [      nan 283.01483 282.85852       nan       nan 282.84497 282.78113
  282.78113       nan       nan 282.75024 282.75983 282.75983 282.97836
  283.19852 283.19852 282.9773  282.9773        nan]
 [      nan       nan       nan 282.63535 282.63535 282.70605 282.7924
  282.7924  282.84875 282.84875 282.89798 282.93933 282.93933 283.3523
  283.3246  283.3246  283.08267 283.08267 282.97372]
 [      nan       nan       nan       nan       nan 283.019   283.15433
  283.15433 283.32382 283.25085 283.25085 283.02994 283.02994 283.25986
  283.40384 283.40384 283.4139  283.22742       nan]
 [      nan       nan       nan       nan       nan       nan 283.3171
  283.3171  283.27655 283.29312 283.29312 283.17972 283.17972       nan
  283.3627  283.3627        nan       nan       nan]]
[[      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan 291.4486  291.4486  291.57678
  291.57678       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan 291.24075       nan
        nan 290.45227 290.45227 291.07333 291.3181  291.3181  291.7418
  291.95486 291.95486       nan       nan       nan]
 [      nan 293.93753 293.22678       nan       nan 292.0171  291.10632
  291.10632       nan       nan 291.35693 291.68976 291.68976 292.26202
  292.40176 292.40176 292.5333  292.5333        nan]
 [      nan       nan       nan 293.52945 293.52945 292.6911  292.16772
  292.16772 291.9472  291.9472  291.95898 292.39578 292.39578 292.83185
  293.06046 293.06046 292.99036 292.99036 292.5335 ]
 [      nan       nan       nan       nan       nan 293.9402  293.34418
  293.34418 292.8702  292.73587 292.73587 292.94626 292.94626 293.2858
  293.806   293.806   293.82635 293.15494       nan]
 [      nan       nan       nan       nan       nan       nan 294.38535
  294.38535 293.9531  293.64023 293.64023 293.66025 293.66025       nan
  294.1622  294.1622        nan       nan       nan]]
[[      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan       nan       nan
        nan       nan       nan       nan 294.94705 294.94705 294.67136
  294.67136       nan       nan       nan       nan]
 [      nan       nan       nan       nan       nan 294.36224       nan
        nan 294.2725  294.2725  294.73013 294.85117 294.85117 295.1364
  295.24808 295.24808       nan       nan       nan]
 [      nan 297.26715 296.6732        nan       nan 295.52042 295.1569
  295.1569        nan       nan 295.03714 295.31192 295.31192 295.6354
  296.02383 296.02383 296.55234 296.55234       nan]
 [      nan       nan       nan 297.23962 297.23962 296.67877 295.68262
  295.68262 295.55432 295.55432 295.43942 295.7421  295.7421  296.38208
  296.94592 296.94592 296.77542 296.77542 296.41263]
 [      nan       nan       nan       nan       nan 297.64557 297.0059
  297.0059  296.59274 296.4287  296.4287  296.71677 296.71677 297.22598
  297.6837  297.6837  297.79544 297.21875       nan]
 [      nan       nan       nan       nan       nan       nan 298.34683
  298.34683 297.8778  297.72574 297.72574 297.92825 297.92825       nan
  298.48676 298.48676       nan       nan       nan]]

I then plot it with matplotlib with Python on VSCode on Linux on a virtual machine. Everything is up to date. All the images have the exact same location and shape.

I'd like to add geometry column or information to it to be able to plot it with background.

With :

map_gdf = geopandas.GeoDataFrame(carte, geometry = COORD_4326, crs = "EPSG:4326")

I get :

TypeError: not all arguments converted during string formatting

or :

map_gdf = geopandas.GeoDataFrame(carte, geometry = geometry, crs = "EPSG:4326")

I get :

ValueError: Unknown column POLYGON ((51.39166666206273 4.083333332967527, 51.39166666206273 4.241666666286676, 51.32499999540204 4.241666666286676, 51.32499999540204 4.083333332967527, 51.39166666206273 4.083333332967527))

If I add my geometry to my dataframe beforeward the geometry of my GeoDataFrame ends up empty because before reshaping my dataframe each row is a pixel. If I try to add it to my reshaped dataframe, I have this error :

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

My question is : How can I add a geometry when I create my geodataframe or add it to my array ?

3
  • 1
    I'm french, it's not really called like this in my code, it's "carte" in reality
    – sam
    Commented May 25, 2023 at 14:09
  • I tried both and got the following error :
    – sam
    Commented May 29, 2023 at 15:29
  • ValueError: Unknown column POLYGON ((51.39166666206273 4.083333332967527, 51.39166666206273 4.241666666286676, 51.32499999540204 4.241666666286676, 51.32499999540204 4.083333332967527, 51.39166666206273 4.083333332967527))
    – sam
    Commented May 29, 2023 at 15:30

1 Answer 1

1

It's a bit hard to give a clear solution because the code you provided isn't really runnable and it isn't really clear (to me) what exact result you want to get.

Nonetheless I tried to write a minimal reproducible sample based on your input and a possible solution:

import geopandas
import numpy as np
import shapely

carte = [
    [
        np.nan, np.nan, np.nan, np.nan, np.nan, 282.9896, np.nan, np.nan, 283.2407,
        283.2407, 282.73178, 282.63565, 282.63565, 282.73056, 282.81693, 282.81693,
        np.nan, np.nan, np.nan
    ],
    [
        np.nan, 283.01483, 282.85852, np.nan, np.nan, 282.84497, 282.78113, 282.78113,
        np.nan, np.nan, 282.75024, 282.75983, 282.75983, 282.97836, 283.19852,
        283.19852, 282.9773 , 282.9773, np.nan
    ],
    [
        np.nan, np.nan, np.nan, 282.63535, 282.63535, 282.70605, 282.7924, 282.7924,
        282.84875, 282.84875, 282.89798, 282.93933, 282.93933, 283.3523, 283.3246,
        283.3246, 283.08267, 283.08267, 282.97372
    ]
]

wkt = (
    "POLYGON ((51.39166666206273 4.083333332967527, 51.39166666206273 4.241666666286676, "
    "51.32499999540204 4.241666666286676, 51.32499999540204 4.083333332967527, "
    "51.39166666206273 4.083333332967527))"
)
geometry = shapely.from_wkt(wkt)
geometries = [geometry for _ in range(len(carte))]
map_gdf = geopandas.GeoDataFrame(carte, geometry=geometries, crs="EPSG:4326")
print(map_gdf)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.