def kml_done(self): return """ <Placemark id="%s"> <visibility>0</visibility> <name>%s</name> <styleUrl>#%s-default</styleUrl> <MultiGeometry> %s %s </MultiGeometry> </Placemark> """ % (self.uid, self.name, self.model_uid(), asKml(self.output_point_geom, uid=self.uid), asKml(self.output_poly_geom, uid=self.uid))
def kml_done(self): return """ <Placemark id="%s"> <visibility>0</visibility> <name>%s</name> <styleUrl>#%s-default</styleUrl> <MultiGeometry> %s %s </MultiGeometry> </Placemark> """ % (self.uid, self.name, self.model_uid(), asKml(self.output_point_geom, uid=self.uid), asKml(self.output_poly_geom, uid=self.uid))
def kml_done(self): return """ <Placemark id="%s"> <visibility>1</visibility> <styleUrl>#%s-default</styleUrl> %s </Placemark> """ % ( self.uid, self.model_uid(), asKml(self.geometry.transform( settings.GEOMETRY_CLIENT_SRID, clone=True )) )
def kml_done(self): return """ <Placemark id="%s"> <visibility>1</visibility> <styleUrl>#%s-default</styleUrl> %s </Placemark> """ % ( self.uid, self.model_uid(), asKml(self.geometry.transform( settings.GEOMETRY_CLIENT_SRID, clone=True )) )
def kml_done(self): return """ %s <Placemark id="%s"> <visibility>1</visibility> <name>%s</name> <styleUrl>#%s-default</styleUrl> <ExtendedData> <Data name="desc"><value>%s</value></Data> </ExtendedData> <MultiGeometry> %s %s </MultiGeometry> </Placemark> """ % (self.kml_style, self.uid, escape(self.name), self.model_uid(), escape(self.description), asKml(self.output_geom.transform( settings.GEOMETRY_CLIENT_SRID, clone=True),uid=self.uid), asKml(self.input_starting_point.transform( settings.GEOMETRY_CLIENT_SRID, clone=True),uid=self.uid))
def kml_done(self): key = "watershed_kmldone_%s_%s" % (self.uid, slugify(self.date_modified)) kmlcache, created = KmlCache.objects.get_or_create(key=key) kml = kmlcache.kml_text if not created and kml: logger.warn("%s ... kml cache found" % key) return kml logger.warn("%s ... NO kml cache found ... seeding" % key) ob = json.loads(self.output_best) wids = [int(x.strip()) for x in ob['best']] puc = json.loads(self.output_pu_count) method = "best" #method = "all" if method == "best": wshds = PlanningUnit.objects.filter(pk__in=wids) elif method == "all": wshds = PlanningUnit.objects.all() kmls = [] color = self.color #color = "cc%02X%02X%02X" % (random.randint(0,255),random.randint(0,255),random.randint(0,255)) for ws in wshds: try: hits = puc[str(ws.pk)] except KeyError: hits = 0 if method == "all": numruns = settings.MARXAN_NUMREPS prop = float(hits)/numruns scale = (1.4 * prop * prop) if scale > 0 and scale < 0.5: scale = 0.5 desc = "<description>Included in %s out of %s runs.</description>" % (hits, numruns) else: prop = 1.0 scale = 1.2 desc = "" if prop > 0: kmls.append( """ <Style id="style_%s"> <IconStyle> <color>%s</color> <scale>%s</scale> <Icon> <href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href> </Icon> </IconStyle> <LabelStyle> <color>0000ffaa</color> <scale>0.1</scale> </LabelStyle> </Style> <Placemark id="huc_%s"> <visibility>1</visibility> <name>%s</name> %s <styleUrl>style_%s</styleUrl> %s </Placemark> """ % (ws.fid, color, scale, ws.fid, ws.name, desc, ws.fid, asKml(ws.geometry.point_on_surface))) fullkml = """%s <Folder id='%s'> <name>%s</name> %s </Folder>""" % (self.kml_style, self.uid, escape(self.name), '\n'.join(kmls)) kmlcache.kml_text = fullkml kmlcache.save() return fullkml
def kml(self): #from general.utils import format import time #the following list appendation strategy was a good 10% faster than string concatenation #(biggest improvement however came by adding/populating a geometry_client column in leaseblock table) combined_kml_list = [] if len(self.lease_blocks) == 0: #empty result leaseblock_ids = [] combined_kml_list.append('<Folder id="%s"><name>%s -- 0 Leaseblocks</name><visibility>0</visibility><open>0</open>' %(self.uid, self.name)) else: leaseblock_ids = [int(id) for id in self.lease_blocks.split(',')] combined_kml_list.append('<Folder id="%s"><name>%s</name><visibility>0</visibility><open>0</open>' %(self.uid, self.name)) combined_kml_list.append('<LookAt><longitude>-73.5</longitude><latitude>39</latitude><heading>0</heading><range>600000</range></LookAt>') combined_kml_list.append('<styleUrl>#%s-default</styleUrl>' % (self.model_uid())) combined_kml_list.append('%s' % self.leaseblock_style()) print 'Generating KML for %s Lease Blocks' % len(leaseblock_ids) start_time = time.time() leaseblocks = LeaseBlock.objects.filter(pk__in=leaseblock_ids) for leaseblock in leaseblocks: try: kml = """ <Placemark> <visibility>1</visibility> <styleUrl>#%s-leaseblock</styleUrl> <ExtendedData> <Data name="header"><value>%s</value></Data> <Data name="prot_number"><value>%s</value></Data> <Data name="depth_range_output"><value>%s</value></Data> <Data name="substrate"><value>%s</value></Data> <Data name="sediment"><value>%s</value></Data> <Data name="wea_label"><value>%s</value></Data> <Data name="wea_state_name"><value>%s</value></Data> <Data name="distance_to_shore"><value>%s</value></Data> <Data name="distance_to_awc"><value>%s</value></Data> <Data name="wind_speed_output"><value>%s</value></Data> <Data name="ais_density"><value>%s</value></Data> <Data name="user"><value>%s</value></Data> <Data name="modified"><value>%s</value></Data> </ExtendedData> %s </Placemark> """ % ( self.model_uid(), self.name, leaseblock.prot_numb, leaseblock.depth_range_output, leaseblock.majority_substrate, #LeaseBlock Update: might change back to leaseblock.substrate leaseblock.majority_sediment, #TODO: might change sediment to a more user friendly output leaseblock.wea_label, leaseblock.wea_state_name, format(leaseblock.avg_distance,0), format(leaseblock.awc_min_distance,0), #LeaseBlock Update: added the following two entries (min and max) to replace avg wind speed for now leaseblock.wind_speed_output, leaseblock.ais_density, self.user, self.date_modified.replace(microsecond=0), #asKml(leaseblock.geometry.transform( settings.GEOMETRY_CLIENT_SRID, clone=True )) asKml(leaseblock.geometry_client) ) except: #this is in place to handle (at least one - "NJ18-05_6420") instance in which null value was used in float field max_distance print "The following leaseblock threw an error while generating KML: %s" %leaseblock.prot_numb continue combined_kml_list.append(kml ) combined_kml_list.append("</Folder>") combined_kml = ''.join(combined_kml_list) elapsed_time = time.time() - start_time print 'Finished generating KML (with a list) for %s Lease Blocks in %s seconds' % (len(leaseblock_ids), elapsed_time) return combined_kml
def geom_kml(self): """ Basic KML representation of the feature geometry """ return asKml(self.geometry_final, uid=self.uid)
def kml(self): #from general.utils import format import time #the following list appendation strategy was a good 10% faster than string concatenation #(biggest improvement however came by adding/populating a geometry_client column in leaseblock table) combined_kml_list = [] if len(self.lease_blocks) == 0: #empty result leaseblock_ids = [] combined_kml_list.append('<Folder id="%s"><name>%s -- 0 Leaseblocks</name><visibility>0</visibility><open>0</open>' %(self.uid, self.name)) else: leaseblock_ids = [int(id) for id in self.lease_blocks.split(',')] combined_kml_list.append('<Folder id="%s"><name>%s</name><visibility>0</visibility><open>0</open>' %(self.uid, self.name)) combined_kml_list.append('<LookAt><longitude>-73.5</longitude><latitude>39</latitude><heading>0</heading><range>600000</range></LookAt>') combined_kml_list.append('<styleUrl>#%s-default</styleUrl>' % (self.model_uid())) combined_kml_list.append('%s' % self.leaseblock_style()) print 'Generating KML for %s Lease Blocks' % len(leaseblock_ids) start_time = time.time() leaseblocks = LeaseBlock.objects.filter(pk__in=leaseblock_ids) for leaseblock in leaseblocks: try: kml = """ <Placemark> <visibility>1</visibility> <styleUrl>#%s-leaseblock</styleUrl> <ExtendedData> <Data name="header"><value>%s</value></Data> <Data name="prot_number"><value>%s</value></Data> <Data name="depth_range_output"><value>%s</value></Data> <Data name="substrate"><value>%s</value></Data> <Data name="sediment"><value>%s</value></Data> <Data name="wea_label"><value>%s</value></Data> <Data name="wea_state_name"><value>%s</value></Data> <Data name="distance_to_shore"><value>%s</value></Data> <Data name="distance_to_awc"><value>%s</value></Data> <Data name="wind_speed_output"><value>%s</value></Data> <Data name="ais_density"><value>%s</value></Data> <Data name="user"><value>%s</value></Data> <Data name="modified"><value>%s</value></Data> </ExtendedData> %s </Placemark> """ % ( self.model_uid(), self.name, leaseblock.prot_numb, leaseblock.depth_range_output, leaseblock.majority_seabed, #LeaseBlock Update: might change back to leaseblock.substrate leaseblock.majority_sediment, #TODO: might change sediment to a more user friendly output leaseblock.wea_label, leaseblock.wea_state_name, format(leaseblock.avg_distance,0), format(leaseblock.awc_min_distance,0), #LeaseBlock Update: added the following two entries (min and max) to replace avg wind speed for now leaseblock.wind_speed_output, leaseblock.ais_density, self.user, self.date_modified.replace(microsecond=0), #asKml(leaseblock.geometry.transform( settings.GEOMETRY_CLIENT_SRID, clone=True )) asKml(leaseblock.geometry_client) ) except: #this is in place to handle (at least one - "NJ18-05_6420") instance in which null value was used in float field max_distance print "The following leaseblock threw an error while generating KML: %s" %leaseblock.prot_numb continue combined_kml_list.append(kml ) combined_kml_list.append("</Folder>") combined_kml = ''.join(combined_kml_list) elapsed_time = time.time() - start_time print 'Finished generating KML (with a list) for %s Lease Blocks in %s seconds' % (len(leaseblock_ids), elapsed_time) return combined_kml
def geom_kml(self): """ Basic KML representation of the feature geometry """ return asKml(self.geometry_final, uid=self.uid)