如何使用python在传单地图上绘制轨迹?

时间:2017-03-20 18:04:04

标签: python numpy leaflet geospatial folium

我正在处理数据框,如下所示。 x和y是轨迹随时间的墨卡托x,y坐标。具有相同VoyageID的行是属于相同轨迹的点。正如我们所看到的那样,所有0的行都将不同的轨迹分开。

        VoyageID      X             Y             Time
     27 2             -7.35857534   2.09175178     1.29471228
     28 2             -7.35863779   2.09167080     1.29471234
     29 2             -7.35882203   2.09156224     1.29471240
     30 2             -7.35908808   2.09147633     1.29471246
     31 2             -7.35941313   2.09134900     1.29471252
     32 2             -7.35970112   2.09123810     1.29471258
     33 0             0.0000000     0.0000000      0.0000000
     34 3             -7.34769342   2.09628155     1.29498270
     35 3             -7.34811254   2.09626864     1.29498282
     36 3             -7.34853711   2.09625315     1.29498288
     37 3             -7.34889255   2.09622732     1.29498294
     38 0             0.0000000     0.0000000      0.0000000
     39 4             -7.35857089   2.09176469     1.29531606
     40 4             -7.35862989   2.09169697     1.29531612
     41 4             -7.35869312   2.09162679     1.29531618
     42 4             -7.35876692   2.09158959     1.29531624
     43 0             0.0000000     0.0000000      0.0000000

我希望通过以下两种方式向我建议可视化这些轨迹的最佳方法:

  1. 如何在简单的2d线图上绘制x,y坐标?

  2. 如何在传单地图上绘制带有x,y坐标的轨迹(使用Folium或任何其他真实地图)?

  3. 另外,如何管理不同轨迹的点(它们用0分隔)。我是python以及matplotlib的新手,所以请尽可能给我提供一些详细的答案。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将数据帧转换为JSON格式,任何Javascript映射库都可以轻松处理。

例如,使用Pandas DataFrame.to_json方法会转换此数据帧:

voyage  id  x           y           time
27      2   -7.35857534 2.09175178  1.29471228
28      2   -7.35863779 2.09167080  1.29471234
29      2   -7.35882203 2.09156224  1.29471240

进入这个JSON数组:

[{
    "voyage": 27,
    "id": 2,
    "x": -7.35857534,
    "y": 2.09175178,
    "time": 1.29471228
}, {
    "voyage": 28,
    "id": 2,
    "x": -7.35863779,
    "y": 2.09167080,
    "time": 1.29471234
}, {
    "voyage": 29,
    "id": 2,
    "x": -7.35882203,
    "y": 2.09156224,
    "time": 1.29471240
}]

生成的文件可以通过Javascript加载,并与您的映射库一起使用,如Leaflet:

// Start a new map
var map = new L.Map('leaflet', {'center': [0, 0], 'zoom': 0});

// Load file 
fetch('data.json').then(function(response) {

    // Return JSON 
    return response.json().then(function (arr) {

        // Add a line
        var line = new L.Polyline([]).addTo(map);

        // Iterate the objects in the array
        arr.forEach(function (obj) {

            // If ID is not 0
            if (obj.id) {

                // Add point to line
                line.addLatLng(obj.y, obj.x);

            // ID is 0
            } else {

                // Start new line
                line = new L.Polyline([]).addTo(map);
            }
        });
    });
});
相关问题