谷歌地图仅根据 styleUrl 字符串语法更改地标图标

如何解决谷歌地图仅根据 styleUrl 字符串语法更改地标图标

我用 python 编写了一个简单的脚本,它使用 simplekml 包将 CSV 文件转换为 KML 文件。它根据我的数据值之一为我的点着色。

我的问题是:我尽量使用最小的图标,因为我的地标彼此非常接近。这在样式 ID 为“icon-1739-7CB342”时效果很好,但在样式 ID 为“2”时失败(Google 我的地图呈现下降)

结果是 simplekml 生成认 KML 无法用小点渲染,因为我无法控制 ID。

我的代码

import simplekml
import pandas
import sys

infile = sys.argv[1]
outfile = infile.split(".")[0]+".kml"


def genkml():
    kml = simplekml.Kml()
    ok = simplekml.Style()
    ok.iconstyle.color = 'ff42b37c'  # Green
    ok.iconstyle.icon.href = 'https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png'
    ok.iconstyle.scale = 1

    rc = simplekml.Style()
    rc.iconstyle.color = 'ff00eaff'  # Yellow
    rc.iconstyle.icon.href = 'https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png'
    rc.iconstyle.scale = 1

    seco = simplekml.Style()
    seco.iconstyle.color = 'ff0051e6'  # Red
    seco.iconstyle.icon.href = 'https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png'
    seco.iconstyle.scale = 1
    
    df = pandas.read_csv(infile)
    cuenta = 1
    for lon,lat,desc in zip(df["longitude"],df["latitude"],df["desc"]):
        nogal = kml.newpoint()
        nogal.name = "Nogal"+"-"+str(cuenta)
        nogal.description = desc.upper()
        nogal.coords = [(lon,lat)]
        if "OK" in nogal.description:
            nogal.style = ok
        if "RC" in nogal.description:
            nogal.style = rc
        if "SECO" in nogal.description:
            nogal.style = seco
        cuenta += 1
    kml.save(outfile)
    print(kml.kml())

if __name__ == "__main__":
    genkml()

我的测试输入文件

type,date time,latitude,longitude,accuracy(m),altitude(m),geoid_height(m),speed(m/s),bearing(deg),sat_used,sat_inview,name,desc
W,2021-05-30 21:08:27,28.66231833,-100.83812667,1,257.122,-23.722,0.000,28,33,Q31 ok
W,2021-05-30 21:11:56,28.66243667,-100.83811000,256.922,26,35,O32 ok

生成的 KML(原始):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
    xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="1">
        <Style id="2">
            <IconStyle id="3">
                <color>ff42b37c</color>
                <colorMode>normal</colorMode>
                <scale>1</scale>
                <heading>0</heading>
                <Icon id="4">
                    <href>https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png</href>
                </Icon>
            </IconStyle>
        </Style>
        <Placemark id="12">
            <name>Nogal-1</name>
            <description>Q31 OK</description>
            <styleUrl>#2</styleUrl>
            <Point id="11">
                <coordinates>-100.83812667,0.0</coordinates>
            </Point>
        </Placemark>
        <Placemark id="14">
            <name>Nogal-2</name>
            <description>Q32 OK</description>
            <styleUrl>#2</styleUrl>
            <Point id="13">
                <coordinates>-100.83811,0.0</coordinates>
            </Point>
        </Placemark>
    </Document>
</kml>

修改后的 KML,具有手动添加的样式(ID = “icon-1739-7CB342”),对于 Nogal-2 呈现为一个小点,对于 Nogal-1 呈现为一个下降(请注意唯一的区别样式之间是 ID):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
    xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="1">
        <Style id="2">
            <IconStyle>
                <color>ff42b37c</color>
                <scale>1</scale>
                <Icon>
                    <href>https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png</href>
                </Icon>
            </IconStyle>
        </Style>
        <Style id="icon-1739-7CB342">
            <IconStyle>
                <color>ff42b37c</color>
                <scale>1</scale>
                <Icon>
                    <href>https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png</href>
                </Icon>
            </IconStyle>
        </Style>
        <Placemark id="12">
            <name>Nogal-1</name>
            <description>Q31 OK</description>
            <styleUrl>#2</styleUrl>
            <Point id="11">
                <coordinates>-100.83812667,0.0</coordinates>
            </Point>
        </Placemark>
        <Placemark id="14">
            <name>Nogal-2</name>
            <description>Q32 OK</description>
            <styleUrl>#icon-1739-7CB342</styleUrl>
            <Point id="13">
                <coordinates>-100.83811,0.0</coordinates>
            </Point>
        </Placemark>
    </Document>
</kml>

The rendered image by Google My Maps. I would like to use Nogal-2's icon without having to manually add the icon-1739-7CB342 style

解决方法

尝试更改您的样式 ID,以字母开头。根据 XML 规范(因此在 KML 中),ID 属性不能以数字开头。如果这不能解决问题,请告诉我们,我可以仔细查看您的 KML。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?