{"name": "basinkit", "package_name": "basinkit_qgis", "version": "0.9.2", "experimental": false, "qgis_min": "3.28.0", "qgis_max": "4.99.0", "downloads": 92, "uploaded_by": "Praddy-GByte", "upload_datetime": "2026-10-17T15:33:51.663251", "changelog": "0.9.2\n- Every layer now records what it was and when it arrived: product,\nlicence, the resolution it came back at and a UTC retrieval date. A\nproduct name carries an edition but not a date, and a repeat study needs\nthe date to tell its own change apart from the provider reissuing a\ntile. Basin report prints the list on its provenance page, and the full\nrun writes it into the manifest beside the dataset catalogue.\n- HydroRIVERS and HydroLAKES did not name themselves at all, only their\nlicence. The elevation source named its route key, \"cop30\", rather than\nthe dataset that answered it. Both now take their name and licence from\nthe catalogue.\n- Needs basinkit 0.9.2 or newer.\n\n0.9.1\n- Basin report ran at ten times the budget 0.9.0 had just set for it. The\npackage caps the elevation grid at four megapixels because a larger one\nwas killed by the operating system, and inside QGIS that takes QGIS with\nit -- but this algorithm passed a budget of its own, and that default\nstood at forty. Measured on the Juniata (8,805 km2) in QGIS 3.34: 245\nseconds and 5.61 GB at forty, 26 seconds and 1.26 GB at four, for the\nsame eight pages within six kilobytes of each other. The larger grid\nbought nothing, because every raster a page draws is decimated to 1,600\npixels first.\n- Fetch basin data layers asked for a hundred megapixels, about 5.6 GB,\npast the ceiling the elevation guard enforces -- so a large basin was\nrefused outright instead of coming back at a coarser resolution. It now\nasks for sixty, as the three other surface algorithms do.\n- Data quality reported a layer it could not measure as a layer that\nmeasured badly. A rainfall correlation that came back as not-a-number was\ngraded LIMITED, and through the worst-of rule that one layer set the whole\nbasin's grade: a basin whose rainfall pair agrees at r = 0.949 was\nreported LIMITED overall instead of MODERATE. An unmeasurable layer now\nstays ungraded and says why.\n- The notice shown when QGIS runs a Python too old for the package said to\nupdate to 3.28, which is the release the reader was already on. It now\nnames 3.34. The minimum stays 3.28, because the bundled Python belongs to\nthe installer rather than to the QGIS version: the Windows and macOS\nbuilds of 3.28 shipped Python 3.9, where pip finds no release of basinkit\nat all, while the Debian and Ubuntu packages of the same QGIS run on 3.11,\nwhere it installs normally.\n- Needs basinkit 0.9.1 or newer.\n\n0.9.0\n- Delineate river basin takes an optional line layer of known channels and\nforces the flow along them. Where a stream runs in a culvert under a city,\nor a road embankment dams a valley in the elevation model, the surface\ncarries no channel and the water is sent the wrong way; a line drawn on\nthe canvas is enough to correct it. Lowering the cells by a fixed depth\ndoes nothing -- the trench keeps the terrain's own rises -- so each line\nis walked from its lower end and forced to descend the whole way. The\nprovenance records that the path was forced, how deep and over how many\ncells, because a basin that was told where to go and one that was found\nare not the same kind of answer.\n- A basin that disagrees with the river at its outlet is now reported\ninstead of printed. The check measured the basin only against the largest\nriver within the search radius, which beside a confluence is a different\nand far bigger river: a basin at half of what drains to its own stream\npassed, and one at nine times it passed too. It now tests both directions\nagainst the river at the outlet, and where two channels meet within a\nmetre of the point it says the outlet is ambiguous and names both\ncatchments rather than choosing one.\n- The TDX-Hydro backend took the reach whose recorded point was nearest.\nBeside a confluence that is a stub: at one outlet it returned 122 km2 of\na 228 km2 basin. It now takes the unit catchment that contains the\noutlet, and that basin reads 241 km2, in line with the other backends.\n- Basin morphometry and the terrain surfaces no longer fetch a second\nelevation grid, so one report cannot print two different values for the\nsame basin's highest point.\n- Every algorithm's help panel now prints the citation and the DOI.\n- The plugin is GPL-3.0-or-later. The basinkit Python package it calls is\nApache-2.0. Neither licence grants the use of the name basinkit; a fork\nmust carry its own.\n- The plugin now asks for the packages it actually needs. It told people\nto run \"pip install basinkit\", which does not install pyflwdir -- and\nthe DEM backend routes with pyflwdir, which auto uses for every\ncatchment below 2,000 km2. Those basins came back as the coarser\nHydroBASINS answer instead, 21.6 percent high on one 259 km2 catchment,\nwith nothing on the face of the result to say so. It now names\nbasinkit[delineate] and basinkit[viz], says what each is for, and quotes\nthe extras so the command survives a shell. On Debian and Ubuntu, where\nQGIS runs on a system Python the distribution marks as externally\nmanaged, the command now carries --break-system-packages, without which\nit failed outright.\n- Basin report no longer takes QGIS down with it. It read elevation at\nthe 100 Mpx default, which on a large basin reached about 5.9 GB and was\nkilled by the operating system -- and inside QGIS that kills QGIS. The\ngrid is now budgeted to 4 Mpx at the point every caller arrives, which\non a 54,000 km2 basin is about 186 m and on a 235 km2 one is still its\nnative 31 m, and the rasters drawn on the pages are decimated to 1,600\npixels because an A4 page at 300 dpi cannot show more. The cover states\nthe resolution used. Measured on the large basin: 1.33 GB and eighteen\nseconds, against a process that did not finish.\n- Delineate river basin declines a window it cannot route, naming the\nmegapixels, the memory estimate and the backend to use instead, rather\nthan growing the window until the process is killed with nothing\nwritten.\n- The log is readable again: a delineation emitted twenty-six copies of\n\"Use @ matmul instead of * mul operator\", a deprecation inside affine\nthat names a file nobody here can change.\n- Asking for a backend by name is now checked the way auto checks itself.\nBefore, a backend chosen explicitly skipped every check, and a basin at\none percent of what drains to the point came back looking like any other\nanswer.\n- Needs basinkit 0.9.0 or newer.\n\n0.8.4\n- Landscape form no longer fails on a basin that has knickpoints.\nIt asked the output sink for its field list, which QgsFeatureSink\ndoes not have, so it only survived basins where there was nothing\nto write. Found by running all eleven tools over five small\nsub-catchments of the Koshi; three of the five hit it.\n\n0.8.3\n- A projected basin layer is now reprojected to EPSG:4326 on the way in.\nbasinkit works in lon/lat throughout, so a UTM layer used to arrive as\nmetres and PROJ rejected a northing of 7,793,981 as a latitude. This\nfailed in Fetch basin data layers and in Basin morphometry; all seven\nalgorithms share the same entry point and all seven are fixed.\n- Delineate river basin now warns below 2,000 km2 rather than 500, and\nsays what the coarse polygon is: whole HydroBASINS level-12 units of\nabout 130 km2, not a routed elevation model, so its boundary follows\nunit edges rather than the terrain divide.\n- Needs basinkit 0.8.3 or newer.\n\n0.8.0\n- New algorithm: Landscape form. chi, normalised channel steepness,\nconcavity and knickpoints -- whether a river is still adjusting or has\nsettled, which the shape indices cannot tell you. Knickpoints come back\nas a point layer carrying the height of each step and how far its local\ngradient stands above the profile's own median. Channel steepness was\nchecked cell by cell against TopoToolbox on two basins and agrees to\nwithin 6 percent at every quantile. The knickpoint count is not that\nstable and the algorithm says so; it is not an uplift rate either.\n- New algorithm: Export for Arc Hydro. Sub-catchments and reaches as\nCatchment and DrainageLine layers carrying HydroID, HydroCode,\nNextDownID and AreaSqKm, so Arc Hydro's own tools read them without\nconversion. A renaming, not a computation: every value written is one\nbasinkit already holds, and DrainID is deliberately left for Arc Hydro\nto populate rather than guessed with a spatial join.\n- Eleven algorithms now. Needs basinkit 0.8.2 or newer.\n\n0.7.0\n- New algorithm: Data quality. A grade for every layer, not only for the\nelevation model, each measured against something produced independently\nof it: land cover as the agreement between ESA WorldCover and the ESRI\nannual series, rainfall as CHIRPS against TerraClimate, soil as the width\nof SoilGrids' own published interval, surface water as the permanent to\nseasonal split, delineation as the network check and the accuracy regime\nfor a basin of this size, and elevation as the suitability grade split by\nterrain class. Suggested by Prof. Dr. B. Mishra.\n- Soil and surface water are reported without a grade, because no published\nthreshold exists for either; the output says so rather than inventing a\ncut-off. Every threshold that does exist is printed beside the\nmeasurement it judged.\n- The ESRI land cover reader now writes an integer nodata value, so a\ncomparison against another class raster no longer counts nodata as a\nclass.\n0.6.3\n- On QGIS builds older than 3.28 the plugin now says so. basinkit needs\nPython 3.10, which those builds do not ship, so pip cannot install it\nthere at all and the old message ('no module named basinkit') sent\npeople looking for an installation fault that was not there.\n- The install instructions now lead with the QGIS Python Console route,\nwhich installs into the interpreter QGIS imports from on every\nplatform, and note that '!pip install' works only in Jupyter.\n0.6.2\n- Found by running every analysis on the Ganga above Farakka (934,516\nsquare kilometres) and on the Potomac, then checking the results\nagainst GRDC, 190 Nepal gauges, IMD rainfall and USGS records.\n- Sentinel-2, Landsat, Sentinel-1 and land cover change failed on very\nlarge basins: the basin outline was too big for the catalogue search.\nThe search now sends a simplified outline that still contains the\nbasin; results are clipped to the full outline as before.\n- The 3D page ran out of memory on large basins and showed a black screen\nfor basins wider than 900 km. Both fixed; the page also declares its\ntext encoding so symbols render correctly.\n- The river profile reads a capped elevation model; on a 30,000 km2\nbasin it used to need more than 6 GB of memory.\n- The 3D page sets its colour balance from the scene, so forested basins\nno longer render nearly black.\n- The report's first page names the elevation product it used.\n- Needs basinkit 0.6.2.\n0.6.1\n- 'Basin statistics' reported mean slope over the whole bounding box, with\nthe ground outside the basin filled in as a flat plain. On a catchment\nfilling 43 percent of its box that read 7 degrees where the basin's own\nslopes average 16. It now measures inside the basin only.\n- A failed delineation now says why, instead of reporting an\nAttributeError about a missing helper.\n- The check against the river network measures distance on the ground, so\nit no longer misses rivers inside its search radius at high latitude.\n- Needs basinkit 0.6.1, which also requires geopandas 1.0: on installs with\nan older geopandas the first delineation used to fail.\n0.6.0\n- Four new Processing algorithms. 'Terrain surfaces' computes slope,\naspect, hillshade, curvature, topographic position, ruggedness, local\nrelief, slope-position classes, flow accumulation, the channel network,\nthe wetness index and height above nearest drainage, all from one\nelevation download rather than one per surface. 'Sub-catchments and their\nrouting' returns the pieces a basin is assembled from, each carrying\nNEXT_DOWN, which is the routing graph a distributed model needs without\ninferring anything from geometry. 'Elevation data suitability' grades\nwhether the elevation model can carry the terrain analysis at all.\n'Basin report' writes eight A4 pages ready for a thesis or a manuscript.\n- The elevation data suitability grade is the one worth reading first.\nFive measurements against stated thresholds -- how much surface\ndepression filling invented, how many slopes fall below the angle at\nwhich a gradient is only the model's own error, relief against that\nerror, the largest level surface, and cells with no elevation -- combined\ninto HIGH, MODERATE or LIMITED with a per-cell map of which ground the\nanswer rests on. Tested on 133 gauges against an independently produced\nelevation model: where it says HIGH the two models agree about the slope\nfield at r = 0.94, where it says LIMITED at r = 0.76.\n- A twelve-metre delineation backend. 'tdx' walks a reach-level graph built\nfrom TanDEM-X, one catchment per stream reach instead of one per 130\nsquare kilometre unit. On 360 gauges between 100 and 500 square\nkilometres it cut the median area error from 32.5 percent to 10.5 percent\nand was the better answer on two thirds of them. It is never chosen\nautomatically because TDX-Hydro is CC BY-SA, and ShareAlike travels into\nanything derived from it and redistributed.\n- Cell size is taken per row from that row's latitude everywhere in the\nterrain code. Dividing by one assumed width reports a basin at 60 degrees\nnorth as about twice as steep as it is.\n\n0.5.0\n- Compatibility across the full supported QGIS range. The provider now\nresolves the Processing source-type enum by asking the API for it, so it\nloads identically on QGIS 3.28 through 4.x. QGIS 3.34, the current\nlong-term release, is covered by a continuous integration job that\ninstalls QGIS and loads every algorithm.\n- Accuracy is now reported by catchment size, from blind validation against\n2,550 gauges in 99 countries whose catchment areas are published by the\nagencies that operate them: 0.3 percent median error above\n100,000 square kilometres, 1.3 percent from 10,000 to 100,000, 1.7\npercent from 2,000 to 10,000. Below about 2,000 square kilometres the\n'dem' backend is the better instrument, and the plugin now says so at the\nmoment it matters.\n- Every answer is checked against the river network. When the basin exceeds\ntwice the area draining to the largest river within two kilometres of the\noutlet, the plugin reports it: 85 percent of the outlets it flags need\nattention, and it stays quiet on 97 percent of the ones that do not.\nPrecision runs from 75 percent in Europe to 93 percent in Africa.\n- The 'auto' backend refines on the elevation model when the river network\nand a 30 metre routing of the same point agree on a smaller catchment.\nAcross 300 gauges drawn after the method was fixed and used nowhere else\nin its design, it improved 19 results, left 279 unchanged and reduced\nnone. Where it acts, the median error falls from 1,731 percent to 4.3\npercent, at a median cost of 1.6 seconds.\n- Refinement acts only when the river it is judging by lies within a\nkilometre of the outlet. Beyond that distance the point is not on that\nriver, so the two sources stop being independent. Every refinement that\nimproved a result had its river within 0.91 kilometres.\n- The plugin now names what kind of place the outlet is in. An endorheic\nsystem, a coastal strip draining straight to the ocean, and an outlet\nwith nothing draining into it are each reported, the last being what a\nlake surface and a sub-grid headwater have in common.\n- Messages are matched to the cause and say what to do next: a coordinate\noutside the network's coverage, one beyond the snap distance, and one on\na hillslope rather than in a channel each get their own guidance.\n- The consistency line now compares the result against the river network\nrather than against the source dataset's own upstream-area field, which\nconfirms the traversal rather than the choice of outlet.\n- The river-network check is a checkbox, on by default, and is the only\nthing that downloads the regional rivers file.\n- Against pysheds and WhiteboxTools on identical 30 metre rasters across 59\ncatchments under 2,000 square kilometres, the 'dem' backend returned a\nbasin for every one, matched the agency figure within 20 percent on 68\npercent of them against 56 and 51, and had the lowest median error.\n- Requires basinkit 0.5 or newer.\n\n0.4.0\n- New algorithm: Basin morphometry. The full Horton-Strahler-Schumm set\nfrom one run, with the per-order table showing Strahler streams and\ndataset reaches side by side, and the counts tested against what Strahler\nordering allows. A bifurcation ratio below 2 and more than one stream of\nthe basin's highest order are both impossible, and are now reported\ninstead of being handed back as numbers to interpret. Until now\nmorphometry was in the Python package but not reachable from QGIS.\n- The plugin description leads with the data package rather than with\n\"delineate\". QGIS already has\nseveral delineation plugins, and the old wording put this one in that\nqueue while morphometry, which is the part with no equivalent elsewhere,\nwent unmentioned.\n- Requires basinkit 0.4 or newer.\n\n0.3.3\n- Pairs with basinkit 0.3.3, which corrects channel_gradient_m_per_km. Up to\n0.3.0 it divided total basin relief by main channel length, which reports\na fall the river never makes, because the highest point in a basin is a\nridge top and not the head of the main stem. It is now read from the bed:\nthe DEM is sampled along the main channel and the drop between its ends is\ndivided by the channel length. On the Koshi that is 9.6 m/km, not 15.1.\nThe Basin statistics algorithm never reported this figure, so nothing in\nthe plugin's own output changes; it matters if you called morphometry()\nfrom the Python Console or a script, where the old value should be\nrecomputed.\n- Basin.morphometry() now checks its own stream counts. Two of the checks\nare impossibilities rather than oddities: an order-u+1 stream is formed\nwhere two order-u streams meet, so N(u) >= 2*N(u+1) and the bifurcation\nratio can never fall below 2, and a basin with one outlet has exactly one\nstream of its highest order. Counts that break either are reported rather\nthan returned as numbers.\n- The plugin description now says plainly what this does that a\ndelineate-from-a-click plugin offers, rather than leaving a reader to\nwork it out.\n\n0.3.2\n- Declares its pip dependency in the external_deps metadata field, so it\nshows in the External dependencies box on the plugin page.\n\n0.3.1\n- Fixed 16 Qt6 compatibility issues found by the plugin repository's own\nchecker: every Qt and QGIS enum is now spelled with its full scope\n(QgsWkbTypes.Type.Polygon rather than QgsWkbTypes.Polygon, and so on).\nThe scoped spelling works on both PyQt5 and PyQt6, so QGIS 3.28 onwards\nand QGIS 4 are both covered by one code path, with no version guard.\n- A test now scans the plugin for unscoped enums, so they cannot come back.\n\n0.3.0\nThe plugin version now tracks the basinkit package version, so it is clear\nwhich plugin goes with which package. No algorithm has changed since 0.1.0.\n- Fixed: on macOS the \"package missing\" notice printed the QGIS application\nbinary instead of an interpreter, so the suggested pip command opened a\nsecond QGIS window and installed nothing. A path is now offered only once\nit is verified to be a python executable, and there is a Python Console\nsnippet that needs no path at all\n- New icon: the b is drawn as a river basin with a dendritic stream network\ndraining to a single outlet\n- Pairs with basinkit 0.3.0, which adds Basin.morphometry() -- the classical\nHorton-Strahler-Schumm parameters -- to the Python API\n0.1.0\nFirst release.\n- Delineate a basin from a canvas click, globally, via HydroBASINS graph traversal or DEM flow routing\n- Fetch DEM, land cover, soil, surface water, rivers and lakes clipped to the basin\n- Basin statistics: area, relief, mean slope, land cover fractions, bounding-box efficiency\n- Every algorithm runs in the Processing framework, so batch mode and the Model Builder work", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/basinkit_qgis/version/0.9.2/download/"}