Mercurial > hg > ChinaGisRestApi
diff RestDbGisApi.py @ 278:4ade9b80b563 default tip
more cleanup.
descriptions work better now.
author | casties |
---|---|
date | Fri, 24 Feb 2012 16:41:30 +0100 |
parents | 55bc9972fb1b |
children |
line wrap: on
line diff
--- a/RestDbGisApi.py Thu Feb 23 21:37:37 2012 +0100 +++ b/RestDbGisApi.py Fri Feb 24 16:41:30 2012 +0100 @@ -481,7 +481,8 @@ kmlPlace['TimeStamp'] = '%s'%beg_yr if geomField=='point': - kmlPlace['description'] = "<![CDATA[%s]]>"%desc + #kmlPlace['description'] = "<![CDATA[%s]]>"%desc + kmlPlace['description'] = desc kmlPlace['icon'] = '#marker_icon_'+colorField kmlPlace['coord_x'] = str(xCoord) @@ -603,114 +604,6 @@ ## legacy methods... - def getKmlUrl(self,schema='chgis',table='mpdl',args={'doc':None,'id':None}): - logging.debug("getKmlUrl") - id=args.get('id') - doc=args.get('doc') - data = self.getDataForGoogleMap(schema,table,id,doc) - kml=self.getKMLname(data=data,table=table) - baseUrl = self.absolute_url() - return "%s/daten/%s"%(baseUrl,kml) - - def getDataForGoogleMap(self,schema='chgis',table='mpdl',id=None,doc=None): - logging.debug("getDataForGoogleMap") - qstr="SELECT * FROM "+schema+"."+table - try: - if id is not None: - qstr=qstr+" WHERE " - for id_item in id.split(","): - if table=='mpdl': - qstr=qstr+" mpdl_xmlsource_id = '"+id_item+ "' OR" - else: - qstr=qstr+" cast(id as text) LIKE '"+id_item+ "' OR" - qstr=str(qstr).rsplit(" ",1)[0] #to remove last " and " - data=self.ZSQLSimpleSearch(qstr) - return data - except: - return qstr - - - def getKMLname(self,data=[],table=""): - logging.debug("getKMLname") - #session=context.REQUEST.SESSION - kml4Marker="<kml xmlns=\'http://www.opengis.net/kml/2.2\'><Document>" - kml4Marker+="<Style id=\'marker_icon_red\'><IconStyle><scale>15</scale><Icon><href>http://mappit.mpiwg-berlin.mpg.de/mappit/icons/dot_red.png</href></Icon></IconStyle></Style>\n" - kml4Marker+="<Style id=\'marker_icon_black\'><IconStyle><scale>15</scale><Icon><href>http://mappit.mpiwg-berlin.mpg.de/mappit/icons/dot_black.png</href></Icon></IconStyle></Style>\n" - kml4Marker+="<Style id=\'marker_icon_blue\'><IconStyle><scale>15</scale><Icon><href>http://mappit.mpiwg-berlin.mpg.de/mappit/icons/dot_blue.png</href></Icon></IconStyle></Style>\n" - kml4Marker+="<Style id=\'marker_icon_green\'><IconStyle><scale>15</scale><Icon><href>http://mappit.mpiwg-berlin.mpg.de/mappit/icons/dot_green.png</href></Icon></IconStyle></Style>\n" - kml4Marker+="<Style id=\'marker_icon_violett\'><IconStyle><scale>15</scale><Icon><href>http://mappit.mpiwg-berlin.mpg.de/mappit/icons/dot_violett.png</href></Icon></IconStyle></Style>\n" - initializeStringForGoogleMaps="" - #doLine=container.getVar('doLine') - # Mapping a set of points from table-based SQL-query: - if data!=None: - try: - SQL='SELECT "attribute with gis_id" FROM public.metadata WHERE tablename = %s' - res = self.executeSQL(SQL, (table,)) - gisIDattribute = res['rows'][0][0] - except: - return "table not registered within metadata" - - for dataset in data: - try: - xCoord=getattr(dataset,'longitude') - yCoord=getattr(dataset,'latitude') - except: - try: - xCoord=getattr(dataset,'x_coord') - yCoord=getattr(dataset,'y_coord') - except: - #try: - gisID=getattr(dataset,gisIDattribute) - coords=self.getPoint4GISid(gisID) - if coords!=None: - xCoord=coords[0] - yCoord=coords[1] - # except: - # return "no coordinates found" - - if float(xCoord)!=0: - if float(yCoord)!=0: - kml4Marker=kml4Marker+"<Placemark>" - kml4Marker=kml4Marker+"<description> <![CDATA[<b>" - for values in dataset: - #logging.debug("values=%s"%repr(values)) - if values != (None, None): - if str(values).find('name')>-1: - kml4Marker=kml4Marker+"<name>"+str(values[1])+"</name>\n" - continue - elif str(values).find('place')>-1: - kml4Marker=kml4Marker+"<name>"+str(values[1])+"</name>\n" - continue - - kml4Marker=kml4Marker+str(values)+": " - attribute_string=str(values).replace("'","__Apostroph__") - attribute_string=str(attribute_string).replace('"','__DoubleApostroph__') - attribute_string=str(attribute_string).replace(';','__$$__') - attribute_string=str(attribute_string).replace('&','&') - if str(attribute_string).find('http')>-1: - attribute_string='<A HREF=' + str(attribute_string) + ' target="_blank">' + str(attribute_string) + '</A>' - kml4Marker=kml4Marker+attribute_string+"</a><br>\n" - - kml4Marker=kml4Marker+"]]></description>\n" - kml4Marker=kml4Marker+"<styleURL>#marker_icon_red</styleURL>\n" - kml4Marker=kml4Marker+"<Point>" - - kml4Marker=kml4Marker+"<coordinates>"+str(xCoord)+","+str(yCoord)+",0</coordinates>\n" - kml4Marker=kml4Marker+"</Point>\n" - kml4Marker=kml4Marker+"</Placemark>\n" - - kml4Marker=kml4Marker+"</Document>\n</kml>" - kmlFileName="marker"+str(time.time())+".kml" - - #kml4Marker=str(kml4Marker).replace('&','$$') - #kml4Marker=str(kml4Marker).replace(';','__$$__') - #kml4Marker=str(kml4Marker).replace('#','__SHARP__') - isLoadReady='false' - while isLoadReady=='false': - isLoadReady=self.RESTwrite2File(self.daten,kmlFileName,kml4Marker) - - return kmlFileName - def trydatahas_key(self,data,index,key_string): logging.debug("trying:"+key_string) try: @@ -718,82 +611,6 @@ except: return 'false' -# def getGoogleMapString(self,kml): -# logging.debug("getGoogleMapString") -# printed= '<body %s> '%kml +"""\n <div id="map_canvas" style="width: 98%; height: 95%"> </div> \n </body>" \n </html>""" -# return printed - - def getPoint4GISid(self,gis_id): - j=0 - coords=(0,0) - if gis_id != None: - while (True): - j=j+1 - if (j>100): # FJK: just to prevent endless loops - break - if (gis_id.isdigit()): # FJK: regular exit from while-loop - break - else: - gis_id=gis_id.strip('abcdefghijklmnopqrstuvwxyz_') # FJK: to strip all letters - gis_id=gis_id.strip() # FJK: to strip all whitespaces - resultpoint = [0,0] - results = None - try: - if int(gis_id)>0: - SQL="SELECT x_coord,y_coord FROM chgis.chgis_coords WHERE gis_id LIKE cast("+ str(gis_id) +" as text);" - results=self.ZSQLSimpleSearch(SQL) - #print results - if results != None: - for result in results: - resultpoint=[getattr(result,str('x_coord')),getattr(result,str('y_coord'))] - if resultpoint !=[0,0]: - return resultpoint - else: - coords=self.getCoordsFromREST_gisID(gis_id) - SQL="INSERT INTO chgis.chgis_coords (chgis_coords_pkey,gis_id,x_coord,y_coord) VALUES (default," +gis_id+ "," +coords[0][1]+ "," +coords[0][0]+ "); ANALYZE chgis.chgis_coords;" - returnstring=self.ZSQLSimpleSearch(SQL) - return coords[0] - except: - return "gis_id not to interpretable:"+str(gis_id) - else: - return coords[0] - - def getCoordsFromREST_gisID(self,gis_id): - gis_id=gis_id.strip() - coordlist=[] - i=0 - while (i<5 and coordlist==[]): - urlinfo=urlFunctions.zUrlopenInfo(self,"http://chgis.hmdc.harvard.edu/xml/id/"+gis_id) - urlinfoLength=urlinfo.get('content-length') - if int(urlinfoLength)<500: - urlresponse=urlFunctions.zUrlopenRead(self,"http://chgis.hmdc.harvard.edu/xml/id/cts_"+gis_id) - else: - urlresponse=urlFunctions.zUrlopenRead(self,"http://chgis.hmdc.harvard.edu/xml/id/"+gis_id) - urlresponseString=urlFunctions.zUrlopenParseString(self,urlresponse) - baseDocElement= urlFunctions.zUrlopenDocumentElement(self,urlresponseString) - childnodes=urlFunctions.zUrlopenChildNodes(self,baseDocElement) - itemnodes=urlFunctions.zUrlopenGetElementsByTagName(self,baseDocElement,'item') - itemspatialnodes=None - - for i in range(0,urlFunctions.zUrlopenLength(self,itemnodes)): - itemnode=urlFunctions.zUrlopenGetItem(self,itemnodes,i) - itemspatialnodes=urlFunctions.zUrlopenGetElementsByTagName(self,itemnode,'spatial') - if itemspatialnodes is not None: - for j in range(0,urlFunctions.zUrlopenLength(self,itemspatialnodes)): - coord=[] - itemspatialnode= urlFunctions.zUrlopenGetItem(self,itemspatialnodes,j) - itemspatiallatnodes=urlFunctions.zUrlopenGetElementsByTagName(self,itemspatialnode,'degrees_latitude') - for k in range(0,urlFunctions.zUrlopenLength(self,itemspatiallatnodes)): - itemspatiallatnode= urlFunctions.zUrlopenGetItem(self,itemspatiallatnodes,k) - coord.append(urlFunctions.zUrlopenGetTextData(self,itemspatiallatnode)) - itemspatiallngnodes=urlFunctions.zUrlopenGetElementsByTagName(self,itemspatialnode,'degrees_longitude') - for k in range(0,urlFunctions.zUrlopenLength(self,itemspatiallngnodes)): - itemspatiallngnode= urlFunctions.zUrlopenGetItem(self,itemspatiallngnodes,k) - coord.append(urlFunctions.zUrlopenGetTextData(self,itemspatiallngnode)) - coordlist.append(coord) - gis_id= "_"+gis_id - return coordlist - # End for GoogleMaps creation def RESTwrite2File(self,datadir, name,text):