def create_kml(self,name): """ create kml file from the HeatMap results :param name: filename """ file = Kml() counts = [s.count**0.5 for s in self.heatmap] c_min, c_max = min(counts), max(counts) divisor= (c_max-c_min)/9 for s in self.heatmap: single = file.newpolygon(name=str(s.count), outerboundaryis=s.get_coordinates()) single.style.polystyle.color = COL[int(((s.count**0.5)-c_min)//divisor)] file.save(name+'.kml')
# generate geometries point = kml.newpoint(name="TestPoint", coords=[(-23.094721, 33.4838)]) linestring = kml.newlinestring(name="TestLinestring") linestring.coords = [(-23.1659603, 33.4754108), (-23.1631279, 33.4767710), (-23.1604671, 33.4769858), (-23.1554890, 33.4758403), (-23.1545448, 33.4731198), (-23.1518841, 33.4686807), (-23.1486225, 33.4667476), (-23.1433010, 33.4662464), (-23.1391811, 33.4666044), (-23.1354904, 33.4686807), (-23.1324005, 33.4715447), (-23.1305981, 33.4754824), (-23.1307697, 33.4795631), (-23.1289673, 33.4822835), (-23.1247616, 33.4828562), (-23.1208992, 33.4819255), (-23.1177235, 33.4796347), (-23.1159210, 33.4762699), (-23.1117153, 33.4736925), (-23.1081963, 33.4726186)] polygon1 = kml.newpolygon(name="TestPolygonOnlyOuter") polygon1.outerboundaryis = [ (-23.0895710, 33.4706855), (-23.0868244, 33.4729050), (-23.0818462, 33.4744085), (-23.0760098, 33.4738357), (-23.0727482, 33.4737641), (-23.0702591, 33.4745517), (-23.0689716, 33.4755540), (-23.0683708, 33.4769142), (-23.0689716, 33.4778449), (-23.0709457, 33.4772722), (-23.0737782, 33.4761267), (-23.0778122, 33.4772006), (-23.0790138, 33.4786324), (-23.0786705, 33.4804938), (-23.0774689, 33.4819255), (-23.0756664, 33.4823551), (-23.0742931, 33.4837868), (-23.0740356, 33.4856480), (-23.0724049, 33.4870797), (-23.0697441, 33.4884398), (-23.0687141, 33.4880103), (-23.0688000, 33.4871513), (-23.0714607, 33.4854333), (-23.0706882, 33.4832857), (-23.0691433, 33.4851469), (-23.0657101, 33.4849322), (-23.0639076, 33.4828562), (-23.0632210, 33.4807085),
kml = Kml( name="Usage", open=1 ) # open=1 just opens the document in the TOC (table of contents). Not a necessary step. # A simple Point kml.newpoint(name="Kirstenbosch", coords=[(18.432314, -33.988862)]) # A simple Linestring showing off HTML markup lin = kml.newlinestring(name="Pathway", description="A pathway in <b>Kirstenbosch</b>", coords=[(18.43312, -33.98924), (18.43224, -33.98914), (18.43144, -33.98911), (18.43095, -33.98904)]) # A simple Polygon with a hole in it. pol = kml.newpolygon(name="Atrium Garden", outerboundaryis=[(18.43348, -33.98985), (18.43387, -33.99004262216968), (18.43410, -33.98972), (18.43371, -33.98952), (18.43348, -33.98985)], innerboundaryis=[[(18.43360, -33.98982), (18.43386, -33.98995), (18.43401, -33.98974), (18.43376, -33.98962), (18.43360, -33.98982)]]) # Saving kml.save(os.path.splitext(__file__)[0] + ".kml") #kml.savekmz(os.path.splitext(__file__)[0] + ".kmz") # uncomment to save to kmz #print kml.kml() # uncomment to see the kml printed to screen
pnt.iconstyle.color = 'ffff0000' # Blue pnt.iconstyle.scale = 3 # Icon thrice as big pnt.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/info-i.png' # Culry 'information i # A Point with a styleMap. The Text changes from blue to red on mouse over. pnt = kml.newpoint(name="Kirstenbosch StyleMap", coords=[(18.432314,-33.988862)]) pnt.stylemap.normalstyle.labelstyle.color = 'ffff0000' pnt.stylemap.highlightstyle.labelstyle.color = 'ff0000ff' # A red thick LineString lin = kml.newlinestring(name="Pathway", description="A pathway in Kirstenbosch", coords=[(18.43312,-33.98924), (18.43224,-33.98914), (18.43144,-33.98911), (18.43095,-33.98904)]) lin.linestyle.color = Color.red # Red lin.linestyle.width = 10 # 10 pixels # A Polygon with a hole. Half invisible. pol = kml.newpolygon(name="Atrium Garden", outerboundaryis=[(18.43348,-33.98985), (18.43387,-33.99004262216968), (18.43410,-33.98972), (18.43371,-33.98952), (18.43348,-33.98985)], innerboundaryis=[(18.43360,-33.98982), (18.43386,-33.98995), (18.43401,-33.98974), (18.43376,-33.98962), (18.43360,-33.98982)]) pol.polystyle.color = '990000ff' # Red pol.polystyle.outline = 0 # A Point showing off a BalloonStyle pnt = kml.newpoint(name="BallonStyle", coords=[(18.429191, -33.987286)]) pnt.balloonstyle.text = "These are trees and this text is blue with a green background." pnt.balloonstyle.bgcolor = Color.lightgreen pnt.balloonstyle.textcolor = Color.rgb(0, 0, 255) # Saving kml.save(os.path.splitext(__file__)[0] + ".kml")
def csv_to_kml(input_filename): # open input file csv_file = open(input_filename,'rU') reader = csv.DictReader(csv_file) # preamble input_filename_base, input_filename_ext = os.path.splitext(input_filename) # open output file kml_file = open(input_filename_base + '.kml','w') kml_file.write(r"""<?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> """) kml_file.write("<Document><name>%s</name>" % input_filename_base) kml_file.write(r""" <Style id="grid1k"><IconStyle> <Icon> <color>ff0000</color> </Icon> </IconStyle></Style>""") kml_file.write(r""" <Schema name="sample" id="sample"> <SimpleField name="Name" type="string"></SimpleField> <SimpleField name="Description" type="string"></SimpleField> <SimpleField name="GID" type="string"></SimpleField> </Schema> """) gids_unique = set() gids = [] locs_1k = [] # main loop for line in reader: kml_file.write(' <Placemark>\n') kml_file.write(' <name>GID=%s</name>\n' % (line['GID_100m'])) kml_file.write('\t<ExtendedData><SchemaData schemaUrl=\"#sample\">\n') kml_file.write(' <SimpleField name="GID">%s</SimpleField>\n' % (line['GID_100m'])) kml_file.write('\t\t</SchemaData></ExtendedData>\n') kml_file.write(" <Point><coordinates>%s,%s</coordinates></Point>\n" % (line['x'], line['y'])) kml_file.write(' </Placemark>\n') gids_unique.add(line['GID_1k']) gids.append(line['GID_1k']) locs_1k.append([line['x_1k'], line['y_1k']]) # epilogue kml_file.write('\t</Document>\n\t</kml>') csv_file.close() kml_file.close() gids_unique = list(gids_unique) locs_1k_unique = [] for gid in gids_unique: locs_1k_unique.append([locs_1k[k] for k, x in enumerate(map(lambda x: x==gid, gids)) if x][0]) for i, loc in enumerate(locs_1k_unique): kml=Kml() proj_para = "+proj=laea +ellps=WGS84 +lon_0=20 +lat_0=5 +units=m +no_defs" project = pyproj.Proj(proj_para) loc_laea = list(project(loc[0], loc[1])) center_pt = kml.newpoint(name=gids_unique[i], description="1k by 1k grid", coords=[(loc[0], loc[1])]) pol = kml.newpolygon(name="1k grid", description="A pathway in Kirstenbosch", outerboundaryis=[project(loc_laea[0]-500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]+500, inverse=True)], innerboundaryis=[project(loc_laea[0]-500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]+500, inverse=True)]) pol.polystyle.color = 'ff0000ff' kml.save("csv/"+gids_unique[i]+".kml")
def csv_to_kml(input_filename): # open input file csv_file = open(input_filename,'rU') reader = csv.DictReader(csv_file) # preamble input_filename_base, input_filename_ext = os.path.splitext(input_filename) print(input_filename_base) # open output file kml_file = open(input_filename_base + '.kml','w') kml_file.write(r"""<?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> """) kml_file.write("<Document><name>%s</name>" % input_filename_base) kml_file.write(r""" <Style id="grid1k"><IconStyle> <Icon> <color>ff0000</color> </Icon> </IconStyle></Style>""") kml_file.write(r""" <Schema name="sample" id="sample"> <SimpleField name="Name" type="string"></SimpleField> <SimpleField name="Description" type="string"></SimpleField> <SimpleField name="GID" type="string"></SimpleField> </Schema> """) gids_unique = set() gids = [] locs_1k = [] # main loop for line in reader: kml_file.write(' <Placemark>\n') kml_file.write(' <name>GID=%s</name>\n' % (line['GID_100m'])) kml_file.write('\t<ExtendedData><SchemaData schemaUrl=\"#sample\">\n') kml_file.write(' <SimpleField name="GID">%s</SimpleField>\n' % (line['GID_100m'])) kml_file.write('\t\t</SchemaData></ExtendedData>\n') kml_file.write(" <Point><coordinates>%s,%s</coordinates></Point>\n" % (line['x'], line['y'])) kml_file.write(' </Placemark>\n') gids_unique.add(line['GID_1k']) gids.append(line['GID_1k']) locs_1k.append([line['x_1k'], line['y_1k']]) # epilogue kml_file.write('\t</Document>\n\t</kml>') csv_file.close() kml_file.close() gids_unique = list(gids_unique) locs_1k_unique = [] for gid in gids_unique: locs_1k_unique.append([locs_1k[k] for k, x in enumerate(map(lambda x: x==gid, gids)) if x][0]) for i, loc in enumerate(locs_1k_unique): kml=Kml() proj_para = "+proj=laea +ellps=WGS84 +lon_0=20 +lat_0=5 +units=m +no_defs" project = pyproj.Proj(proj_para) loc_laea = list(project(loc[0], loc[1])) center_pt = kml.newpoint(name=gids_unique[i], description="1k by 1k grid", coords=[(loc[0], loc[1])]) pol = kml.newpolygon(name="1k grid", description="A pathway in Kirstenbosch", outerboundaryis=[project(loc_laea[0]-500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]+500, inverse=True)], innerboundaryis=[project(loc_laea[0]-500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]+500, inverse=True), project(loc_laea[0]+500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]-500, inverse=True), project(loc_laea[0]-500, loc_laea[1]+500, inverse=True)]) pol.polystyle.color = 'ff0000ff' kml.save("output/drone_flight_1k/"+gids_unique[i]+".kml")
def createBorderKML(): kml = Kml(name="Hungary") border = kml.newpolygon(name="Hungarian border", outerboundaryis=poly_red) border.polystyle.color = '00000f0f' kml.save("maps/border.kml")