martinfleis / numerical-taxonomy-paper

Code for the research paper "Methodological Foundation of a Numerical Taxonomy of Urban Form"
https://martinfleis.github.io/numerical-taxonomy-maps/
Creative Commons Attribution 4.0 International
31 stars 4 forks source link

ValueError: `heights` cannot be None. #5

Open EmilienGohaud opened 2 years ago

EmilienGohaud commented 2 years ago

Hello again,

I am facing a new error with simple character calculation which did not occur before I updated Momepy through pip to fix the tessellation-based block issue:

What am I doing wrong this time? I never wrote 'heighs' with an S but it pops up that way

Thank you


buildings['sdbAre']` = mm.Area(buildings).series
buildings['sdbVol'] = mm.Volume(buildings, 'height', 'sdbAre').series
buildings['sdbPer'] = mm.Perimeter(buildings).series
buildings['sdbCoA'] = mm.CourtyardArea(buildings, 'sdbAre').series

buildings['ssbFoF'] = mm.FormFactor(buildings, 'sdbVol', 'sdbAre').series
buildings['ssbVFR'] = mm.VolumeFacadeRatio(buildings, 'height', 'sdbVol', 'sdbPer').series
buildings['ssbCCo'] = mm.CircularCompactness(buildings, 'sdbAre').series
buildings['ssbCor'] = mm.Corners(buildings, verbose=False).series
buildings['ssbSqu'] = mm.Squareness(buildings, verbose=False).series
buildings['ssbERI'] = mm.EquivalentRectangularIndex(buildings, 'sdbAre', 'sdbPer').series
buildings['ssbElo'] = mm.Elongation(buildings).series

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [4], in <cell line: 6>()
      3 buildings['sdbPer'] = mm.Perimeter(buildings).series
      4 buildings['sdbCoA'] = mm.CourtyardArea(buildings, 'sdbAre').series
----> 6 buildings['ssbFoF'] = mm.FormFactor(buildings, 'sdbVol', 'sdbAre').series
      7 buildings['ssbVFR'] = mm.VolumeFacadeRatio(buildings, 'height', 'sdbVol', 'sdbPer').series
      8 buildings['ssbCCo'] = mm.CircularCompactness(buildings, 'sdbAre').series

File ~\miniconda3\lib\site-packages\momepy\shape.py:105, in FormFactor.__init__(self, gdf, volumes, areas, heights)
    103 def __init__(self, gdf, volumes, areas=None, heights=None):
    104     if heights is None:
--> 105         raise ValueError("`heights` cannot be None.")
    106         # TODO: this shouldn't be needed but it would be a breaking change now.
    107         # remove during the functional refactor
    108     self.gdf = gdf

ValueError: `heights` cannot be None.
martinfleis commented 2 years ago

Just do

buildings['ssbFoF'] = mm.FormFactor(buildings, 'sdbVol', 'sdbAre', heights='height').series

That should temporarily fix it. I have a To-do task in the code here to clean it up. It was caused by https://github.com/pysal/momepy/pull/330 that is a bit messed up now.