comparison RestDbGisApi.py @ 93:c23bcd6030a4

automatic map field selection also uses lat/lon
author casties
date Wed, 26 Jan 2011 12:53:25 +0100
parents 3779ad0ba9c7
children 4c125fbb2c5b
comparison
equal deleted inserted replaced
80:68f210a19435 93:c23bcd6030a4
188 188
189 fieldMap = self.getFieldNameMap(data['fields']) 189 fieldMap = self.getFieldNameMap(data['fields'])
190 190
191 if (gisIdField is None) and (latField is None or lonField is None): 191 if (gisIdField is None) and (latField is None or lonField is None):
192 # no fields given - choose automagically 192 # no fields given - choose automagically
193 sql = 'SELECT field_name FROM public.gis_table_meta_rows WHERE table_name = %s and gis_type = %s'
193 # gis id in metadata first 194 # gis id in metadata first
194 #SQL='SELECT "attribute with gis_id" FROM public.metadata WHERE tablename = %s'
195 sql = 'SELECT field_name FROM public.gis_table_meta_rows WHERE table_name = %s and gis_type = %s'
196 res = self.executeSQL(sql, (table,'gis_id')) 195 res = self.executeSQL(sql, (table,'gis_id'))
197 if len(res['rows']) > 0: 196 if len(res['rows']) > 0:
198 gisIdField = res['rows'][0][0] 197 gisIdField = res['rows'][0][0]
199 else: 198 else:
200 logging.warning("no entry in metadata table for table %s"%table) 199 # latitude in metadata
201 # try field names 200 res = self.executeSQL(sql, (table,'coord_lat'))
202 if 'latitude' in fieldMap and 'longitude' in fieldMap: 201 if len(res['rows']) > 0:
203 latField = 'latitude' 202 latField = res['rows'][0][0]
204 lonField = 'longitude' 203 # longitude in metadata
205 elif 'x_coord' in fieldMap and 'y_coord' in fieldMap: 204 res = self.executeSQL(sql, (table,'coord_lon'))
206 latField = 'x_coord' 205 if len(res['rows']) > 0:
207 lonField = 'y_coord' 206 lonField = res['rows'][0][0]
208 else: 207
209 logging.error("getKMLdata unable to find position fields") 208 if (gisIdField is None) and (latField is None or lonField is None):
210 return None 209 logging.warning("no entry in metadata table for table %s" % table)
210 # still no fields - try field names
211 if 'latitude' in fieldMap and 'longitude' in fieldMap:
212 latField = 'latitude'
213 lonField = 'longitude'
214 elif 'x_coord' in fieldMap and 'y_coord' in fieldMap:
215 latField = 'x_coord'
216 lonField = 'y_coord'
217 else:
218 logging.error("getKMLdata unable to find position fields")
219 return None
220
211 221
212 # convert field names to row indexes 222 # convert field names to row indexes
213 gisIdIdx = fieldMap.get(gisIdField,None) 223 gisIdIdx = fieldMap.get(gisIdField,None)
214 latIdx = fieldMap.get(latField,None) 224 latIdx = fieldMap.get(latField,None)
215 lonIdx = fieldMap.get(lonField,None) 225 lonIdx = fieldMap.get(lonField,None)