Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps api 3 如何从kml设置形状编辑器_Google Maps Api 3_Kml_Polygon - Fatal编程技术网

Google maps api 3 如何从kml设置形状编辑器

Google maps api 3 如何从kml设置形状编辑器,google-maps-api-3,kml,polygon,Google Maps Api 3,Kml,Polygon,我在我的地图api中加载了一个kml文件,我在点击事件中使用了这段代码 google.maps.event.addListener(ctaLayer, 'click', function (kmlEvent) { setSelection(kmlEvent.featureData.name); //alert(kmlEvent.featureData.name); //showInContentWindow(text

我在我的地图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);
}
不,我有两个问题,KML文件给了我两个多边形,每个多边形都有不同的名称。 测试仪和jahoor。但当我点击jahoor时,它总是给我多边形测试器。 为什么我不能选择它们彼此不同

第二个问题是,我无法再次从kml设置多边形可编辑。 它给了我一个错误:未捕获类型错误:Object Tester没有“setEditable”方法

有人知道我做错了什么吗?可以在堆栈上或谷歌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>

KmlLayer中的多边形无法进行编辑,它们被渲染为平铺,而不是本地多边形。如果使用第三方KML解析器(如或)将它们呈现为本机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>
并将其粘贴到

然后单击parse KML进行映射,它会给我两个可编辑的多边形


或者只需单击parse KML映射到

错误对象Tester没有方法“setEditable”,可能是因为您调用Tester构造函数时没有使用新的方法。另一个听起来像是闭包问题,但是没有代码很难说。你能解释一下你的意思吗?请注意:您的对象测试仪显然已定义。否则,您将得到关于未定义对象的错误。它似乎没有正确初始化。例如,原因可能是您没有调用new name.pkg.Tester,而只是调用name.pgk.Tester。这只是一个猜测。它给了我一个新的错误:uncaughttypeerror:string不是函数。你能显示相关的代码吗?没有它很难帮助。嗨,我的kml是有效的,你在我的问题中看到的是它的一部分。。因此,如果我想更改我的kml多边形,我需要创建一个与geoxml一起工作的新系统?如果kml不太复杂,这是实现目标的一种方法。您可以使用FusionTables/FusionTablesLayer也可以使用FusionTablesLayer显示不可编辑的多边形,例如geoxml3将KML解析为需要修改的本地可编辑多边形。按照我的方法,用户可以绘制多边形,填写数据库中弹出框中的某些字段。然后api打开包含数据库数据的kml generetad文件,并返回地图上的te多边形。但是当用户单击多边形时,我需要它是可编辑的。然后我建议您从数据库中获取多边形的数据,并在用户想要编辑它时使用它生成可编辑的多边形。原生Google Maps Javascript API v3多边形将显示在KmlLayer上方。