简体   繁体   中英

Convert geopandas dataframe to GEE feature collection using python

Given a geopandas dataframe (eg df that contains a geometry field), is the following a simplest way to convert it into ee.FeatureCollection?

import ee
features=[]
for index, row in df.iterrows():
    g=ee.Geometry.Point([row['geometry'].x,row['geometry'].y])
    # Define feature with a geometry and 'name' field from the dataframe
    feature = ee.Feature(g,{'name':ee.String(row['name'])})
    features.append(feature)
fc = ee.FeatureCollection(features)

If you want convert points geodataframe (GeoPandas) to ee.FeatureCollection, you can use this function:

import geopandas as gpd
import numpy as np
from functools import reduce
from geopandas import GeoDataFrame
from shapely.geometry import Point,Polygon

def make_points(gdf):
    g = [i for i in gdf.geometry]
    features=[]
    for i in range(len(g)):
        g = [i for i in gdf.geometry]
        x,y = g[i].coords.xy
        cords = np.dstack((x,y)).tolist()
        double_list = reduce(lambda x,y: x+y, cords)
        single_list = reduce(lambda x,y: x+y, double_list)

        g=ee.Geometry.Point(single_list)
        feature = ee.Feature(g)
        features.append(feature)
        #print("done")
        ee_object = ee.FeatureCollection(features)
    return ee_object

points_features_collections = make_points(points_gdf)

to do this function I based on this Reference

You can build a FeatureCollection from a json object. So if your geometry data file type is GeoJson you can do the following:

# import libraries
import ee
import json

# initialize earth engine client
ee.Initialize()

# load your gemotry data (which should be in GeoJson file)
with open("my_geometry_data.geojson") as f:
    geojson = json.load(f)

# construct a FeatureCollection object from the json object
fc = ee.FeatureCollection(geojson)

If your geometry data is in different format ( shapefile , geopackage ), you can first save it to GeoJson then build a FeatureCollection object.

Finally, if you don't want to write any conversion code, and want just to convert your Geopandas.GeoDataFrame instantly to ee.FeatureCollection you can use the python package: geemap

geemap has several function for converting geometry data to FeatureCollection , and vice versa. You can see examples here . In your case, you need to use the geopandas_to_ee function, so your code would look like this:

# import libraries
import ee
import geemap
import geopandas as gpd

# initialize earth engine client
ee.Initialize()

# load your gemotry data using GeoPandas (which can be stored in different formats)
gdf = gpd.read_file("my_geometry_file.geojson")

# convert to FeatureCollection using one line of code
fc = geemap.geopandas_to_ee(gdf)

Note that under the hood, geemap is converting the GeoDataFrame to a json file, and then following the first approach I mentioned above.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM