简单的 Google 地球 KML 生成器
项目描述
KMLB
简单的 Google 地球 KML 生成器
创建包含以下内容的 KML 文件:
- 地标
- 线和折线
- 多边形(2D + 3D)
- 文件夹
定制:
- 颜色
- 标签
- 图标
- 坐标
- 海拔
- 相机角度
示例使用
使用 KMLB 编写基本 KML 文件:
import kmlb
# CREATE A POINT
fountain = kmlb.point([-71.051904, 42.358988, 0], 'Rings Fountain')
# WRITE KML FILE
kmlb.kml('Boston Fountain', # KML name
[fountain], # Features
r'C:\Users\UserName\Desktop\KMLB_Tutorial.kml' # Export path
)
使用 KMLB 映射 POI 或地址:
import kmlb
# CREATE A POINT FROM A POI
bos_common = kmlb.search_poi('Boston Common, Boston, MA')
# CREATE A POINT FROM AN ADDRESS
ss = kmlb.search_poi('700 Atlantic Avenue, Boston, MA', name='South Station')
# WRITE KML FILE
kmlb.kml('Boston Landmarks', # KML name
[bos_common, ss], # Features
r'C:\Users\UserName\Desktop\KMLB_Tutorial.kml' # Export path
)
使用 KMLB 创建自定义 KML 文件:
import kmlb
# DEFINE A STYLE
pt_style = kmlb.point_style('Red Triangle', # Point style name
'http://maps.google.com/mapfiles/kml/shapes/triangle.png', # Icon
('#ff0000', 100), # Icon color
1.0, # Icon scale
('#ffffff', 100), # Label color
1.0 # Label size
)
# CREATE A POINT
coords = [-71.053568, 42.359053, 151]
name = 'Custom House Tower'
attribute_titles = ['City', 'Building', 'Height (M)']
attributes = ['Boston', 'Custom House Tower', '151']
altitude_mode = 'RTG' # 'Relative To Ground'
style_to_use = 'Red Triangle' # Name of point style defined earlier
clock_tower = kmlb.point(coords, name, attribute_titles, attributes, altitude_mode, style_to_use)
# WRITE KML FILE
kmlb.kml('Boston Clock Tower', # KML Name
[clock_tower], # Features to include
r'C:\Users\UserName\Desktop\KMLB_Tutorial.kml', # Export path
'Created with KMLB Python Package', # KML Description
[pt_style] # Styles to include
)
功能
几何函数
观点
定义 KML 点元素。
point()
point(coords, name, headers=None, attributes=None, altitude_mode="CTG", style_to_use=None, hidden=False, camera=None)
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
坐标 | 列表 | 一个坐标集:[X, Y, Z] |
姓名 | 细绳 | 赋予点要素的名称。该名称将用于标记。 |
可选参数
范围 | 类型 | 描述 |
---|---|---|
标题 | 列表 | 点要素的属性标题列表 |
属性 | 列表 | 点要素的属性列表。 |
海拔模式 | 细绳 | 缩写高度模式选项之一:CTG , RTG , ABS (默认 = 'CTG' ) |
style_to_use | 细绳 | 要使用的名称point_style() (默认 = None )。 |
隐 | 布尔 | 值True 或False 位置False 表示该点将可见。(默认 = False )。 |
相机 | 元素 | KML 'LookAt' 元素。(默认 = None ) |
返回
返回 | 类型 | 描述 |
---|---|---|
地标 | 目的 | 表示 KML 地标的 XML 元素。 |
关于一个点
定义 a 所需的第一件事point()
是一个坐标集,用于标记要映射的点的位置。一个坐标集包含三个值:X、Y、Z
- X = 十进制度的经度
- Y = 十进制度的纬度
- Z = 以米为单位的高度
该点还需要一个名称。该点的名称将是用于在地图上标记该点的值。
在地图中单击该点时,可以显示附加信息。此附加信息由标头(可选)和属性(可选)参数定义。Headers & Attributes 一起工作,可以被认为是一个表格,“headers”是第一行,“attributes”是第二行。
城市 | 建造 | 高度(米) |
---|---|---|
波士顿 | 海关大楼 | 151 |
高度模式(可选)定义了 z 坐标(高度)的映射方式。当没有给出高度模式时,默认使用“CTG”。
- CTG = 钳位接地。忽略任何高度值并将要素放置在地面上。
- RTG = 相对于地面。从坐标正下方的地面测量高度。
- ABS = 绝对。相对于平均海平面的高度。
可以选择对点进行样式化。要使用的样式(可选)参数是要应用于点的样式的名称。点的样式由point_style()
函数定义。
或者,可以使用隐藏(可选)参数将点设置为可见或不可见。将隐藏设置为True
将在地图首次打开时隐藏地图上的点。地图用户可以使该点在地图中再次可见。在要包含数据时隐藏点,但数据可能会使地图混乱。默认情况下,点是可见的。
例子
未应用样式的点。
import kmlb
# Define a point that marks the top of Boston's Custom House Tower
# Defining the point's arguments ahead of defining the point
coords = [-71.053568, 42.359053, 151]
name = 'Custom House Tower'
attribute_titles = ['City', 'Building', 'Height (M)']
attributes = ['Boston', 'Custom House Tower', '151']
# Define the point
placemark = kmlb.point(coords, name, attribute_titles, attributes, 'RTG')
搜索兴趣点
从 POI 或地址搜索定义 KML 点元素。
search_poi()
search_poi(poi, name=None, headers=None, attributes=None, style_to_use=None, hidden=False):
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
点 | 细绳 | 相当于在搜索栏中键入以定位 POI 或地址的字符串。 |
姓名 | 细绳 | 赋予点要素的名称。该名称将用于标记。 |
可选参数
范围 | 类型 | 描述 |
---|---|---|
姓名 | 细绳 | 赋予点要素的名称。该名称将用于标记。如果未提供名称,则“poi”参数的值将用作点的名称。 |
标题 | 列表 | 点要素的属性标题列表 |
属性 | 列表 | 点要素的属性列表。 |
style_to_use | 细绳 | 要使用的名称point_style() (默认 = None )。 |
隐 | 布尔 | 值True 或False 位置False 表示该点将可见。(默认 = False )。 |
返回
返回 | 类型 | 描述 |
---|---|---|
地标 | 目的 | 表示 KML 地标的 XML 元素。 |
例子
从 POI 和地址创建一个点。
import kmlb
# CREATE A POINT FROM A POI
bos_common = kmlb.search_poi('Boston Common, Boston, MA')
# CREATE A POINT FROM AN ADDRESS
ss = kmlb.search_poi('700 Atlantic Avenue, Boston, MA', name='South Station')
# WRITE KML FILE
kmlb.kml('Boston Landmarks', # KML name
[bos_common, ss], # Features
r'C:\Users\UserName\Desktop\KMLB_Tutorial.kml' # Export path
)
线
定义 KML 线元素。
line()
line(coords, name, headers=None, attributes=None, altitude_mode="CTG", style_to_use=None, hidden=False, follow_terrain=True, extrude_to_ground=False)
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
坐标 | 列表 | 坐标集列表:[[X1, Y1, Z1], [X2, Y2, Z2]] |
姓名 | 细绳 | 赋予线要素的名称。 |
可选参数
范围 | 类型 | 描述 |
---|---|---|
标题 | 列表 | 线要素的属性标题列表 |
属性 | 列表 | 线要素的属性列表。 |
海拔模式 | 细绳 | 缩写高度模式选项之一:CTG , RTG , ABS (默认 = CTG ) |
style_to_use | 细绳 | 要使用的名称line_style() (默认 = None )。 |
隐 | 布尔 | 值True 或True 位置True 表示该点将可见。(默认 = True )。 |
跟随地形 | 布尔 | 确定线是否将遵循地球的地形和曲线。(默认 = True )。 |
extrude_to_ground | 布尔 | 确定线的顶点是否向地球中心的中心拉伸。(默认 = False )。 |
相机 | 元素 | KML 'LookAt' 元素。(默认 = None ) |
返回
返回 | 类型 | 描述 |
---|---|---|
地标 | 目的 | 表示 KML 地标的 XML 元素。 |
关于一条线
定义 a 与定义 aline()
非常相似,point()
主要区别在于坐标(coords)参数在传递给函数之前如何格式化line()
。一条线由两个坐标集组成——一个起点和一个终点。一条折线由三个或更多坐标集组成 - 起点、中点和终点。在 KMLB 包中,该line()
函数可以接受线和折线的坐标集。
要定义一条线,请在其中放置两个 [X, Y, Z] 坐标集,[]
如下所示:
line_coords = [[X1, Y1, Z1], [X2, Y2, Z2]]
要定义折线,请在其中放置三个或更多坐标集,[]
如下所示:
polyline_coords = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3]]
要使用的线条样式(可选)参数是要应用于线条的样式的名称。线条的样式由line_style()
函数定义。
如果一条线或多段线的两个顶点相距很远,则它们之间的最短距离将穿过地球。同样,如果一座山位于一条线的两个顶点之间,则这条线将穿过这座山而不是越过它。为避免映射线穿过地球(或可能位于顶点之间的任何地形),请将跟随地形(可选)参数设置为True
。
如果要绘制的线高于地球表面,则可以用颜色填充线下方和地球表面上方的区域。如果将extrude to ground(可选)参数设置为True
,则将显示中定义的extrude_colorlines_style()
。
例子
未应用样式的折线。
# Define a polyline that marks the path from Boston's Custom House Tower to the Boston Aquarium
# Z-coord is set to zero since altitude mode will be 'CTG'
coords = [[-71.053568, 42.359053, 0],
[-71.053266, 42.359099, 0],
[-71.053289, 42.359289, 0],
[-71.050779, 42.359672, 0],
[-71.050784, 42.359200, 0],
[-71.050429, 42.359002, 0],
[-71.049882, 42.359063, 0]]
name = 'Path to Aquarium'
attribute_titles = ['City', 'Starting Point', 'Ending Point']
attributes = ['Boston', 'Custom House Tower', 'Boston Aquarium']
# Define the line
placemark = kmlb.line(coords, name, attribute_titles, attributes)
多边形
定义 KML 多边形元素。
polygon()
polygon(coords, name, headers=None, attributes=None, altitude_mode="CTG", style_to_use=None, hidden=False, follow_terrain=True, extrude_to_ground=False)
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
坐标 | 列表 | 形成环(外环/内环)的坐标集列表。 |
姓名 | 细绳 | 赋予面要素的名称。 |
可选参数
范围 | 类型 | 描述 |
---|---|---|
标题 | 列表 | 面要素的属性标题列表 |
属性 | 列表 | 面要素的属性列表。 |
海拔模式 | 细绳 | 缩写高度模式选项之一:CTG , RTG , ABS (默认 = CTG ) |
style_to_use | 细绳 | 要使用的名称polygon_style() (默认 = None )。 |
隐 | 布尔 | 值True 或True 位置True 表示该点将可见。(默认 = True )。 |
跟随地形 | 布尔 | 确定多边形的线段是否遵循地球的地形和曲线。(默认 = True )。 |
extrude_to_ground | 布尔 | 确定多边形的顶点是否向地球中心的中心拉伸。(默认 = False )。 |
相机 | 元素 | KML 'LookAt' 元素。(默认 = None ) |
返回
返回 | 类型 | 描述 |
---|---|---|
地标 | 目的 | 表示 KML 地标的 XML 元素。 |
关于多边形
Apolygon()
由一个外圈和任意数量的内圈定义。每个环类似于一条折线,唯一的区别是环的第一个和最后一个坐标集必须相互匹配。每个环的第一个和最后一个坐标集需要匹配,以便折线“闭合”并形成一个多边形。这样,一个三角形将由四个顶点/坐标集定义。每个环必须包含至少三个不同的坐标集,第一组和最后一组相互匹配。
- 外环:形成多边形的外边界。一个多边形只能定义一个外环。
- 内环:在多边形的外环内形成一个内孔。一个多边形可以定义任意数量的内环。
多边形的结构如下:
Polygon = [OuterRing, InnerRing1, InnerRing2, ....]
内圈是可选的。多边形的几何形状可以只用一个外环来定义,如下所示:
Polygon = [OuterRing]
要定义多边形的外环或内环,请在其中放置至少四个 [X, Y, Z] 坐标集,[]
如下所示:
ring_coords = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3], [X1, Y1, Z1]]
要定义没有任何内部孔的多边形:
outer_ring = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3], [X1, Y1, Z1]]
polygon_coords = [outering]
要定义具有两个内部孔的多边形:
outer_ring = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3], [X1, Y1, Z1]]
inner_ring1 = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3], [X1, Y1, Z1]]
inner_ring2 = [[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3], [X1, Y1, Z1]]
polygon_coords = [outering, inner_ring1, inner_ring2]
例子
带孔且未应用样式的多边形。
# Define a polygon that outlines a portion of the Greenway with a hole for Rings Fountain
# Define a polygon's parameters ahead of defining the polygon.
# Z-coord is set to zero since altitude mode will be 'CTG'
outer_ring = [[-71.052336,42.359485,0],
[-71.052333,42.359422,0],
[-71.052153,42.358787,0],
[-71.052110,42.358758,0],
[-71.052049,42.358746,0],
[-71.051735,42.358797,0],
[-71.051664,42.358840,0],
[-71.051658,42.358890,0],
[-71.051837,42.359527,0],
[-71.051865,42.359551,0],
[-71.051915,42.359569,0],
[-71.052288,42.359514,0],
[-71.052336,42.359485,0]]
inner_ring = [[-71.052012,42.358864,0],
[-71.051735,42.358910,0],
[-71.051796,42.359109,0],
[-71.052071,42.359065,0],
[-71.052012,42.358864,0]]
coords = [outer_ring, inner_ring]
name = 'Rings Fountain on the Greenway'
attribute_titles = ['City', 'Park']
attributes = ['Boston', 'Greenway']
# Define the polygon
placemark = kmlb.polygon(coords, name, attribute_titles, attributes)
样式函数
样式用于自定义要在地图上显示的要素的外观。注意:一旦定义了样式,就可以根据需要在尽可能多的适用功能上使用它。
点样式
定义可应用于点要素的 KML 样式。
point_style()
point_style(name, icon="http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png", color=('#ffff00', 100), scale=1.2, label_color=('#ffffff', 100), label_size=1.0)
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
姓名 | 细绳 | 样式的名称。该名称将用于引用定义的样式。注意:该名称在 KML 文档中必须是唯一的。 |
可选参数
点的默认样式是带有白色标签的黄色圆圈。
范围 | 类型 | 描述 |
---|---|---|
图标 | 细绳 | 用于在地图上标记点的图标的 URL。 |
颜色 | 元组 | 定义图标的颜色和不透明度。颜色用十六进制颜色代码定义。不透明度用 0 到 100 之间的整数定义。示例:('#a2d402', 100) |
规模 | 漂浮 | 点标记的图标大小。(默认 = 1.2`) |
标签颜色 | 元组 | 定义点标签的颜色和不透明度。 |
标签尺寸 | 漂浮 | 点标签的文本大小。(默认 = 1.0`) |
返回
返回 | 类型 | 描述 |
---|---|---|
风格 | 目的 | 表示 KML 样式定义的 XML 元素。 |
关于点的样式
每个定义的样式都需要一个对正在创建的 KML 文档唯一的名称。除了name之外,其他每个point_style()
参数在创建点样式时都是可选的。默认样式为带有白色标签的黄色圆圈。
例子
应用了默认样式的点。
# Define style
pt_style = kmlb.point_style('Default Point Style')
# Defining the point's arguments ahead of defining the point
coords = [-71.053568, 42.359053, 151]
name = 'Custom House Tower'
attribute_titles = ['City', 'Building', 'Height (M)']
attributes = ['Boston', 'Custom House Tower', '151']
# Define point using default style.
placemark = kmlb.point(coords, name, attribute_titles, attributes, 'RTG', 'Default Point Style')
应用了自定义样式的点。
# Define a custom blue square style
pt_style = kmlb.point_style('Blue Square',
'http://maps.google.com/mapfiles/kml/shapes/square.png',
("#0251fc", 100))
# Point Arguments
coords = [-71.053568, 42.359053, 151]
name = 'Custom House Tower'
attribute_titles = ['City', 'Building', 'Height (M)']
attributes = ['Boston', 'Custom House Tower', '151']
# Define point using default style.
placemark = kmlb.point(coords, name, attribute_titles, attributes, 'RTG', 'Blue Square')
线型
定义可应用于线要素的 KML 样式。
line_style()
line_style(name, color=('#ff0000', 100), width=3.0, extrude_color=('#34c9eb', 35))
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
姓名 | 细绳 | 样式的名称。该名称将用于引用定义的样式。注意:该名称在 KML 文档中必须是唯一的。 |
可选参数
线条的默认颜色是红色,带有浅透明的蓝色挤压颜色。
范围 | 类型 | 描述 |
---|---|---|
颜色 | 元组 | 定义线条的颜色和不透明度。颜色用十六进制颜色代码定义。不透明度用 0 到 100 之间的整数定义。示例:('#a2d402', 100) |
宽度 | 漂浮 | 线的粗细。(默认 = 3.0`) |
挤出颜色 | 元组 | 定义线条下方区域的颜色和不透明度。注意:仅extrude_to_ground 在功能参数line() 设置为时True 显示,并且仅对地面以上的部分线路显示。 |
返回
返回 | 类型 | 描述 |
---|---|---|
风格 | 目的 | 表示 KML 样式定义的 XML 元素。 |
关于线条的样式
每个定义的样式都需要一个对正在创建的 KML 文档唯一的名称。除了name之外,其他每个line_style()
参数在创建线型时都是可选的。线条的默认颜色是红色,带有浅透明的蓝色挤压颜色。
例子
应用了自定义样式的折线。
# Define a custom yellow line style
ln_style = kmlb.line_style('Yellow Line', ('#fcce02', 100))
# Line arguments
coords = [[-71.053568, 42.359053, 0],
[-71.053266, 42.359099, 0],
[-71.053289, 42.359289, 0],
[-71.050779, 42.359672, 0],
[-71.050784, 42.359200, 0],
[-71.050429, 42.359002, 0],
[-71.049882, 42.359063, 0]]
name = 'Path to Aquarium'
attribute_titles = ['City', 'Starting Point', 'Ending Point']
attributes = ['Boston', 'Custom House Tower', 'Boston Aquarium']
# Define the line
placemark = kmlb.line(coords, name, attribute_titles, attributes, style_to_use='Yellow Line')
多边形样式
定义可应用于面要素的 KML 样式。
polygon_style()
polygon_style(name, fill_color=('#03cafc', 40), outline_color=('#fcdf03', 100), outline_width=3.0)
参数:
必需参数
范围 | 类型 | 描述 |
---|---|---|
姓名 | 细绳 | 样式的名称。该名称将用于引用定义的样式。注意:该名称在 KML 文档中必须是唯一的。 |
可选参数
多边形的默认填充颜色是带有纯黄色轮廓的浅透明蓝色。
范围 | 类型 | 描述 |
---|---|---|
填色 | 元组 | 定义多边形填充颜色的颜色和不透明度。颜色用十六进制颜色代码定义。不透明度用 0 到 100 之间的整数定义。示例:('#a2d402', 100) |
轮廓颜色 | 元组 | 定义多边形轮廓颜色的颜色和不透明度。 |
轮廓宽度 | 漂浮 | 轮廓厚度。(默认 = 1.0`) |
返回
返回 | 类型 | 描述 |
---|---|---|
风格 | 目的 | 表示 KML 样式定义的 XML 元素。 |
关于多边形的样式
每个定义的样式都需要一个对正在创建的 KML 文档唯一的名称。除了name之外,其他每个polygon_style()
参数在创建多边形样式时都是可选的。多边形的默认填充颜色是带有纯黄色轮廓的浅透明蓝色。
例子
应用了自定义样式的多边形。
# 定义一个自定义的紫色多边形样式
poly_style = kmlb . polygon_style ( '紫色多边形' , ( '#aaaaff' , 60 ), ( '#5500ff' , 100 ), 4 )
#polygon参数outer_ring = [ [ - 71.052336,42.359485,0 ] ,[ - 71.052333,42.359422,0 ] ,[ - 71.052153,42.358787,0 ] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , [ - 71.051735