如何显示多个地标和路径?

发布于 2024-11-08 06:10:26 字数 793 浏览 3 评论 0原文

我正在使用 PyKml 模块在我的 Python 脚本中形成 kml。我想显示由坐标数组组成的路径,并将所有点显示为地标。目前,我正在尝试(没有成功)按照路径看起来不错的方式执行此操作

 doc = K.kml(
        K.Document(
            K.Placemark(
                 K.Point(
                     K.name("pl1"),
                    K.coordinates("52.4858, 25.9218, 1051.05105105")
                ) 
            ),
            K.Placemark(
                K.name("path1"),
                K.LineStyle(
                    K.color(0x7f00ffff),
                    K.width(10)
                ),
                K.LineString(
                    K.coordinates(
                        coord_str
                    )
                )
            )
        )
    )

,但是当我开始添加地标时,Google 地图仅显示第一个。我应该使用什么来显示路径上的所有地标? 我是否需要某种元编程(即在对象定义中自动添加地标)?或者也许还有别的什么?

I'm using PyKml module in order to form kml inside my Python script. I want to display path which consists of array of coordinates and also display all points as placemarks. Currently, I'm trying (without success) to do it following way

 doc = K.kml(
        K.Document(
            K.Placemark(
                 K.Point(
                     K.name("pl1"),
                    K.coordinates("52.4858, 25.9218, 1051.05105105")
                ) 
            ),
            K.Placemark(
                K.name("path1"),
                K.LineStyle(
                    K.color(0x7f00ffff),
                    K.width(10)
                ),
                K.LineString(
                    K.coordinates(
                        coord_str
                    )
                )
            )
        )
    )

Path looks OK, but when I start adding Placemarks, Google Maps displays only first one. What should I use to display all Placemarks on my path?
Do I need some sort of metaprogramming(i.e. add placemarks in object definition automatically)? Or perhaps something else?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

去了角落 2024-11-15 06:10:26

这应该允许您迭代对象并将每个点与其终止的线关联起来:

from pykml.factory import KML_ElementMaker as K
from lxml import etree

#line_points here comes from a geojson object
data = json.loads(open('tib.json').read())
line_points = data['features'][0]['geometry']['coordinates']

_doc = K.kml()

doc = etree.SubElement(_doc, 'Document')

for i, item in enumerate(line_points):
    doc.append(K.Placemark(
        K.name('pl'+str(i+1)),
        K.Point(
            K.coordinates(
                str(item).strip('[]').replace(' ', '')
                )
        )
    )
)

doc.append(K.Placemark(
    K.name('path'),
    K.LineStyle(
        K.color('#00FFFF'),
        K.width(10)
    ),
    K.LineString(
        K.coordinates(
            ' '.join([str(item).strip('[]').replace(' ', '') for item in line_points])
        )
    )
))

s = etree.tostring(_doc)

print s

其中 line_points 是这样的列表的列表,其坐标为:

[[-134.15611799999999, 34.783318000000001, 0],
 [-134.713527, 34.435267000000003, 0],
 [-133.726201, 36.646867, 0],
 [-132.383655, 35.598272999999999, 0],
 [-132.48034200000001, 36.876308999999999, 0],
 [-131.489846, 36.565426000000002, 0],...

这里 (http://sfgeo.org/data/contrib/tiburon.html) 是一个输出示例,jsfiddle 在这里: http://jsfiddle.net/bvmou/aTkpN/7/ 但有一个问题公开查看 api 密钥时,请在本地计算机上尝试。

This should let you iterate over the objects and associate each point with the lines it terminates:

from pykml.factory import KML_ElementMaker as K
from lxml import etree

#line_points here comes from a geojson object
data = json.loads(open('tib.json').read())
line_points = data['features'][0]['geometry']['coordinates']

_doc = K.kml()

doc = etree.SubElement(_doc, 'Document')

for i, item in enumerate(line_points):
    doc.append(K.Placemark(
        K.name('pl'+str(i+1)),
        K.Point(
            K.coordinates(
                str(item).strip('[]').replace(' ', '')
                )
        )
    )
)

doc.append(K.Placemark(
    K.name('path'),
    K.LineStyle(
        K.color('#00FFFF'),
        K.width(10)
    ),
    K.LineString(
        K.coordinates(
            ' '.join([str(item).strip('[]').replace(' ', '') for item in line_points])
        )
    )
))

s = etree.tostring(_doc)

print s

where line_points is a list of lists like this, with the coordinates:

[[-134.15611799999999, 34.783318000000001, 0],
 [-134.713527, 34.435267000000003, 0],
 [-133.726201, 36.646867, 0],
 [-132.383655, 35.598272999999999, 0],
 [-132.48034200000001, 36.876308999999999, 0],
 [-131.489846, 36.565426000000002, 0],...

Here (http://sfgeo.org/data/contrib/tiburon.html) is an example of output, jsfiddle of it here: http://jsfiddle.net/bvmou/aTkpN/7/ but there is a problem with the api key when viewed publicly, try on your local machine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文