【问题标题】:Javascript - onclick problem when 2 polygon are returnedJavascript - 返回 2 个多边形时的 onclick 问题
【发布时间】:2019-12-04 08:47:19
【问题描述】:

我只是 javascript 的初学者。我尝试使用波兰 WKT 数据库更改在传单中生成地图的方法。它有效,但仅在返回 1 个位置时才有效。当返回更多位置时,onclick 不起作用,f.ex。当您搜索“Koty 4”时 - 有 2 个村庄的地块编号为 4。我做错了什么?


        function load(){
            map = L.map('mapa').setView([52, 19], 6);
            L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
                attribution: '&copy; <a href="https://osm.org/copyright">OpenStreetMap</a> contributors'
            }).addTo(map);
            var wmsLayer = L.tileLayer.wms('https://integracja.gugik.gov.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow', {
                layers: 'geoportal,dzialki,numery_dzialek,budynki',format: 'image/png', transparent: true,
            }).addTo(map);
            window.osmMap = map;
        }

        function addPolygon(points){
            var gPoints = new Array();
            var _p = points.split(',');
            var cX = 0, cY = 0;
            var p0 = null;
            var gPoints2 = new Array();
            var geojson_pgons = Terraformer.WKT.parse(geomWKT);
            var xMin = 1000, yMin = 1000, xMax = -1000, yMax = -1000;
            for(var i=0;i<_p.length;i++){
                var point = _p[i].split(' ');
                if(p0==null) p0 = point;
                cX += parseFloat(point[0]);
                cY += parseFloat(point[1]);
                xMin = Math.min(xMin,point[0]);
                xMax = Math.max(xMax,point[0]);
                yMin = Math.min(yMin,point[1]);
                yMax = Math.max(yMax,point[1]);
                gPoints.push(new Array(point[1],point[0]));
            }
                map.eachLayer(function(polygon) {
                if( polygon instanceof L.GeoJSON )
                map.removeLayer(polygon);
                }); 
            var polygon = L.geoJson(geojson_pgons, {}).addTo(window.osmMap);
            var bounds = geojson_pgons.bbox();
            window.osmMap.fitBounds([ [bounds[1], bounds[0]], [bounds[3], bounds[2]] ]);    

【问题讨论】:

    标签: javascript ajax leaflet wkt


    【解决方案1】:

    将您的代码更改为:

    var fg;
    
    function load(){
    //...
        fg = L.featureGroup().addTo(map);
    }
    
    function addPolygon(points){
                var gPoints = new Array();
                var _p = points.split(',');
    
                fg.clearLayers() //Deleting the old polygons
                var poly = L.polygon([]).addTo(fg);
    
                for(var i=0;i<_p.length;i++){
                    var point = _p[i].split(' ');
                    poly.addLatLng([point[1],point[0]]);
                }
    
                var bounds = poly.getBounds();
                window.osmMap.fitBounds(bounds);
            }
    

    如果您将多边形添加到要素组,您可以调用 fg.clearLayers() 从地图中删除旧多边形。

    【讨论】:

    • 非常感谢 - 它有效,但是...... 多面体有问题 - 请检查 f.e. 100301_2.0010.AR_3.449/1 - 它不起作用。使用 terraformer 时 - 它有效!知道如何解决吗?
    • 我为您创建了一个工作示例jsfiddle.net/falkedesign/d8hqv7zt。我希望我能得到一个支持并检查这项工作的答案;)
    • 非常感谢您的帮助。你很棒,一切都很好
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2016-10-13
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多