Skip to content

Commit 430fefd

Browse files
committed
fixes for crs conversion
1 parent f8a9025 commit 430fefd

File tree

4 files changed

+105
-81
lines changed

4 files changed

+105
-81
lines changed

tasks/processing/convertcrstask.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def run(self):
3131
for s, p, o in self.graph:
3232
if isinstance(o, Literal):
3333
if str(o.datatype) in SPARQLUtils.supportedLiteralTypes:
34-
newliteral = Literal(LayerUtils.processLiteral(o, o.datatype, "", self.crsdef), datatype=o.datatype)
34+
newliteral = Literal(LayerUtils.processLiteral(o, o.datatype, self.crsdef,None,None,False,o.datatype), datatype=o.datatype)
3535
self.graph.set((s, p, newliteral))
3636
return True
3737

@@ -43,7 +43,7 @@ def finished(self, result):
4343
if fileName and self.graph is not None:
4444
fo = open(fileName, "w")
4545
fo.write(ConvertCRS().ttlhead)
46-
fo.write(self.graph.serialize(format="turtle").decode())
46+
fo.write(self.graph.serialize(format="turtle"))
4747
for crs in self.crsdefs:
4848
fo.write(self.crsdefs[crs])
4949
fo.close()

tasks/processing/extractlayertask.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@ def run(self):
3434
g.parse(self.graphname, format="ttl")
3535
for toex in self.toextract:
3636
if "owl" not in str(toex) and "rdf" not in str(toex):
37-
QgsMessageLog.logMessage(str(toex),
38-
MESSAGE_CATEGORY, Qgis.Info)
37+
QgsMessageLog.logMessage(str(toex),MESSAGE_CATEGORY, Qgis.Info)
3938
layergraph = Graph()
4039
for sub in g.subjects(RDF.type, URIRef(toex),True):
41-
QgsMessageLog.logMessage(str(sub),
42-
MESSAGE_CATEGORY, Qgis.Info)
40+
QgsMessageLog.logMessage(str(sub),MESSAGE_CATEGORY, Qgis.Info)
4341
for trip in g.triples((sub,None,None)):
4442
layergraph.add(trip)
4543
res=LayerUtils.subGraphToLayer(layergraph,g,False, self.triplestoreconf, True, False)

tasks/query/data/querylayertask.py

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -125,50 +125,52 @@ def processResults(self, results, reproject, mandatoryvars, geooptional):
125125
features = []
126126
nongeofeatures=[]
127127
properties={}
128-
first = True
129-
newobject = True
130128
item = ""
131-
relval=False
132129
crsset=set()
133130
QgsMessageLog.logMessage('Processing results....',
134131
MESSAGE_CATEGORY, Qgis.Info)
132+
lastaddeditem=""
135133
for result in results["results"]["bindings"]:
136134
if self.concept is not None and "item" not in result:
137-
result["item"]={}
138-
result["item"]["value"]=self.concept
139-
if "item" in result and "rel" in result and "val" in result and "geo" in result and (
140-
item == "" or result["item"]["value"] != item) and "geo" in mandatoryvars:
141-
relval=True
142-
if item != "":
143-
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
144-
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
145-
{'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
146-
'geometry': {}},
147-
self.triplestoreconf),features,nongeofeatures,crsset)
148-
properties = {}
149-
item = result["item"]["value"]
150-
if "item" in result and "rel" in result and "val" in result and "lat" in result and "lon" in result and (
135+
result["item"]={"value":self.concept}
136+
if "item" in result and "rel" in result and "val" in result:
137+
QgsMessageLog.logMessage('rel val' + str(len(features)),
138+
MESSAGE_CATEGORY, Qgis.Info)
139+
if "geo" in result and (item == "" or result["item"]["value"] != item) and "geo" in mandatoryvars:
140+
QgsMessageLog.logMessage('rel val + geo' + str(len(features)),
141+
MESSAGE_CATEGORY, Qgis.Info)
142+
if item != "":
143+
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
144+
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
145+
{'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
146+
'geometry': {}},
147+
self.triplestoreconf),features,nongeofeatures,crsset)
148+
lastaddeditem=result["item"]["value"]
149+
elif "lat" in result and "lon" in result and (
151150
item == "" or result["item"]["value"] != item) and "lat" in mandatoryvars and "lon" in mandatoryvars:
152-
relval=True
153-
if item != "":
154-
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(
155-
"POINT(" + str(float(result[lonval]["value"])) + " " + str(
156-
float(result[latval]["value"])) + ")", "wkt", reproject,{'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
157-
'geometry': {}},self.triplestoreconf),features,nongeofeatures,crsset)
158-
properties = {}
159-
item = result["item"]["value"]
160-
if "item" in result and "rel" in result and "val" in result and geooptional and (
161-
item == "" or result["item"]["value"] != item):
162-
relval=True
163-
if item != "":
164-
self.addFeatureToCorrectCollection({'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
165-
'geometry': {}},features,nongeofeatures,crsset)
151+
QgsMessageLog.logMessage('rel val + lat lon' + str(len(features)),
152+
MESSAGE_CATEGORY, Qgis.Info)
153+
if item != "":
154+
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(
155+
"POINT(" + str(float(result[lonval]["value"])) + " " + str(
156+
float(result[latval]["value"])) + ")", "wkt", reproject,{'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
157+
'geometry': {}},self.triplestoreconf),features,nongeofeatures,crsset)
158+
lastaddeditem = result["item"]["value"]
159+
elif geooptional and (item == "" or result["item"]["value"] != item):
160+
QgsMessageLog.logMessage('rel val + no geo' + str(len(features)),
161+
MESSAGE_CATEGORY, Qgis.Info)
162+
if item != "":
163+
self.addFeatureToCorrectCollection({'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
164+
'geometry': {}},features,nongeofeatures,crsset)
165+
lastaddeditem = result["item"]["value"]
166166
properties = {}
167167
item = result["item"]["value"]
168-
if "rel" not in result and "val" not in result:
168+
elif "rel" not in result and "val" not in result:
169169
properties = {}
170170
for var in results["head"]["vars"]:
171171
if var in result:
172+
if var=="item":
173+
item = result["item"]["value"]
172174
if var == "rel" and "val" in result:
173175
if self.shortenURIs:
174176
properties[SPARQLUtils.labelFromURI(result[var]["value"])] = result["val"]["value"]
@@ -190,43 +192,47 @@ def processResults(self, results, reproject, mandatoryvars, geooptional):
190192
properties[SPARQLUtils.labelFromURI(result[var]["value"])] = SPARQLUtils.labelFromURI(result["val"]["value"])
191193
else:
192194
properties[var] = result[var]["value"]
193-
if not "rel" in result and not "val" in result and "geo" in result:
195+
if "rel" not in result and "val" not in result:
196+
QgsMessageLog.logMessage('Not rel val ' + str(len(features)),
197+
MESSAGE_CATEGORY, Qgis.Info)
198+
if "geo" in result:
199+
QgsMessageLog.logMessage('Not rel val + geo' + str(len(features)),
200+
MESSAGE_CATEGORY, Qgis.Info)
201+
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
202+
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
203+
{'id': result["item"]["value"], 'type': 'Feature',
204+
'properties': self.dropUnwantedKeys(properties),'geometry': {}},
205+
self.triplestoreconf),features,nongeofeatures,crsset)
206+
lastaddeditem = result["item"]["value"]
207+
elif latval in result and lonval in result:
208+
QgsMessageLog.logMessage('Not rel val + lat lon' + str(len(features)),
209+
MESSAGE_CATEGORY, Qgis.Info)
210+
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(
211+
"POINT(" + str(float(result[lonval]["value"])) + " " + str(float(result[latval]["value"])) + ")",
212+
"wkt", reproject,
213+
{'id': result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
214+
'geometry': {}},
215+
self.triplestoreconf),features,nongeofeatures,crsset)
216+
lastaddeditem = result["item"]["value"]
217+
elif "geo" not in result and geooptional:
218+
QgsMessageLog.logMessage('Not rel val + no geo' + str(len(features)),
219+
MESSAGE_CATEGORY, Qgis.Info)
220+
self.addFeatureToCorrectCollection({'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},features,nongeofeatures,crsset)
221+
lastaddeditem = result["item"]["value"]
222+
223+
if len(results)>0 and lastaddeditem!=item:
224+
if "geo" in properties:
194225
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
195-
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
196-
{'id': result["item"]["value"], 'type': 'Feature',
197-
'properties': self.dropUnwantedKeys(properties),'geometry': {}},
198-
self.triplestoreconf),features,nongeofeatures,crsset)
199-
elif not "rel" in result and not "val" in result and latval in result and lonval in result:
200-
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(
201-
"POINT(" + str(float(result[lonval]["value"])) + " " + str(float(result[latval]["value"])) + ")",
202-
"wkt", reproject,
203-
{'id': result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties),
204-
'geometry': {}},
205-
self.triplestoreconf),features,nongeofeatures,crsset)
206-
elif not "rel" in result and not "val" in result and not "geo" in result and geooptional:
207-
self.addFeatureToCorrectCollection({'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},features,nongeofeatures,crsset)
208-
#if relval and not geooptional and "lat" not in result and "lon" not in result:
209-
# self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
210-
# result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
211-
# { 'id':result["item"]["value"],'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},self.triplestoreconf),features,nongeofeatures,crsset)
212-
#if relval and geooptional:
213-
# #myGeometryInstanceJSON = LayerUtils.processLiteral(result["geo"]["value"], (
214-
# # result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,self.triplestoreconf)
215-
# feature = {'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}}#json.loads(myGeometryInstanceJSON)}
216-
# features.append(feature)
217-
#if len(features)==0:
218-
if "geo" in properties:
219-
self.addFeatureToCorrectCollection(LayerUtils.processLiteral(result["geo"]["value"], (
220-
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
221-
{'id':result["item"]["value"], 'type': 'Feature','properties': self.dropUnwantedKeys(properties),'geometry': {}},
222-
self.triplestoreconf),features,nongeofeatures,crsset)
223-
elif "lat" in properties and "lon" in properties:
224-
self.addFeatureToCorrectCollection(LayerUtils.processLiteral("POINT(" + str(float(result[lonval]["value"]))
225-
+ " " + str(float(result[latval]["value"])) + ")",
226-
"wkt", reproject,{'id':result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},self.triplestoreconf),features,nongeofeatures,crsset)
227-
else:
228-
self.addFeatureToCorrectCollection({'id':result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},features,nongeofeatures,crsset)
229-
QgsMessageLog.logMessage('Number of features '+str(len(features)),
226+
result["geo"]["datatype"] if "datatype" in result["geo"] else ""), reproject,
227+
{'id':result["item"]["value"], 'type': 'Feature','properties': self.dropUnwantedKeys(properties),'geometry': {}},
228+
self.triplestoreconf),features,nongeofeatures,crsset)
229+
elif "lat" in properties and "lon" in properties:
230+
self.addFeatureToCorrectCollection(LayerUtils.processLiteral("POINT(" + str(float(result[lonval]["value"]))
231+
+ " " + str(float(result[latval]["value"])) + ")",
232+
"wkt", reproject,{'id':result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},self.triplestoreconf),features,nongeofeatures,crsset)
233+
else:
234+
self.addFeatureToCorrectCollection({'id':result["item"]["value"], 'type': 'Feature', 'properties': self.dropUnwantedKeys(properties), 'geometry': {}},features,nongeofeatures,crsset)
235+
QgsMessageLog.logMessage('Number of features '+str(len(features)),
230236
MESSAGE_CATEGORY, Qgis.Info)
231237
if features == [] and len(results["results"]["bindings"]) == 0:
232238
return [None,None,None]

util/layerutils.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
QgsMessageLog
44
)
55
from osgeo import ogr
6-
from qgis.core import QgsFeature, Qgis, QgsWkbTypes, QgsProject, QgsGeometry, QgsCoordinateReferenceSystem, QgsCoordinateTransform
6+
from qgis.core import QgsFeature, Qgis, QgsWkbTypes, QgsProject, QgsGeometry, QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsJsonExporter
77
import traceback
88
import json
99
from .sparqlutils import SPARQLUtils
@@ -424,10 +424,28 @@ def detectLayerColumnTypes(layer):
424424
columnmap[i]=LayerUtils.detectLayerColumnType(layer,i)
425425
return LayerUtils.detectColumnType(columnmap)
426426

427+
@staticmethod
428+
def convertGeometryToFormat(geom,format,reproject=None):
429+
if "geojson" in format.lower():
430+
return geom.asJson()
431+
if "wkt" in format.lower():
432+
if reproject is not None:
433+
return "<"+str(reproject.toOgcUri())+"> "+geom.asWkt()
434+
return geom.asWkt()
435+
if "wkb" in format.lower():
436+
return geom.asWkb()
437+
return None
438+
427439
@staticmethod
428440
def reprojectGeometry(geom,fromcrs,tocrs="EPSG:4326"):
429-
sourceCrs = QgsCoordinateReferenceSystem(fromcrs)
430-
destCrs = QgsCoordinateReferenceSystem.fromOgcWmsCrs(tocrs)
441+
if isinstance(fromcrs,QgsCoordinateReferenceSystem):
442+
sourceCrs=fromcrs
443+
else:
444+
sourceCrs = QgsCoordinateReferenceSystem(fromcrs)
445+
if isinstance(tocrs,QgsCoordinateReferenceSystem):
446+
destCrs=tocrs
447+
else:
448+
destCrs = QgsCoordinateReferenceSystem.fromOgcWmsCrs(tocrs)
431449
tr = QgsCoordinateTransform(sourceCrs, destCrs, QgsProject.instance())
432450
#QgsMessageLog.logMessage("FIELDNAMES: " + str(geom.asJson()),
433451
# MESSAGE_CATEGORY, Qgis.Info)
@@ -437,7 +455,7 @@ def reprojectGeometry(geom,fromcrs,tocrs="EPSG:4326"):
437455
return geom
438456

439457
@staticmethod
440-
def processLiteral(literal, literaltype, reproject, currentlayergeojson=None,triplestoreconf=None, reprojecttask=False):
458+
def processLiteral(literal, literaltype, reproject, currentlayergeojson=None,triplestoreconf=None, reprojecttask=False,formatt=None):
441459
geom = None
442460
if triplestoreconf is not None and "literaltype" in triplestoreconf:
443461
literaltype = triplestoreconf["literaltype"]
@@ -490,11 +508,13 @@ def processLiteral(literal, literaltype, reproject, currentlayergeojson=None,tri
490508
return currentlayergeojson
491509
if curcrs is not None:
492510
res["crs"]=curcrs
511+
if formatt is not None:
512+
return LayerUtils.convertGeometryToFormat(geom,formatt,reproject)
493513
return res
494514
except Exception as e:
495-
print("Literal: " + str(literal) + " " + str(literaltype))
496-
print(e)
497-
print(traceback.format_exc())
515+
QgsMessageLog.logMessage("Literal: " + str(literal) + " " + str(literaltype), MESSAGE_CATEGORY, Qgis.Info)
516+
QgsMessageLog.logMessage(str(e) , MESSAGE_CATEGORY, Qgis.Info)
517+
QgsMessageLog.logMessage(str(traceback.format_exc()), MESSAGE_CATEGORY, Qgis.Info)
498518
return None
499519

500520

0 commit comments

Comments
 (0)