小程序首页的设备列表按经纬度拉取,golang mysql 实现

发布时间: 2021-11-15 17:11:34 作者: 大象笔记

经纬度的存储类型

latitude: 37.538155,    
longitude: 121.390169,

可见,最多有 6 位小数,所以存储类型为:

decimal(10,6)

decimal 的第二个参数 6 代表,最多 6 位小数; 第一个参数 10 - 6 = 4,代表小数点前最多 4 位数,即 -9999 ~ 9999.

alter table sql

ALTER TABLE `oxygen_backend`.`device` 
CHANGE COLUMN `lat` `lat` DECIMAL(10,6) NULL DEFAULT NULL ,
CHANGE COLUMN `lng` `lng` DECIMAL(10,6) NULL DEFAULT NULL ;

TODO

markers 报错

[渲染层错误] updateMultiMarker faild Error: 参数错误:LatLng 传入参数 (NaN, NaN) 非合法数字

markers: [{}],    // 错误的默认值
markers: [],      // 这样写才正确

MySQL

SELECT name, latitude, longitude, SQRT(
    POW(69.1 * (latitude - [target_lat]), 2) +
    POW(69.1 * ([target_lng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName 
HAVING distance < [distance]
ORDER BY distance;

单位为 miles, 英里。

1 英里=1.6093 千米

测试数据

      {
        iconPath: "/images/target.png",
        id: 0,
        latitude: 37.53627,    // 37.415063,121.19606
        longitude: 121.38954,
        width: 40,
        height: 47.7,
        title: "高达一号",
      },
      {
        iconPath: "/images/target.png",
        id: 1,
        latitude: 37.538155,    // 37.428374,121.185761
        longitude: 121.390169,
        width: 40,
        height: 47.7,
        title: "高达二号",
      },
      {
        iconPath: "/images/target.png",
        id: 2,
        latitude: 37.539417,    // 37.410572,121.213023
        longitude: 121.388578,
        width: 40,
        height: 47.7,
        title: "高达三号",
      },
我是一名山东烟台的开发者,联系作者