2024年7月


TDK ICM_20948 调试笔记:

1、注意根据具体的寄存器,切换bank;


2、磁力计为AK09916,但是已经集成在ICM 20948内部,AK09916与ICM 20948之间通过 I2C连接;


3、特别注意延时,但是读磁力计的数值一致读到的都是0.0,后来增加延时后,就可以读到磁力计数值.

   



Project description

China Coordinate Convertor

Actions StatusGitHub starsGitHub forksGitHub license

中国火星坐标转换命令行工具,用于WGS-84(未偏移坐标), GCJ-02(国家测绘局、高德、谷歌中国地图), BD-09(百度坐标系)三者之间的互相转换,支持文件格式:

  • ESRI Shapefile

  • GeoJSON

    图片名称

安装

推荐使用:pip install coord-convert

或者也可以从源码安装:

git clone https://github.com/sshuair/coord-convert.gitpip install -r requirements.txtpython setup.py install

依赖

  • python3
  • fiona
  • tqdm
  • click

使用方法

注意:火星坐标转换是针对经纬度的转换,因此在进行转换前需要将坐标转换成经纬度;比如web墨卡托(3857)等投影坐标系需要先转成经纬度坐标(4326)

Python API调用

在python程序中调用相应的坐标转换接口

from coord_convert.transform import wgs2gcj, wgs2bd, gcj2wgs, gcj2bd, bd2wgs, bd2gcj lon, lat = 120, 40gcj_lon, gcj_lat = wgs2gcj(lon, lat)bd_lon, bd_lat = wgs2bd(lon, lat)print(gcj_lon, gcj_lat) # the result should be: 120.00567568355486 40.0013047896019

命令行调用

火星坐标转换还支持命令行直接对shp、geojson等文件进行转换,比如

~/temp > coord_covert gcj2wgs tests/data/Polyline/polyline.geojson aa.geojson100%|██████████████████████████████████████████████████████| 219/219 [00:00<00:00, 550.93it/s]

更详细的用法:

convert input china coordinate to another.     Arguments:        convert_type {string} -- [coordinate convert type, e.g. wgs2bd]            wgs2gcj : convert WGS-84 to GCJ-02            wgs2bd  : convert WGS-84 to DB-09            gcj2wgs : convert GCJ-02 to WGS-84            gcj2bd  : convert GCJ-02 to BD-09            bd2wgs  : convert BD-09 to WGS-84            bd2gcj  : convert BD-09 to GCJ-02        src_path {string} -- [source file path]        dst_path {string} -- [destination file path]    Example:        coord_covert wgs2gcj ./tests/data/polygon/polygon_wgs.shp ~/temp/polygon_gcj.shp 



一、安装依赖

     1、folium, 地图显示

        pip3   install     folium

     2、coord-convert,坐标转换

      pip3 install coord-convert

   或源码安装

   git clone https://github.com/sshuair/coord-convert.git

   pip install -r requirements.txt

   python setup.py install


       

二、代码实现

     import os
import sys
import pandas as pd
import numpy as np

#import  matplotlib.pyplot as plt

import  folium
from pyproj import Transformer
from coord_convert.transform import wgs2gcj, wgs2bd, gcj2wgs, gcj2bd, bd2wgs, bd2gcj




def     Load_GNSS_Dataset(csv_file):
    data = pd.read_csv(csv_file)
    #print(data, type(data))
    frame = pd.DataFrame(data)
    t = frame.iloc[:, 0]
    lat = frame.iloc[:, 1]
    lon = frame.iloc[:, 2]
    alt = frame.iloc[:, 3]

    return  t.to_numpy(), lat.to_numpy(), lon.to_numpy(), alt.to_numpy()
    
    
    
def     Show_GPS_Trajectory_Map(argv):
    gnss_file = argv[0]
    t, wgs84_lats, wgs84_lons, wgs84_alts = Load_GNSS_Dataset(gnss_file)
    #lons, lats = wgs2gcj(wgs84_lons[0], wgs84_lats[0])
    Lats = []
    Lons = []
    for  i in range(len(wgs84_lats)):
        gcj_lon, gcj_lat = wgs2gcj(wgs84_lons[i], wgs84_lats[i])
        Lats.append(gcj_lat)
        Lons.append(gcj_lon)
    lats = np.array(Lats)
    lons = np.array(Lons)

    # create map
    Map = folium.Map(
            location=[lats[0], lons[0]], #map center
            zoom_start=12,
            tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
            attr='高德-常规图',
            
            #tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}',
            #attr='彩色版'

            #tiles =  'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}',
            #attr='腾讯地图'
            )
    folium.PolyLine(locations=[list(zip(lats, lons))], color='blue', weight=5).add_to(Map)
    Map.save('GPS_track.html');



if __name__ == "__main__":
    if len(sys.argv)<2:
        print("Usage:\n  < GPS csv>")
        sys.exit()
    #print(sys.argv[1:], type(sys.argv[1:]))
    if 2== len(sys.argv):
        sys.exit(Show_GPS_Trajectory_Map(sys.argv[1:]))
    else:
        sys.exit()





















咱们用folium进行过多次地图绘制,有粉丝反馈在进行地图绘制的时候坐标点可能是百度地图经纬度、高德地图经纬度或者腾讯地图经纬度等情况,然后发现用默认的地图底图绘制的时候存在明显的偏移;另外,还有粉丝进行地图绘制用于论文的发表,而论文要求地图是英文或者中英文显示;同样的,还有粉丝表示想用卫星影像图显示等等。

那么,今天我们就针对这些情况来介绍一下folium更换地图底图样式的全攻略!

目录:

  • 1. 准备工作
  • 2. 关于folium.Map()
  • 3. 内建地图底图样式
  • 4. 多种第三方地图底图样式
    • 4.1. 高德地图
    • 4.2. 智图GeoQ
    • 4.3. 腾讯地图
    • 4.4. 天地图
  • 5. 补充

1. 准备工作

有朋友可能没用过folium,它其实就是python的一个专业绘制地图的第三方库,所以在使用之前需要先安装它。

代码语言:javascript
复制
pip install folium

在安装完成之后,我们可以在jupyterlab进行演示如下:

代码语言:javascript
复制
import foliumm = folium.Map()m

默认

对于上面的输出,其实是一个可交互的地图,支持放大缩写拖拽等等。

如果你想将输出存在本地,可以这样来:

代码语言:javascript
复制
m.save('map.html')

可以看到本地就存了这个一个文件,浏览器打开就可以进行交互式操作了。

map文件

以上就是一个平平淡淡的过程......

2. 关于folium.Map()

在上一部分我们可以看到这个map玩意直接就是一个地图啦,这里我们就介绍一下它常用的几个参数。

代码语言:javascript
复制
folium.Map(    location=None,    width='100%',    height='100%',    left='0%',    top='0%',    position='relative',    tiles='OpenStreetMap',    attr=None,    min_zoom=0,    max_zoom=18,    zoom_start=10,    min_lat=-90,    max_lat=90,    min_lon=-180,    max_lon=180,    max_bounds=False,    crs='EPSG3857',    control_scale=False,    prefer_canvas=False,    no_touch=False,    disable_3d=False,    png_enabled=False,    zoom_control=True,    **kwargs,)

参数可真多啊!!

没有参数的folium.Map()将得到一张世界地图。

  • location:地图中心,[40.002694, 116.322373]是清华大学校区;
  • zoom_start:比例尺,默认为10级,大约是一个城市的范围;

其他常用参数包括:

  • widthheight:地图的长宽,如果是int则表示像素值,如果是str则表示百分比;
  • max_zoom:地图可以手动调节的最大比例,默认为18级;
  • control_scale:是否在地图上添加比例尺,默认为False;
  • no_touch:是否禁止手动操作,默认为False;
  • tiles:地图样式,默认为OpenStreetMap
  • attr:如果设置非内建地图样式,则需要传入这个值,可以理解为你选择的地图样式名称

以上是常用的一些参数,而最常用的莫过于 locationzoom_starttiles等。

内建地图样式还有一下几种:

代码语言:javascript
复制
- "OpenStreetMap"- "Mapbox Bright" (Limited levels of zoom for free tiles)- "Mapbox Control Room" (Limited levels of zoom for free tiles)- "Stamen" (Terrain, Toner, and Watercolor)- "Cloudmade" (Must pass API key)- "Mapbox" (Must pass API key)- "CartoDB" (positron and dark_matter)

我们简单试下locationzoo_start参数:

代码语言:javascript
复制
import foliumm = folium.Map([40.002694, 116.322373],               zoom_start=15,               control_scale=True              )m

可以看到清华大学校区

清华大学校区

以上对Map的参数进行了简单的介绍,接下来,我们就来看看地图底图样式的选取情况吧~

3. 内建地图底图样式

我们看到folium其实有好几种内建地图底图样式,其中部分需要去申请key,由于我这边没有申请成功就不做演示了。

  • "OpenStreetMap"
  • "Mapbox Bright" (Limited levels of zoom for free tiles)
  • "Mapbox Control Room" (Limited levels of zoom for free tiles)
  • "Stamen" (Terrain, Toner, and Watercolor)
  • "Cloudmade" (Must pass API key)
  • "Mapbox" (Must pass API key)
  • "CartoDB" (positron and dark_matter)

地势地形底图

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='Stamen Terrain',               zoom_start=15,               control_scale=True              )m

黑白无标记底图

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='Stamen Toner',               zoom_start=15,               control_scale=True              )m

水墨画底图

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='Stamen Watercolor',               zoom_start=15,               control_scale=True              )m

以上就是内建地图底图样式的一些展示,部分需要key的大家可以去这个网站申请:

http://openwhatevermap.xyz/(可惜我上不去)

另外,在这里也可以找到一些地图底图

http://leaflet-extras.github.io/leaflet-providers/preview/

我后续也会去研究这些地图底图样式,试着分享更多有趣的地图分享给大家。

当然了,国内咱们用的较多的地图是高德、百度和腾讯地图等,接下来我们就来玩玩!

4. 多种第三方地图底图样式

这里我将演示高德地图、智图GeoQ和腾讯地图等

4.1. 高德地图

高德地图的 中英文地图、卫星影像图、街道图与常规图

中英文地图

代码语言:javascript
复制
folium.Map([40.002694, 116.322373],           tiles='https://webrd02.is.autonavi.com/appmaptile?lang=zh_en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',           attr='高德-中英文对照',           zoom_start=15,          )

纯英文地图

代码语言:javascript
复制
folium.Map([40.002694, 116.322373],           tiles='https://webrd02.is.autonavi.com/appmaptile?lang=en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',           attr='高德-纯英文对照',           zoom_start=15,          )

卫星影像图

代码语言:javascript
复制
tiles = 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'folium.Map([40.002694, 116.322373],           tiles= tiles,           attr='高德-卫星影像图',           zoom_start=15,          )
代码语言:javascript
复制
街道图
代码语言:javascript
复制
folium.Map([40.002694, 116.322373],           tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=11',           attr='高德-街道路网图',           zoom_start=10,          )

常规图

代码语言:javascript
复制
folium.Map([40.002694, 116.322373],           tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',           attr='高德-常规图',           zoom_start=15,          )

4.2. 智图GeoQ

反正我觉得这个蛮好的,用起来简单

多种风格地图,即拿即用

彩色版

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}',               attr='彩色版',               zoom_start=15,              )m

暖色版

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}',               attr='暖色版',               zoom_start=15,              )m

灰色版

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}',               attr='灰色版',               zoom_start=15,              )m

蓝黑版

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',               attr='蓝黑版',               zoom_start=15,              )m

英文版

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunityENG/MapServer/tile/{z}/{y}/{x}',               attr='英文版',               zoom_start=15,              )m

中国行政区划边界

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/administrative_division_boundaryandlabel/MapServer/tile/{z}/{y}/{x}',               attr='中国行政区划边界',              )m

水系专题

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}',               attr='水系专题',              )m

街道网图

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Gray_OnlySymbol/MapServer/tile/{z}/{y}/{x}',               attr='街道网图',              )m

暖色街道网图

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Warm_OnlySymbol/MapServer/tile/{z}/{y}/{x}',               attr='暖色-街道网图',              )m

4.3. 腾讯地图

代码语言:javascript
复制
tiles =  'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}'folium.Map([39.904989, 116.405285],           tiles= tiles,           attr='腾讯地图'                    )

4.4. 天地图

https://www.tianditu.gov.cn/

需要注册一个key

天地图影像

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-影像'              )m

天地图影像注记

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-影像标注'              )m

天地图矢量

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-矢量',               zoom_start=10,              )m

天地图矢量注记

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-矢量注记'              )m

天地图地形

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-地形',               zoom_start=3,              )m

天地图地形注记

代码语言:javascript
复制
m = folium.Map([40.002694, 116.322373],               tiles='http://t7.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',               attr='天地图-地形标记',               zoom_start=3,              )m

百度地图我这边测试失败了,暂时没有找到合适的替换方案。

5. 补充

其实,我们还可以找更多的地图底图瓦片URL来进行替换,多样化我们的地图绘制。

另外,大家在用经纬度坐标点进行地图绘制的时候,比如标记点、绘制区域、热力图绘制等等,需要考虑经纬度坐标是哪个地图系下面的,然后再用对应地图系的相关底图进行绘制才准确!