程序员开发的地图的选择

文章目录

1、前言

本文只是针对个人开发者或者小型项目,基本不用高级的功能,属于白嫖党,大型项目选择不适用本项目

在项目开发的过程中,离不开使用了地图,但是现在地图的种类也很多,常用的有百度、高德、腾讯,然后进行选择呢?怎么避免踩坑呢?本文根据笔者项目经验进行介绍

先下结论:

不差钱的公司不说,但是对于个人开发者或者小型项目来说,优先推荐腾讯、高德 ,不要使用百度,想知道选用理由的话,感兴趣可逐步往下看。

2、功能

首先我们必须考虑什么场景使用地图,是CRM、还是车辆管理、还是考勤管理,运输仓库管理。其实这些场景都有个共同的方式。

  • 在地图上进行标记
  • 标记的点之间的距离

进阶的有(一般用不到)

  • 两个点之间的最优路线(优先高速、排除高速等)
  • 多个点之间的最佳运输路线

其实上述的功能,最主要的还是在地图上进行标记,比如可用于仓库的位置,或者车辆的实时位置

3、经纬度的录入

3.1 在地图上打点

这种方式什么地图都可以,就是在地图上显示数据库存储的点

3.2 使用手机进行打卡

一般大部分人都会选择企业微信或者钉钉

从以上可以看出:

企业微信是跟腾讯深度绑定的,钉钉是跟高德地图深度绑定的,只有百度地图没有啥用,这个是不用百度地图的理由之一

4、关于经纬度

高德地图、腾讯地图使用的是BD09

百度地图是GCJ102

可以通过以下方法进行转换

java 复制代码
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

public class MapUtils {
    /*GCJ-02(火星坐标) 和 BD-09 (百度坐标)
     *    算法代码如下,其中 bd_encrypt 将 GCJ-02 坐标转换成 BD-09 坐标, bd_decrypt 反之。
     */
    static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

    //高德转百度
    public static Map<String,Float> bdEncrypt(double gg_lat, double gg_lon){
        Map<String,Float> data = new HashMap<String,Float>();
        double x = gg_lon, y = gg_lat;
        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        double bd_lon = z * Math.cos(theta) + 0.0065;
        double bd_lat = z * Math.sin(theta) + 0.006;
        System.out.println(bd_lon+","+bd_lat);
        System.out.println(new BigDecimal(String.valueOf(bd_lon)).floatValue()+","+new BigDecimal(String.valueOf(bd_lat)).floatValue());
        data.put("lon", new BigDecimal(String.valueOf(bd_lon)).floatValue());
        data.put("lat",new BigDecimal(String.valueOf(bd_lat)).floatValue());
        return data;
    }

    //百度转高德
    public static Map<String,Double> bd_decrypt(double bd_lat, double bd_lon){
        double x = bd_lon - 0.0065, y = bd_lat - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
        double gg_lon = z * Math.cos(theta);
        double gg_lat = z * Math.sin(theta);
        Map<String,Double> data = new HashMap<String,Double>();
        data.put("lon", gg_lon);
        data.put("lat", gg_lat);
        return data;
    }
}

但是是无论是怎么转,两个坐标系都是有差异的 ,大概几百米,可以看出百度的BD09是多么的异类,从兼容性来说,不要选择百度地图

5、关于授权的问题

对于个人用户或者小型项目,根本没办法承担5w 每年的费用。而百度动不动就要限制使用,即使你不使用高级功能,也会各种警告。甚至到最后,连免费的底图都显示不出来

一个项目对接了大半天,这个是多恶心啊。这个是不选用百度地图的一个重要理由。

6、结尾

反正不要选百度地图

1、使用企业微信,选用腾讯地图。使用钉钉,使用高德地图

2、腾讯地图和高德地图都是GCJ02,基本无缝切换

3、百度地图审核太严,动不动就各种警告,体验感极差

个人想法仅供参考,不喜勿喷

相关推荐
mmsx4 小时前
osmdroid 踩坑清单:大级别崩溃/路径消失/低内存卡顿/范围缩放不准
android·源码·地图·osmdroid
mmsx1 天前
osmdroid Overlay 体系详解:比例尺/罗盘/总绘图层有序叠放
android·源码·地图·osmdroid
mmsx1 天前
osmdroid 手势交互与罗盘方向:缩放联动+传感器融合+定位跟随
android·源码·地图·osmdroid
mmsx2 天前
osmdroid 屏幕坐标与测量坐标互转:中心点+比例尺仿射换算
android·源码·地图·osmdroid
mmsx14 天前
我明明调用了 zoomToBounds,地图却总是停在别处?延迟加到 5 秒也没用,真相只有一个
android·人工智能·bug·地图
写不来代码的草莓熊1 个月前
Cesium 地图交互绘制圆形、多边形
前端·javascript·地图
丷丩3 个月前
MapLibre GL JS第49课:用表达式创建渐变线
gis·可视化·地图·mapbox·maplibre gl js
丷丩3 个月前
MapLibre GL JS第48课:用数据驱动属性样式化线
gis·地图·样式·mapbox·maplibre gl js
Love_云宝儿3 个月前
GeoJSON简介
java·gis·地图·jts