【问题标题】:KML Entity Replacement in BalloonStyle Fails in GoogleMaps, But Not GoogleEarth气球样式的 KML 实体替换在谷歌地图中失败,但不是谷歌地球
【发布时间】:2012-11-23 18:18:11
【问题描述】:

在 GEarth 和 Google 地图中调试 KML 的时间太长了。 有人可以给我一个提示,为什么下面的“实体替换”在 GE 中可以正常工作,但在 GMaps 中失败。

我运行了 XMLValidate 并且文件很好,但是 [CDATA] 中的标签不会被 GoogleMaps API 替换,只有在 GEarth 中。我阅读了 BalloonStyle entity replacement 上的最佳实践 KML 文档,以及 OGC KML 2.2 standard 中令人麻木的描述,并调整和修剪了文件,但我仍然很难过。在以下情况下,我无法让实体替换在 GMaps API 中工作。

有什么想法吗? -谢谢

<?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" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <Document>
        <name>ParcelsJoinedx.kml</name>
        <Style id="outline">
            <PolyStyle>
                <color>00ff0000</color>
                <fill>1</fill>
                <outline>1</outline>
            </PolyStyle>
            <BalloonStyle>
                <bgColor>ffffffff</bgColor>
                <text>
                <![CDATA[
                    <head>
                    <title></title>
                    <STYLE TYPE="text/css">
                    <!-- TD{font-family: Arial; font-size: 9pt;} --->
                    </STYLE>
                    </head>
                    <body>
                      <table >
                      <tr><td valign='top'><font color="#aa0000">$[ParcelJoined/Location/displayName]:</font></td><td>$[ParcelJoined/Location]</td>
                      <tr><td><font color="#aa0000">$[ParcelJoined/ParcelID/displayName]:</font></td><td>$[ParcelJoined/ParcelID]</td>
                     </tr></table>
                     </body>
                     ]]>
                 </text>
            </BalloonStyle>
        </Style>
        <Schema name="ParcelJoined" id="ParcelJoinedID">
            <SimpleField type="string" name="Name"></SimpleField>
            <SimpleField type="string" name="Description"></SimpleField>
            <SimpleField type="string" name="Location">
                <displayName><![CDATA[<b>Location</b>]]></displayName>
            </SimpleField>
            <SimpleField type="string" name="ParcelID">
                <displayName><![CDATA[<b>ParcelID</b>]]></displayName>
            </SimpleField>
            <SimpleField type="string" name="Zone"></SimpleField>
            <SimpleField type="string" name="AssessArea"></SimpleField>
            <SimpleField type="string" name="Owner"></SimpleField>
            <SimpleField type="string" name="CoOwner"></SimpleField>
            <SimpleField type="string" name="Address1"></SimpleField>
            <SimpleField type="string" name="Address2"></SimpleField>
            <SimpleField type="string" name="City"></SimpleField>
            <SimpleField type="string" name="State"></SimpleField>
            <SimpleField type="string" name="ZIP"></SimpleField>
            <SimpleField type="string" name="AcctNum"></SimpleField>
            <SimpleField type="string" name="YearBuilt"></SimpleField>
            <SimpleField type="string" name="LandValue"></SimpleField>
            <SimpleField type="string" name="BldgValue"></SimpleField>
            <SimpleField type="string" name="OtherValue"></SimpleField>
            <SimpleField type="string" name="TotalValue"></SimpleField>
            <SimpleField type="string" name="MainBldgDesc"></SimpleField>
            <SimpleField type="string" name="StateCode"></SimpleField>
            <SimpleField type="string" name="SaleDate"></SimpleField>
            <SimpleField type="string" name="Rooms"></SimpleField>
            <SimpleField type="string" name="Beds"></SimpleField>
            <SimpleField type="string" name="Baths"></SimpleField>
        </Schema>
        <Folder>
            <name>ParcelJoinedFldr</name>
            <Placemark>
                <styleUrl>#outline</styleUrl>
                <ExtendedData>
                    <SchemaData schemaUrl="#ParcelJoinedID">
                        <SimpleData name="Location">68 WALCOTT AVE</SimpleData>
                        <SimpleData name="ParcelID">9-459</SimpleData>
                        <SimpleData name="Zone">R40$39</SimpleData>
                        <SimpleData name="AssessArea">3.72 AC</SimpleData>
                        <SimpleData name="Owner">CXXX, CXX R ET</SimpleData>
                        <SimpleData name="CoOwner">CXXX, GLXXA G</SimpleData>
                        <SimpleData name="Address1">32 EAST 88TH STREET</SimpleData>
                        <SimpleData name="Address2"></SimpleData>
                        <SimpleData name="City">NEW YORK</SimpleData>
                        <SimpleData name="State">NY</SimpleData>
                        <SimpleData name="ZIP">10021</SimpleData>
                        <SimpleData name="AcctNum">2421</SimpleData>
                        <SimpleData name="YearBuilt">1910</SimpleData>
                        <SimpleData name="LandValue">2036060</SimpleData>
                        <SimpleData name="BldgValue">479800</SimpleData>
                        <SimpleData name="OtherValue">1500</SimpleData>
                        <SimpleData name="TotalValue">2517360</SimpleData>
                        <SimpleData name="MainBldgDesc">CONVNTL</SimpleData>
                        <SimpleData name="StateCode">1100 - SEASONAL &amp; BEACH</SimpleData>
                        <SimpleData name="SaleDate">04/07/1995</SimpleData>
                        <SimpleData name="Rooms">0</SimpleData>
                        <SimpleData name="Beds">0</SimpleData>
                        <SimpleData name="Baths">4 Full / 0 H</SimpleData>
                    </SchemaData>
                </ExtendedData>
                <Polygon>
                    <outerBoundaryIs>
                        <LinearRing>
                            <coordinates>-71.363000752291924,41.489279023867283 -71.364928267362686,41.489246551445632 -71.364928271377551,41.48924655145035 -71.366127398895557,41.489226333780891 -71.366980322431843,41.489211945621989 -71.366980559667908,41.489218729506135 -71.366992415755973,41.489658359975031 -71.363335128398276,41.489691230204564 -71.36332242991972,41.489681182960041 -71.36320151947757,41.489583338563875 -71.363080572769988,41.489488329510586 -71.363012929798629,41.48940065703426 -71.363000855378388,41.489285011997865 -71.363000752291924,41.489279023867283</coordinates>
                        </LinearRing>
                    </outerBoundaryIs>
                </Polygon>
            </Placemark>
        </Folder>
    </Document>
</kml>

【问题讨论】:

    标签: google-maps google-maps-api-3 kml google-earth


    【解决方案1】:

    我认为,如果您使用简单的 &lt;ExtendedData&gt; 和 &lt;Data&gt; 元素以及或而不是 &lt;Schema&gt; 和 &lt;SchemaData&gt; 元素来提供数据,它可能会起作用。

    看一看,你还需要模式数据吗?您是否在其他需要将数据作为类型字符串的应用程序中使用 KML?

    Google 地球和 Google 地图会忽略类型数据,因此如果它对您没有其他用途,它只会让您的 kml 膨胀。

    您链接到的文档的前半部分处理了这个问题。

    【讨论】:

    • 感谢您的建议。我删除了所有 和 ,将其替换为 和 ,Entity Replacement 现在可以使用了。但这绝对不是理想的。我有数千个 元素,这些元素是作为来自个人地理数据库 (*.mdb) 的 ogr2ogr 的自动输出创建的。显然我必须重组 ogr2ogr 的自动输出...尴尬。
    • And... Google's Developer's Guide 关于使用 和 进行实体替换的说明中的示例可能不正确或至少不鼓励使用,这似乎很奇怪。将结构(类型化字段)与数据本身分开的“架构”的意义不就是一个理想的目标吗?
    • 我刚刚确认我上面引用的 Google 开发人员指南示例失败 - GMaps 不会替换实体标签:maps.google.com/…
    • 据我所知,您参考的指南提供了两个单独的示例。一个用于simple data 类型,一个用于typed data 使用模式。架构示例向您展示如何向使用/需要它的应用程序提供类型化数据。然而,谷歌地球和谷歌地图不需要或使用类型化的数据。我一直在使用 元素时遇到问题,除了一堆桌面 GIS 应用程序。我只是不认为谷歌网络地图支持它(虽然我不是 100% 确定这一点,这只是我自己测试它......)
    【解决方案2】:

    回答您关于为什么这在 Google 地图中不起作用的问题:&lt;Schema&gt; 和 &lt;SchemaData&gt; 均不受 Google 地图 API 的正式支持。完全支持&lt;Data&gt;,部分支持&lt;ExtendedData&gt; (reference)。

    该参考提供了一个表格,详细说明了 API 支持的 KML 功能。以下是相关行:

    +----------------+-----------------------+----------------------------+
    |  KML element   | Supported in the API? |         Comment            |
    +----------------+-----------------------+----------------------------+
    | <BalloonStyle> | partially             | only <text> is supported   |
    | <Data>         | yes                   |                            |
    | <ExtendedData> | partially             | untyped <Data> only, no    |
    |                |                       | <SimpleData> or <Schema>,  |
    |                |                       | and entity replacements of |
    |                |                       | the form $[dataName] are   |
    |                |                       | not supported.             |
    | <Schema>       | no                    |                            |
    | <SchemaData>   | no                    |                            |
    +----------------+-----------------------+----------------------------+
    

    如果链接断开,请参阅 Google Maps JavaScript API 开发人员文档中“KML 和 GeoRSS”指南的“支持的 KML 元素”部分。

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多