代码之家  ›  专栏  ›  技术社区  ›  Dröömbüddel

在GeoDataFrage中创建点时出现错误:不可处理的类型:“点”

  •  1
  • Dröömbüddel  · 技术社区  · 2 年前

    我试图创建一个新的地理数据框架,将一个点作为属性之一。这一切最终都会循环发生,因为我想将多个gdf合并为一个,但让我头疼的是这一部分:

            from shapely.geometry import Point
            import geopandas as gpd
            
            ptX = 13.435621213 #row2['geometry'].x
            ptY = 52.480377234 #row2['geometry'].y
            gdf_this = gpd.GeoDataFrame({('name', Point(ptX, ptY))})
    

    因为它给出错误: TypeError: unhashable type: 'Point'

    我认为这与引用与复制有关,所以我尝试先创建一个临时点,然后使用

    gdf_this = gpd.GeoDataFrame({('name', copy.deepcopy(temp_point))})

    但这给出了相同的错误。

    shapely的文档。点列出了一种方法 reverse() 它应该返回几何图形的副本,但是 Point(ptX, ptY).reverse() 给出错误 AttributeError: 'Point' object has no attribute 'reverse' ?!?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Mohammad Hossein Zardary    2 年前

    您最好考虑以下几个步骤:

    1.正在解析TypeError:不可解析的类型:“Point”:

    使用元组列表:即使创建单行DataFrame,GeoDataFrame也需要其数据的元组列表。以下是更正后的代码:

    gdf_this = gpd.GeoDataFrame([('name', Point(ptX, ptY))])
    

    2.澄清属性错误:“Point”对象没有属性“reverse”:

    Shapely的reverse()方法:它主要用于线型几何体(LineStrings、MultiLineStrings)反转其坐标。点没有有意义的“反向”操作,因此会出现错误。 更正了用于创建多个GeoDataFrame并将其连接的代码:

    import geopandas as gpd
    from shapely.geometry import Point
    
    # Assuming you have your data in a list of tuples
    data = [
        ('name1', 13.435621213, 52.480377234),
        ('name2', 15.6789, 49.1234),
        # ... more data
    ]
    
    # Create a list to store the individual GeoDataFrames
    gdf_list = []
    
    for name, x, y in data:
        point = Point(x, y)
        gdf = gpd.GeoDataFrame([(name, point)], columns=['name', 'geometry'])
        gdf_list.append(gdf)
    
    # Concatenate the GeoDataFrames
    gdf_final = gpd.concat(gdf_list)
    print(gdf_final)
    
    推荐文章