【问题标题】:how to set shape editabe from kml如何从kml设置形状editabe
【发布时间】:2014-02-14 08:21:54
【问题描述】:

我在我的地图 api 中加载一个 kml 文件,并且我在点击事件时使用此代码。

google.maps.event.addListener(ctaLayer, 'click', function (kmlEvent) {
    setSelection(kmlEvent.featureData.name);                            
    //alert(kmlEvent.featureData.name);
    //showInContentWindow(text);
});

这就是调用函数

function setSelection(shape) {
    clearSelection();
    selectedShape = shape;
    shape.setEditable(true);
}

不,我有 2 个问题,KML 文件给了我 2 个多边形,每个多边形都有不同的名称。 Testerjahoor。但是当我点击jahoor 时,它总是给我多边形Tester。 为什么我不能选择彼此不同的?

第二个问题是,我无法再次将 kml 中的多边形设置为可编辑。 它给了我错误:Uncaught TypeError: Object Tester has no method 'setEditable'

有人知道我做错了什么吗?可以在堆栈或来自 google api 的文档中找到它

kml 文件片段:

<Placemark id="Tester">
    <styleUrl>#transYellowPolyActive</styleUrl>
    <name>Tester</name>
    <Polygon>
        <outerBoundaryIs>
            <LinearRing>
            <tessellate>0</tessellate>
            <coordinates>                                           6.30889892578125,53.28820543193896 6.29791259765625,53.28410053532493 6.233367919921875,53.21096737507053 6.5093994140625,53.19698389904798 6.50390625,53.27096221595853
            </coordinates>
            </LinearRing>
        </outerBoundaryIs>
    </Polygon>
</Placemark>
<Placemark id="jahoor">
    <styleUrl>#transYellowPolyActive</styleUrl>
        <name>jahoor</name>
            <Polygon>
            <outerBoundaryIs>
                <LinearRing>
                <tessellate>0</tessellate>
                <coordinates>                                           6.168479919433594,53.30318495818702 6.143760681152344,53.29579845109269 6.138267517089844,53.27281003615208 6.195259094238281,53.2707568976735 6.2010955810546875,53.29867113343524
                </coordinates>
                    </LinearRing>
            </outerBoundaryIs>
        </Polygon>
    </Placemark>

【问题讨论】:

  • 错误Object Tester has no method 'setEditable' 可能是因为您在没有使用new 的情况下调用了Tester 构造函数。另一个听起来像闭包问题但没有代码很难说。
  • 你能解释一下你的意思吗?请
  • new: 你的对象 Tester 显然已经定义好了。如果不是,您会收到有关未定义对象的错误。它似乎没有正确初始化。例如,原因可能是您没有调用new name.pkg.Tester(),而是调用了name.pgk.Tester()。这只是一个猜测。
  • 它给了我一个新的错误:Uncaught TypeError: string is not a function
  • 你能显示相关代码吗?没有它就很难提供帮助。

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


【解决方案1】:

KmlLayer 中的多边形无法编辑,它们被渲染为图块,而不是原生多边形。如果您使用第三方 KML 解析器(如 geoxml3geoxml-v3)将它们呈现为原生 Google Maps Javascript API v3 多边形,则可以使它们可编辑。但请注意,这将比基于图块的渲染效率低,尤其是对于复杂的多边形或大量多边形。

如果我修改您的 kml 以使其有效:

<kml>
<Document>
<Placemark id="Tester">
    <styleUrl>#transYellowPolyActive</styleUrl>
    <name>Tester</name>
    <Polygon>
        <outerBoundaryIs>
            <LinearRing>
            <tessellate>0</tessellate>
            <coordinates>                                           6.30889892578125,53.28820543193896 6.29791259765625,53.28410053532493 6.233367919921875,53.21096737507053 6.5093994140625,53.19698389904798 6.50390625,53.27096221595853
            </coordinates>
            </LinearRing>
        </outerBoundaryIs>
    </Polygon>
</Placemark>
<Placemark id="jahoor">
    <styleUrl>#transYellowPolyActive</styleUrl>
        <name>jahoor</name>
            <Polygon>
            <outerBoundaryIs>
                <LinearRing>
                <tessellate>0</tessellate>
                <coordinates>                                           6.168479919433594,53.30318495818702 6.143760681152344,53.29579845109269 6.138267517089844,53.27281003615208 6.195259094238281,53.2707568976735 6.2010955810546875,53.29867113343524
                </coordinates>
                    </LinearRing>
            </outerBoundaryIs>
        </Polygon>
    </Placemark>
</Document>
</kml>

并将其粘贴到this page

然后点击“parse KML to map”,它给了我两个可编辑的多边形。

或者直接点击this map上的“解析KML到地图”

【讨论】:

  • 嗨,我的 kml 是有效的,你在我的问题中看到的是它的一部分。所以如果我想更改我的 kml 多边形,我需要创建一个与 geoxml 一起使用的新系统?
  • 如果您的 KML 不太复杂,这是实现目标的一种方法。您也可以使用 FusionTables/FusionTablesLayer(使用 FusionTablesLayer 显示不可编辑的多边形,例如 geoxml3 将 KML 解析为您需要修改的原生可编辑多边形)。
  • 我这样做的方式是,用户可以绘制一个多边形,从弹出窗口中填写一些字段,然后将其安全地保存在数据库中。然后 api 使用数据库中的数据打开 kml generetad 文件,并在地图上返回 te 多边形。但是当用户点击多边形时我需要它是可编辑的。
  • 那么我建议您从数据库中获取多边形的数据,并在您的用户想要编辑它时使用它来生成可编辑的多边形。原生 Google Maps Javascript API v3 多边形将出现在 KmlLayer 上方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多