From e8b2722d377167127854dea20474ef76534abf23 Mon Sep 17 00:00:00 2001 From: gavin Date: Sat, 9 Mar 2013 23:55:34 +0200 Subject: [PATCH] fixed unicode-ascii issue with degree symbol, found and merged Robs missing beardist code, tweaked to get beardist to work. Improved survey edit form; various DB changes --- DMS2DD.ods | Bin 0 -> 10867 bytes PyQt4Dialogs.py | 9 +++---- database_changes.sql | 2 +- database_changes_v2.sql | 18 ++++++++++---- settings.py | 12 +++++++--- sml_surveyor.py | 52 +++++++++++++++++++++++++++++++++++++--- styles/survey.qml | 4 ++-- 7 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 DMS2DD.ods diff --git a/DMS2DD.ods b/DMS2DD.ods new file mode 100644 index 0000000000000000000000000000000000000000..e23a105095b756f42669e66a836f28c593d1dd97 GIT binary patch literal 10867 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'||description.deeds_file||'' AS deeds_file FROM + SELECT parcel.*, round(st_area(parcel.the_geom)::numeric,3)::double precision AS comp_area, + description.official_area,description.parcel_number, description.block, description.serial_no, + description.scheme, description.file_number,description.allocation,description.owner, + ''|| + description.deeds_file||'' AS deeds_file FROM (SELECT int4(vl.parcel_id) as parcel_id, st_makepolygon(st_addpoint(st_makeline(vl.the_geom),st_startpoint(st_makeline(vl.the_geom))))::geometry(Polygon,26331) AS the_geom FROM ( SELECT pd.id, pd.parcel_id, pd.beacon, pd.sequence, b.the_geom @@ -137,7 +138,7 @@ CREATE OR REPLACE VIEW parcels AS GROUP BY vl.parcel_id HAVING st_npoints(st_collect(vl.the_geom)) > 1) AS parcel INNER JOIN - (SELECT p.parcel_id,p.local_govt || p.prop_type || p.plot_sn AS parcel_number, p.allocation,p.block,p.official_area, + (SELECT p.parcel_id,p.local_govt || p.prop_type || p.parcel_id AS parcel_number, p.allocation,p.block,p.plot_sn AS serial_no,p.official_area, s.scheme_name AS scheme,p.file_number,d.grantee AS owner,p.deeds_file FROM parcel_lookup p LEFT JOIN deeds d ON p.file_number=d.fileno LEFT JOIN schemes s ON p.scheme = s.id) AS description USING (parcel_id); @@ -237,3 +238,10 @@ ALTER TABLE parcel_lookup ADD COLUMN official_area double precision; ALTER TABLE survey ADD FOREIGN KEY (ref_beacon) REFERENCES beacons (beacon) ON UPDATE NO ACTION ON DELETE NO ACTION; +--convert plot_sn from integer to character_varying so ids like '7A' can be added + +drop view parcels; + +alter table parcel_lookup alter column plot_sn type character varying; + +CREATE VIEW parcels ... \ No newline at end of file diff --git a/settings.py b/settings.py index 0710eee..a051a28 100644 --- a/settings.py +++ b/settings.py @@ -33,7 +33,8 @@ "EDIT":"SELECT {fields} FROM beacons WHERE gid = %s;", "DELETE":"DELETE FROM beacons WHERE gid = %s;", "INSERT":"INSERT INTO beacons({fields}) VALUES ({values}) RETURNING gid;", - "UPDATE":"UPDATE beacons SET {set} WHERE {where};" + "UPDATE":"UPDATE beacons SET {set} WHERE {where};", + "BEARDIST":"SELECT CASE WHEN count(*) = 0 THEN FALSE ELSE TRUE END FROM beardist WHERE beacon_to = (SELECT beacon FROM beacons WHERE gid = %s);" } } DATABASE_LAYERS["PARCELS"] = { @@ -68,6 +69,11 @@ "AUTO_SURVEYPLAN":"SELECT array_agg(plan_no) FROM survey;", "AUTO_REFERENCEBEACON":"SELECT array_agg(beacon) FROM beacons WHERE beacon NOT IN (SELECT beacon_to FROM beardist WHERE beacon_to NOT IN (SELECT ref_beacon FROM survey));", "EXIST_REFERENCEBEACON":"SELECT ref_beacon FROM survey where plan_no = %s;", - "EXIST_BEARDISTCHAINS":"SELECT bearing, distance, beacon_from, beacon_to FROM beardist WHERE plan_no = %s", - "INDEX_REFERENCEBEACON":"SELECT i.column_index::integer FROM (SELECT row_number() over(ORDER BY c.ordinal_position) -1 as column_index, c.column_name FROM information_schema.columns c WHERE c.table_name = 'beacons' AND c.column_name NOT IN ('the_geom', 'gid') ORDER BY c.ordinal_position) as i WHERE i.column_name = 'beacon';" + "EXIST_BEARDISTCHAINS":"SELECT bd.bearing, bd.distance, bd.beacon_from, bd.beacon_to, b.location, b.name FROM beardist bd INNER JOIN beacons b ON bd.beacon_to = b.beacon WHERE bd.plan_no = %s;", + "INDEX_REFERENCEBEACON":"SELECT i.column_index::integer FROM (SELECT row_number() over(ORDER BY c.ordinal_position) -1 as column_index, c.column_name FROM information_schema.columns c WHERE c.table_name = 'beacons' AND c.column_name NOT IN ('geom', 'gid') ORDER BY c.ordinal_position) as i WHERE i.column_name = 'beacon';", + "IS_SURVEYPLAN":"SELECT CASE WHEN COUNT(*) <> 0 THEN TRUE ELSE FALSE END FROM survey WHERE plan_no = %s;", + "INSERT_SURVEYPLAN":"INSERT INTO survey(plan_no, ref_beacon) VALUES(%s, %s);", + "UPDATE_LINK":"SELECT beardistupdate(%s, %s, %s, %s, %s, %s, %s, %s);", + "DELETE_LINK":"DELETE FROM beacons WHERE beacon = %s;", + "INSERT_LINK":"SELECT beardistinsert(%s, %s, %s, %s, %s, %s, %s);" } diff --git a/sml_surveyor.py b/sml_surveyor.py index 99a9a2e..d9ad15b 100644 --- a/sml_surveyor.py +++ b/sml_surveyor.py @@ -63,6 +63,7 @@ def initGui(self): if not(self.manageDatabase()): raise Exception("Unspecied database parameters") # find layers self.getLayers() + self.showLayers() # add app toolbar self.createAppToolBar() @@ -127,6 +128,7 @@ def showLayers(self): for n,l in self.layers.items(): self.iface.legendInterface().setLayerVisible(l, True) l.loadNamedStyle(os.path.join(self.plugin_dir, "styles", "%s.qml" %(n.lower(),))) + self.iface.legendInterface().refreshLayerSymbology(l) def dropLayers(self): """ Drop added postgis layers @@ -174,11 +176,47 @@ def manageDatabase(self): def manageBearDist(self): """ """ - dlg = dlg_FormBearDist(self.db, settings.DATABASE_OTHER_SQL, settings.DATABASE_LAYERS["BEACONS"]["SQL"], self.db.getSchema(settings.DATABASE_LAYERS["BEACONS"]["TABLE"], [settings.DATABASE_LAYERS["BEACONS"]["GEOM"], settings.DATABASE_LAYERS["BEACONS"]["PKEY"]])) self.manageLayers() - #dlg = dlg_FormBearDistLink(["lol","loll","lolly"]) + dlg = dlg_FormBearDist(self.db, settings.DATABASE_OTHER_SQL, settings.DATABASE_LAYERS["BEACONS"]["SQL"], self.db.getSchema(settings.DATABASE_LAYERS["BEACONS"]["TABLE"], [settings.DATABASE_LAYERS["BEACONS"]["GEOM"], settings.DATABASE_LAYERS["BEACONS"]["PKEY"]])) dlg.show() - dlg.exec_() + if bool(dlg.exec_()): + #tmp = ('YE125', 'PBA6015', [[[29.45, 46.29, 'PBA6015', 'PBA6016lol', None, None], 'UPDATE', 0], [[123.0, 123.0, 'PBA6016lol', 'l', None, None], 'INSERT', None], [[123.0, 234.0, 'l', 'lo', None, None], 'INSERT', None], [[123.0, 345.0, 'lo', 'lol', None, None], 'INSERT', None]]) + surveyPlan, referenceBeacon, beardistChain = dlg.getReturn() + # check whether survey plan is defined otherwise define it + if not self.db.query(settings.DATABASE_OTHER_SQL["IS_SURVEYPLAN"], (surveyPlan,))[0][0]: + QMessageBox.information(None, "", "need to make a plan about this survey") + self.db.query(settings.DATABASE_OTHER_SQL["INSERT_SURVEYPLAN"], (surveyPlan, referenceBeacon)) + # get list of existing links + beardistChainExisting = [] + for index, link in enumerate(self.db.query(settings.DATABASE_OTHER_SQL["EXIST_BEARDISTCHAINS"],(surveyPlan,))): + beardistChainExisting.append([list(link), "NULL", index] ) + # perform appropriate action for each link in the beardist chain + new = [] + old = [] + for link in beardistChain: + if link[2] is None: new.append(link) + else: old.append(link) + #QMessageBox.information(None, "", str(beardistChainExisting)) + #QMessageBox.information(None, "", str(new)) + #QMessageBox.information(None, "", str(old)) + # sort out old links + tmp = list(beardistChainExisting) + for elink in beardistChainExisting: + for olink in old: + if elink[2] == olink[2]: + if olink[1] == "NULL": + tmp.remove(elink) + break; + self.db.query(settings.DATABASE_OTHER_SQL["UPDATE_LINK"], [surveyPlan] + olink[0] + [olink[2]]) + tmp.remove(elink) + break; + beardistChainExisting = tmp + for elink in beardistChainExisting: + self.db.query(settings.DATABASE_OTHER_SQL["DELETE_LINK"], (elink[0][3],)) + # sort out new links + for nlink in new: + self.db.query(settings.DATABASE_OTHER_SQL["INSERT_LINK"], [surveyPlan] + nlink[0]) + self.iface.mapCanvas().refresh() def manageLayers(self): """ Load layers if not yet loaded @@ -296,6 +334,10 @@ def run(self): slc_ret = slc.exec_() self.iface.mapCanvas().setMapTool(slc.tool) if bool(slc_ret): + if self.db.query(self.layersDict["BEACONS"]["SQL"]["BEARDIST"], (slc.getReturn(),))[0][0]: + QMessageBox.warning(None, "Bearing and Distance Definition", "Cannot edit beacon defined by distance and bearing via this tool") + for l in self.layers.values(): l.removeSelection() + return data = self.db.getSchema(self.layersDict["BEACONS"]["TABLE"], [self.layersDict["BEACONS"]["GEOM"], self.layersDict["BEACONS"]["PKEY"]]) fields = ",".join([f["NAME"] for f in data]) values = [v for v in self.db.query(self.layersDict["BEACONS"]["SQL"]["EDIT"].format(fields = fields), (slc.getReturn(),))[0]] @@ -325,6 +367,10 @@ def run(self): slc_ret = slc.exec_() self.iface.mapCanvas().setMapTool(slc.tool) if bool(slc_ret): + if self.db.query(self.layersDict["BEACONS"]["SQL"]["BEARDIST"], (slc.getReturn(),))[0][0]: + QMessageBox.warning(None, "Bearing and Distance Definition", "Cannot delete beacon defined by distance and bearing via this tool") + for l in self.layers.values(): l.removeSelection() + return self.db.query(self.layersDict["BEACONS"]["SQL"]["DELETE"], (slc.getReturn(),)) for l in self.layers.values(): l.removeSelection() diff --git a/styles/survey.qml b/styles/survey.qml index fdb369a..3e31a38 100644 --- a/styles/survey.qml +++ b/styles/survey.qml @@ -1,10 +1,10 @@ - + 255 - + .