# HG changeset patch
# User fknauft
# Date 1317995887 -7200
# Node ID 5b38b50052e443feec175f23b177b6b618141c43
# Parent e9a1ac7d2ab2ea03f71fac5f66d87086cebad0cc
Display Polygons and Lines via chgis_id
Reload button alternative changed to "R"
diff -r e9a1ac7d2ab2 -r 5b38b50052e4 RestDbGisApi.py
--- a/RestDbGisApi.py Fri Oct 07 12:25:21 2011 +0200
+++ b/RestDbGisApi.py Fri Oct 07 15:58:07 2011 +0200
@@ -193,25 +193,31 @@
bad_luck=False
fieldMap = self.getFieldNameMap(data['fields'])
+ geomdata=None
if (geomField!="point"):
- try:
- geomstr='select astext(st_simplify(transform(the_geom,4326),0.05)) from "%s"."%s"'%(schema,table)
- geomdata=self.executeSQL(geomstr)
- teststr=geomdata.values()[1][0]
- if (teststr == (u'MULTIPOLYGON EMPTY',)):
- geomstr='select astext(st_simplify(transform(the_geom,2333),0.05)) from "%s"."%s"'%(schema,table)
+ # first check if the file is registered as geo-dataset (which then should have an attribute "the_geom")
+ requeststring="select f_geometry_column from geometry_columns where f_table_schema=%s and f_table_name=%s "
+ geocolumn_res=self.executeSQL(requeststring,(schema,table))
+ if len(geocolumn_res['rows'])>0:
+ geocolumn=geocolumn_res['rows'][0][0]
+ try:
+ geomstr="select astext(st_simplify(transform(%s,4326),0.05)) from %s.%s"%(geocolumn,schema,table) # the string variables have to be added here and not in executeSQL!
geomdata=self.executeSQL(geomstr)
+ teststr=geomdata.values()[1][0]
+ if (teststr == (u'MULTIPOLYGON EMPTY',)):
+ geomstr="select astext(st_simplify(transform(%s,4326),0.05)) from %s.%s"%(geocolumn,schema,table) # the string variables have to be added here and not in executeSQL!
+ geomdata=self.executeSQL(geomstr)
+
+ except:
+ try:
+ geomstr="select chgis.astext(chgis.st_simplify(chgis.transform(%s,4326),0.05)) from %s.%s"%(geocolumn,schema,table) # the string variables have to be added here and not in executeSQL!
+ geomdata=self.executeSQL(geomstr)
+ except:
+ geomdata=None
- except:
- try:
- geomstr='select chgis.astext(chgis.st_simplify(chgis.transform(the_geom,4326),0.05)) from "%s"."%s"'%(schema,table)
- geomdata=self.executeSQL(geomstr)
- except:
- geomdata=None
-
if (gisIdField is None) and (latField is None or lonField is None) and geomField=='point':
# no fields given - choose automagically
- sql = 'SELECT field_name FROM public.gis_table_meta_rows WHERE table_name = %s and gis_type = %s'
+ sql = "SELECT field_name FROM public.gis_table_meta_rows WHERE table_name = %s and gis_type = %s"
# gis id in metadata first
res = self.executeSQL(sql, (table,'gis_id'))
if len(res['rows']) > 0:
@@ -249,11 +255,12 @@
# convert data
kmlData = []
geom_list = {}
- try:
- if geomField=='poly' or geomField=='line':
- geom_list=geomdata.values()[1]
- except:
- return "no geomdata in RestDbGisApi Line 254"
+# try:
+# if geomField=='poly' or geomField=='line':
+# geom_list=geomdata.values()[1]
+# except:
+# return "no geomdata in RestDbGisApi Line 254"
+
data_list=data['rows']
for k in range (len(data_list)):
dataset = data_list[k]
@@ -261,7 +268,10 @@
geom_value = geom_list[k]
-
+ if gisIdIdx != None and geomField!='point':
+ gisID = dataset[gisIdIdx]
+ geomdata = self.getLineForChGisId(gisID)
+
# for dataset in data['rows']:
xCoord = 0.0
yCoord = 0.0
@@ -345,8 +355,8 @@
kmlPlace['coord_y'] = str(yCoord)
kmlPlace['coord_z'] = '50'
kmlData.append(kmlPlace)
- if (geomField=='poly' or geomField=='line') and len(geomdata)>0:
- polys=str(geom_value).split('(')
+ if (geomField=='poly' or geomField=='line') and geomdata is not None:
+ polys=str(geomdata).split('(')
aaa=len(polys)
for poly in polys:
kmlPlace = {}
@@ -385,7 +395,7 @@
if gis_id is None or gis_id == "":
return None
- if len(gis_id) < 4:
+ if len(str(gis_id)) < 4:
return None
# try gis_id
@@ -424,6 +434,38 @@
return coords
+ def getLineForChGisId(self, gis_id):
+ """returns line/poly coordinates for given gis_id""" # gets called by getKml
+ def getLine(id):
+ str_gis_id=str(id).split('.')[0]
+ sql="SELECT astext(st_simplify(transform(the_geom,4326),0.05)) FROM chgis.chgis_linesandpolys WHERE gis_id LIKE CAST('%s' AS text)"%(str_gis_id)
+ # logging.error("sql:",sql)
+ # res = self.executeSQL(sql, (str(str_gis_id),))
+ res = self.executeSQL(sql)
+ if len(res['rows']) > 0:
+ return res['rows'][0]
+ else:
+ #logging.error("error on sql:",sql%(str(str_gis_id),))
+ return None
+
+ if gis_id is None or gis_id == "":
+ return None
+ if len(str(gis_id)) < 4:
+ return None
+
+ # try gis_id
+ line_coords = getLine(gis_id)
+ if line_coords is None:
+ # try to clean gis_id...
+ gis_id_short = re.sub(r'[^0-9]','',gis_id)
+ # try again
+ line_coords = getLine(gis_id_short)
+ if line_coords is None:
+ logging.error("CH-GIS ID %s not found!"%(gis_id_short))
+
+
+ return line_coords
+
## legacy methods...
def getKmlUrl(self,schema='chgis',table='mpdl',args={'doc':None,'id':None}):
diff -r e9a1ac7d2ab2 -r 5b38b50052e4 gis_gui/blocks/template.pt
--- a/gis_gui/blocks/template.pt Fri Oct 07 12:25:21 2011 +0200
+++ b/gis_gui/blocks/template.pt Fri Oct 07 15:58:07 2011 +0200
@@ -10,7 +10,7 @@