Skip to main content

简单的 Google 地球 KML 生成器

项目描述



派皮 PyPI - Python 版本 PyPI - 许可证

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)。
布尔 TrueFalse位置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)。
布尔 TrueFalse位置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)。
布尔 TrueTrue位置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)。
布尔 TrueTrue位置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