代码之家  ›  专栏  ›  技术社区  ›  mforezdev

在地图内联(Jupyter)上绘制坐标的最快方法是什么?

  •  8
  • mforezdev  · 技术社区  · 7 年前

    我想知道在上面绘制几个坐标(150万)最简单、最快的方法是什么 开放街道地图

    它必须能够以内联方式显示在 .

    我一直在尝试 Folium

    import folium
    import datetime as dt
    import random as rnd
    
    t0 = dt.datetime.now()
    
    #New York City Coordinates
    NYC_COORD = [40.7128, -74.0059]
    
    # Sample (0.33% over 1.5 million) 
    sample_coords = rnd.sample(list(coords),5000)
    
    # Build map 
    map_nyc = folium.Map(location=NYC_COORD, zoom_start=12, 
    tiles='cartodbpositron', width=640, height=480)
    
    # Plot coordinates using comprehension list
    [folium.CircleMarker(sample_coords[i], radius=1,
                    color='#0080bb', fill_color='#0080bb').add_to(map_nyc) 
    for i in range(len(sample_coords))]
    
    # Display map in Jupyter
    map_nyc
    
    t1 = dt.datetime.now()
    print('Total time: %i seconds' % (t1 - t0).seconds)
    

    总时间:33秒

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  7
  •   James A. Bednar    6 年前

    150万个坐标对datashader来说没有问题;以下是3秒钟内1000万的代码,包括读取文件,以及在缩放或平移(从 http://pyviz.org/tutorial/01_Workflow_Introduction.html ):

    import dask.dataframe as dd, geoviews as gv, cartopy.crs as crs
    from colorcet import fire
    from holoviews.operation.datashader import datashade
    from geoviews.tile_sources import CartoLight
    gv.extension('bokeh')
    
    tiles = CartoLight.options(width=700, height=600, xaxis=None, yaxis=None, show_grid=False) 
    
    taxi  = dd.read_parquet('../data/nyc_taxi_wide.parq').persist()
    pts   = gv.Points(taxi, ['pickup_x', 'pickup_y'], crs=crs.GOOGLE_MERCATOR)
    trips = datashade(pts, cmap=fire, width=1000, height=600, x_sampling=0.5, y_sampling=0.5)
    
    tiles * trips
    

    enter image description here

        2
  •  4
  •   Bob Haffner    7 年前

    我认为可以通过使用MarkerClusters进行改进,但效果并不显著。150万是一个很大的阴谋点

    不是一个完美的替代品,但也许你可以看看 datashader mpl-scatter-density

    编辑:我最近发现了FastMarkerCluster,这是一个非常快速的选项,但没有MarkerClusters灵活。也就是说,这可能不是150万人的好选择。