{"name": "Survey Management System", "package_name": "surveymanagement", "version": "3.0.0", "experimental": false, "qgis_min": "3.22.0", "qgis_max": "4.99.0", "downloads": 36, "uploaded_by": "sochukwumaobim", "upload_datetime": "2026-10-29T06:15:19.349733", "changelog": "Version 3.0.0 (October 2026):\nNEW: DWG drawings import directly -- AutoCAD R13/R14 to 2018 and later,\nincluding AutoCAD 2007 DWG -- with nothing to install. Everything\nDXF import does now works for DWG (boundary, traverse, beacon\nblocks and attributes, dimensions, leaders, text). ODA File\nConverter is no longer needed; if installed it is only used for\ndrawings the built-in reader cannot open (e.g. R12-era DWG)\nNEW: Every object in a DWG is checked against its built-in checksum;\ndamaged items are never imported silently -- the import says how\nmany could not be read\nNEW: A drawing saved with the wrong extension (.dxf / .dwg) is\nrecognised by its content and still imports\nNEW: PlotAccess loads its perimeter from DWG as well as DXF\nNEW: Plot on Map (coordinates, traverse, Show point, database layers)\nadds a satellite basemap underneath the survey once per project.\nA project that already has its own basemap is left alone, and a\nbasemap you remove is not added back\nFIX: Plot on Map zoomed to the wrong place when the map was not in\nthe survey's coordinate system\nNEW: PlotAccess report: plot numbers are fitted inside each plot and\nturned along it; large layouts get detail sheets at a standard\nscale (with key map, scale bar, north arrow and sheet extent) so\nevery plot number is readable. Small layouts are unchanged\nFIX: PlotAccess report: road labels now sit on the road\nNEW: Survey database file -- a surveyor working alone needs nothing\ninstalled. All records live in one GeoPackage file on the\ncomputer (Documents/SurveyManagement by default) that QGIS and\nArcGIS can also open. Database Settings has Back up now\nNEW: The Setup Wizard asks one plain question -- just me, or several\ncomputers sharing records -- and sets up the right database. The\nfile cannot be put on a network drive (that can corrupt it)\nNEW: Every feature works the same on the file and on PostgreSQL:\nsurveys, coordinates, traverses, adjoining-survey check,\ndocuments, search, map, Database Explorer, users and audit log\nNEW: One schema definition used everywhere (db_schema.py). Before,\nthe tables were written out in four places (the cause of the\nv2.0.2 foreign-key error); now they cannot drift apart\nNEW: DXF import and export need nothing installed. The plugin now reads\nand writes DXF itself instead of downloading ezdxf (and four\nhelper packages) on first use -- that download could fail on\nsome computers (\"ezdxf was installed but still fails to\nimport\"). Checked against ezdxf on drawings in every DXF version\nfrom R12 to 2018\nFIX: DXF import of drawings saved as DXF R12, R2000 or R2004 garbled\nthe degree sign, so no bearings were read (and on R12 no\ntraverse was built). Bearings are now read from all versions\nFIX: Dimensions that show their measured value (\"<>\") were skipped\nduring DXF import; their distances are now read\nFIX: Text with special characters stored as \\U+ codes lost part of\nthe text (e.g. half of a title block) during DXF import\nFIX: PlotAccess DXF export: coordinate labels now show E and N on two\nlines (they used to run together as E=...N=...), and centred\nlabels carry their alignment point so AutoCAD keeps them in place.\nFiles are written as DXF R12, which every CAD and GIS program opens\nNEW: PlotAccess can load its perimeter from older (R12) DXF drawings\nFIX: Window titles, help and the DXF title block now show the real\nplugin version (they said v2.0)\nFIX: A damaged number in a DXF stops the import with a clear message\ninstead of importing a wrong coordinate\nNEW: PlotAccess no longer needs SciPy (a 30-40 MB library it used for\none function). That function, Brent's method for exact plot\nareas, is now built in; checked to give identical results\nNEW: If Shapely is missing, PlotAccess offers a one-click install\n(about 2 MB) like DXF import does, instead of failing to open.\nQGIS's own numpy is never replaced\nFIX: Databases set up by the old Setup Wizard (v2.0.2 and earlier)\nare repaired automatically the first time v3 connects -- no\nreinstall, no manual steps. Wrong-format tables are rebuilt in\none safe step (all or nothing); any records in them are carried\nover and the old tables are kept as a backup. Healthy databases\nare not touched. Databases the old wizard left half-finished\n(some tables missing) are completed in the same step. A staff login without permission to change\ntables gets a clear message to ask the administrator to open the\nplugin once\nFIX: Map zoom after Show point, Plot coordinates and Plot traverse\nfailed in QGIS (the main window was used instead of the QGIS\ninterface), so the map never moved to the result\nFIX: Staff accounts without permission to create tables (the\ndefault for new users on PostgreSQL 15+) got errors on every\nstart, and the next query failed too. Tables are now only\ncreated when missing, and a failure no longer breaks the\nconnection\nFIX: Login failed outright when psycopg2 was not installed\nFIX: psycopg2 installed by the wizard is used straight away, without\nrestarting QGIS\nFIX: Adjoining-survey check no longer errors when boundaries are\nsaved in different coordinate systems\nFIX: Search for boundaries by verified status\nNEW: Advanced: a shared office database can be installed on this\ncomputer with Docker, from the official postgis/postgis image\n(PostgreSQL 17 + PostGIS 3.5). Data lives in a Docker volume and\nsurvives restarts and updates. Reachable from this computer\nonly, unless you tick the office-network option\nNEW: Picks a free port automatically if another PostgreSQL already\nuses 5432; generates a strong random database password\nNEW: Database Settings, Local Database (Docker): update engine to the\nlatest bug-fix release (automatic backup first), back up now,\nstop, reset\nNEW: When QGIS starts and the local database is not running (e.g.\nafter a reboot), the plugin starts Docker and the database for you\nFIX: The Setup Wizard saved the database username under a key the\nrest of the plugin never read, so any login other than\npostgres entered in the wizard was ignored\nNEW: Runs on both QGIS 3 (3.22 or later) and QGIS 4 from the same\npackage. All Qt names use the form that works on Qt5 and Qt6;\nQAction, message levels, geometry types and attribute field\ntypes are resolved for the running QGIS version\nFIX: Plugin no longer fails to start when QGIS has no saved locale\n\nVersion 2.0.3 (October 2026):\nFIX: The CRS picker mislabelled the Minna codes. \"Nigeria Mid Belt\"\nwas EPSG:26332, which is actually Minna / UTM zone 32N, so\nsurveys saved with the default CRS were stored with the wrong\nSRID. \"Nigeria East\" was EPSG:26333, which does not exist.\nThe list now offers 26391/26392/26393 (Minna / Nigeria West,\nMid and East Belt) plus Minna UTM 31N/32N under their real\nnames, and the default is 26392. Records saved earlier keep\ntheir stored SRID and must be corrected in the database\nFIX: Show-on-map now uses each point's stored SRID instead of a\nhardcoded EPSG:26332\nFIX: Setup wizard tip pointed Imo/eastern states to the\nnon-existent EPSG:26333; it now points to 26392 (Mid Belt)\nFIX: Replaced remaining bare except clauses\nFIX: Removed the bundled lib/ folder (pre-packaged ezdxf, pyparsing,\ntyping_extensions). The QGIS Plugin Repository's security scan\nchecks every file in the package, including vendored\nthird-party code -- ezdxf's own upstream source uses assert\nstatements in several places, which the scanner flags\nregardless of whose code it's in, and blocked v2.0.2 with 472\nissues as a result. All dependencies (ezdxf, numpy, pyparsing,\nfontTools, typing_extensions) now install on first real use via\nthe plugin's own installer instead of being pre-bundled --\nsee the v2.0.1 fix below, which already made this work\ncorrectly without needing anything pre-packaged\nFIX: The first-run Setup Wizard and Database Settings' Auto-Setup\nDatabase used two different, independent schema definitions\nfor the same tables -- the Setup Wizard named every primary\nkey \"id\", while Auto-Setup Database used table-specific names\n(survey_id, point_id, leg_id, etc.), which is what the rest of\nthe plugin actually depends on. Because table creation uses\n\"IF NOT EXISTS\", whichever wizard ran first for a given user\nsilently \"won\" -- and if a user's database ended up with a\npartial run of the old wizard (e.g. just the surveys table)\nbefore later using Auto-Setup Database, that path's own\nforeign-key constraints would fail with \"column ... referenced\nin foreign key constraint does not exist\". Reproduced this\nexact error against a real PostgreSQL 16 + PostGIS instance\nbefore fixing it, and verified the fix resolves it. The Setup\nWizard's schema now exactly matches Auto-Setup Database's,\nincluding the two tables (app_users, audit_log) it was\nmissing entirely\nFIX (defensive, not confirmed as a common issue -- one real report\nso far): installing ezdxf's dependencies (2.0.1) could install\nor upgrade numpy even when a working numpy was already\npresent, which could in principle affect road_aware_engine.py /\nparcellation_engine.py (the Parcellation Module's geometry\nengine), since they import shapely/scipy unconditionally with\nno install management of their own. The installer now checks\nwhether numpy is already importable first, and if so, never\nlets ezdxf's install touch it. Also corrected the\n\"Could not load parcellation module\" error message, which\nalways suggested checking for missing files even when the\nunderlying error was unrelated\n\nVersion 2.0.2 (August 2026):\nFIX: DXF import in the Parcellation Module (PlotAccess) never\nactually installed ezdxf on a fresh system -- it only tried a\nbare import twice, then told the user to go use the *main*\nplugin's DXF import instead. That only \"worked\" because the\nmain plugin was the one place that actually called the\ninstaller. Parcellation's DXF import now calls the same\ninstaller directly and is fully self-contained -- no need to\nopen the main plugin first\n\nVersion 2.0.1 (August 2026):\nFIX: DXF import in PlotAccess opened files in binary mode, but\nezdxf.read() requires a text stream -- every DXF import failed\nwith \"a bytes-like object is required, not 'str'\"\nFIX: ezdxf's dependency installer used --no-deps, skipping numpy,\npyparsing, fontTools, and typing_extensions -- all four are\nrequired just to import ezdxf, regardless of which features\nare used, so any environment without them already present\n(independently of this plugin) could never complete a DXF\nimport no matter how many times ezdxf was reinstalled\nFIX: dependency availability checks only verified an \"ezdxf\" folder\nexisted on disk, never that it could actually be imported --\nso a broken install could be reported as working\nFIX: DXF-extracted coordinates could be numpy.float64 rather than\nplain float; normalized at the point of extraction\n\nVersion 2.0.0 (August 2026):\nNEW: PlotAccess \u2014 road-aware, exact-area cadastral subdivision engine\nNEW: Automatic road layout \u2014 roads are computed by the engine, no\nmanual road drawing required\nNEW: Hard road-access constraint \u2014 every plot must front a real\nroad corridor; landlocked plots resolved automatically\nNEW: Exact target area on the large majority of plots via\nBrent's-method root-finding, not approximate rounding\nNEW: Parcellation dialog \u2014 paste/import perimeter coordinates,\nconfigurable plot area, frontage, road width, cross-road spacing\nNEW: Colour-coded plan output with compliant/edge plot status\nNEW: Area schedule and setting-out coordinate tables\nNEW: Export to DXF, Excel, or a branded PDF report; direct print\nFIX: Corrected a font double-scaling bug in the PDF report generator\nFIX: Redesigned PDF report layout \u2014 branded header/footer, page\nnumbers, zebra-striped tables, colour-coded status\n\nVersion 1.2.0 (April 2026):\nNEW: AutoCAD DXF/DWG import \u2014 extract beacon coordinates, traverse\nlegs, bearings, distances and metadata from AutoCAD plan files\nNEW: AI-powered metadata extraction (plan number, owner, surveyor,\nLGA, state, date) via hosted server \u2014 no API key needed\nNEW: DXF import preview dialog \u2014 review and confirm before loading\nNEW: First-run setup wizard \u2014 installs psycopg2 and creates database\nautomatically, no command line required\nNEW: User login with username and password (default: admin / admin123)\nNEW: Three-tier access control \u2014 superuser, surveyor, viewer roles\nNEW: Full audit trail in audit_log table\nNEW: User Administration panel for superusers\nNEW: Traverse precision ratio (1:5000 Nigerian Survey Regulations)\nNEW: Adjoining survey boundary detection via PostGIS ST_DWithin\nNEW: Custom CRS input with live EPSG validation\nFIX: Traverse delete button index bug corrected\nFIX: Documents tab index resolved using indexOf()\n\nVersion 1.0.0 (March 2026):\nInitial release \u2014 survey metadata, coordinates, traverses,\ndocuments, PostgreSQL/PostGIS integration, global search.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/surveymanagement/version/3.0.0/download/"}