在小叶中的标记之间绘制线 我正在尝试在传单中插入标记(由JSON数据生成)之间的线条。我看到了一个示例,但它与JSON数据不起作用。我可以看到标记,但没有出现。 var st ...

问题描述 投票:0回答:2

我的JSON数据:

{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ -70.219841, 8.6310997 ] }, "properties": { "id": 336, "id_user": 1, "id_device": 1, "timestamp": 1446571154, "date": "12:49PM 03-11-2015", "Latitude": 8.6310997, "Longitude": -70.219841, "speedKPH": 0, "heading": "", "Name": "N\/D", "City": "N\/D", "estatus": "Stop" } } ] } enter image description here

您可以通过在原始的geojson或由此产生的L.Geojson层上迭代以产生多系几何形状来做到这一点。这是一个简单的函数,它将将点的点层转换为可以传递到

L.geoJson

的坐标数组。

L.polyline
javascript leaflet geojson
2个回答
24
投票
这是一个小提琴,在某些合成的geojson数据上显示它:

http://jsfiddle.net/nathansnider/36TWHXUX/


确定您的geojson数据仅包含点几何形状,在定义
function connectTheDots(data){
    var c = [];
    for(i in data._layers) {
        var x = data._layers[i]._latlng.lat;
        var y = data._layers[i]._latlng.lng;
        c.push([x, y]);
    }
    return c;
}

window.geojson

成功函数之后,您应该能够使用它:

$.getJSON

如果您的Geojson数据更为复杂,则可能需要添加一些条件检查几何类型等,但这至少应该给您一个有关如何进行的一般想法。

Edit:
nathan的想法是正确的,从某种意义上说,您必须自己构建一条多线(标记之间的界线)。

要严格,当点列表仍然是一个数组时,您必须使用数据(假设数组顺序是要获得的线路连接的顺序)。这意味着您必须直接处理Geojson数据。

,例如,您会这样做:
pathCoords = connectTheDots(window.geojson);
var pathLine = L.polyline(pathCoords).addTo(map)


8
投票
1,用于polyline,多边形等,而

markers

用于点特征。 请参考传单

Tutorial

报道。

当您要指定传单应如何样式

1的样式

时,您确实应该构成一个容纳
Path选项的对象(例如第一行上的
function connectDots(data) { var features = data.features, feature, c = [], i; for (i = 0; i < features.length; i += 1) { feature = features[i]; // Make sure this feature is a point. if (feature.geometry === "Point") { c.push(feature.geometry.coordinates); } } return c; } L.polyline(connectDots(data)).addTo(map);
变量),但是您应该将其作为

style 选项style层,不在图标内。 当您要指定传单应该如何样式标记器

时,您确实可以设置一个特定的图标,该图标仅适用于点功能。您应该更好地使用

L.geoJson选项,因为该代码只能在点上应用,而不是试图将其应用于向量(例如没有方法pointToLayer

)。

最终,当您要执行适用于向量和标记的操作时,您会使用
setIcon
选项
来绑定弹出窗口。
因此,您最终会得到类似的东西:

onEachFeature

在评论中指出的是,每当您寻求其他人的帮助时,您都会更轻松(因此,您会得到更好,更快的支持),如果您花时间正确地陈述您的问题,并带有描述 /屏幕截图出错并发布一些干净的代码。客户端代码的一个很好的做法是在Jsfiddled上重现该问题。

我知道我来晚了,但我只是想帮助,尝试此代码👇🏿
var myIcon = L.icon({
    iconUrl: './images/mymarker.png',
    iconSize: [18, 28]
});

var geojson = L.geoJson(data, {

    style: style, // only applies to vectors.

    // only applies to point features
    pointToLayer: function(feature, latlng) {
        return L.marker(latlng, {icon: myIcon});
    },

    // will be run for each feature (vectors and points)
    onEachFeature: function(feature, layer) {
        layer.bindPopup(feature.properties.date + '<br />' + feature.properties.id);
    }

});

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.