与Leaflet协调反思问题

时间:2013-12-18 16:38:29

标签: javascript json leaflet

致敬所有人和节日快乐。 我在尝试用L.geoJson()绘制多边形图层时注意到一个有趣的行为怪癖。请考虑以下代码:

var polygonCoords = [
        {"type": "Feature",
        "properties": {"group": "Violations"},
        "geometry": {
            "type" : "Polygon",
            "coordinates": [[
                [-107.69348, 43.22519],
                [-105.48523, 42.99259],
                [-107.7594, 42.26105]
            ]]
       }
    }];

var polygons = L.polygon([
        [43.22519, -107.69348],
        [42.99259, -105.48523],
        [42.26105, -107.7594]
    ]);

现在,两者都在各自的背景下工作。我只是想知道为什么必须反映L.polygon()中的坐标矩阵,以便在传递到L.goeJson()时显示出人们期望的位置:

var jsonPoly = L.geoJson(polygonCoords, {
        style: function(feature) {
            if (feature.properties.group == "Violations") {
                 return {color: "#ff0000"};
            }
        }
    });

或者这是传单内的疏忽吗?另外,有没有办法用toGeoJson(多边形)自动化这种反射?

非常感谢。

1 个答案:

答案 0 :(得分:4)

创建geoJson图层时,坐标应符合GeoJSON标准(x,y,z或lng,纬度,高度)(GeoJSON position specs

如果您的坐标不是这种格式的GeoJSON字符串,您可以使用自定义coordsToLatLng函数创建GeoJSON图层,该函数将处理此标准格式的转换(Leaflet Doc)< / p>

如果您有一个多边形图层并希望将其添加到现有的GeoJSON要素组,则可以执行以下操作:

var polygons = L.polygon([
        [43.22519, -107.69348],
        [42.99259, -105.48523],
        [42.26105, -107.7594]
    ]);
var gg = polygons.toGeoJSON();
var jsonFeatureGroup = L.geoJson().addTo(map);
jsonFeatureGroup.addData(gg);
map.fitBounds(jsonFeatureGroup.getBounds());