根据经纬度,获取方圆10公里内的数据

该博客介绍了如何在MySQL中使用内置函数计算经纬度坐标之间的距离,并根据距离进行排序。通过创建一个名为`customer`的表,插入不同地区的经纬度数据,然后利用数学公式计算目标点与表中各点的距离,最终实现按距离升序或降序排列的结果。此外,还提到了一种基于点和面的方法来判断经纬度是否在一定范围内,但未详细展开。

文章转载地址https://www.cnblogs.com/jiafuwei/p/5699091.html感谢作者。

mysql距离计算,单位m,以及排序

lon 经度 lat 纬度

一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180)

首先新建一张表,里面包含经纬度

SET FOREIGN_KEY_CHECKS=0;



-- ----------------------------

-- Table structure for customer

-- ----------------------------

DROP TABLE IF EXISTS `customer`;

CREATE TABLE `customer` (

  `id` int(11) unsigned NOT NULL auto_increment COMMENT '自增主键',

  `name` varchar(50) NOT NULL COMMENT '名称',

  `lon` double(9,6) NOT NULL COMMENT '经度',

  `lat` double(8,6) NOT NULL COMMENT '纬度',

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='商户表';



-- ----------------------------

-- Records of customer

-- ----------------------------

INSERT INTO `customer` VALUES ('1', '天津市区', '117.315575', '39.133462');

INSERT INTO `customer` VALUES ('2', '北京市区', '116.407999', '39.894073');

INSERT INTO `customer` VALUES ('3', '保定', '115.557124', '38.853490');

INSERT INTO `customer` VALUES ('4', '石家庄', '114.646458', '38.072369');

INSERT INTO `customer` VALUES ('5', '昌平区1', '116.367180', '40.009561');

INSERT INTO `customer` VALUES ('6', '海淀区2', '116.313425', '39.973078');

INSERT INTO `customer` VALUES ('7', '海淀区1', '116.329236', '39.987231');

然后我们开始用mysql自带的函数,计算customer表中,每个地方具体。

传入参数 纬度 40.0497810000 经度 116.3424590000

/*传入的参数为  纬度 纬度 经度 ASC升序由近至远 DESC 降序 由远到近 */
 

SELECT
	*
FROM
	(
		SELECT
			t1.fd_objectid,
			t1.road_code,
			t1.road_name,
			t1.event_name,
			t1.block_reason,
			DATE_FORMAT(
				t1.event_happened_time,
				'%Y-%m-%d %H:%i:%S'
			) AS occur_date,
			DATE_FORMAT(
				t1.plan_recovery_date,
				'%Y-%m-%d %H:%i:%S'
			) AS plan_recovery_date,
			longitude,
			latitude,
			ROUND(
				6378.138 * 2 * ASIN(
					SQRT(
						POW(
							SIN(
								(
									29.114081 * PI() / 180 - t1.latitude * PI() / 180
								) / 2
							),
							2
						) + COS(29.114081 * PI() / 180) * COS(t1.latitude * PI() / 180) * POW(
							SIN(
								(
									113.983070 * PI() / 180 - t1.longitude * PI() / 180
								) / 2
							),
							2
						)
					)
				) * 1000
			) AS juli
		FROM
			jtyj_emergency_event t1
		ORDER BY
			juli ASC
	) mm
WHERE
	juli < 1000

至此,我们就能清楚的查看到纬度 40.0497810000 经度 116.3424590000 距离customer表中的每个地区的距离(单位 m)

另外还有一种方式,根据经纬度和半径(范围)求出一个圆(面),判断该经纬度是否属于该面内,即点和面的思想,有兴趣的可以自己研究下。

<think>好的,我需要帮助用户了解如何根据经纬度获取实时气象数据的API或库。首先,用户提到了高德地图和和风天气的引用,所以这两个可能是他们已知的资源。但用户可能希望有更多的选择或详细的步骤。 首先,我应该回顾用户提供的引用内容。引用[1]提到了使用高德地图的geocoder API将经纬度转换为地址信息,然后获取天气数据。引用[2]则介绍了和风天气的API,包括如何通过经纬度获取天气信息。用户可能已经了解这两个,但需要更详细的指导或其他选项。 接下来,我需要考虑其他常用的气象数据API,比如OpenWeatherMap、WeatherAPI等。这些也是常用的服务,可能需要包括在回答中。同时,用户可能需要了解基本步骤,比如获取经纬度、调用API、处理返回数据等。 另外,用户可能关心API的使用限制,如免费层的调用次数、是否需要注册、如何获取API密钥等。需要详细说明每个服务的注册步骤和注意事项,比如高德地图需要Web服务API类型密钥,和风天气需要项目ID和密钥。 还要考虑是否需要代码示例,比如JavaScript或Python的片段,来展示如何发起请求。但根据用户的问题,可能更倾向于API的选择和使用步骤,而不是具体的代码实现,但提供简单的示例会更好。 还需要检查是否有任何地理编码步骤,例如将经纬度转换为城市或地区编码,但根据引用,高德地图已经可以处理这个步骤。而和风天气直接支持经纬度,所以可能需要不同的处理方式。 最后,确保回答结构清晰,分步骤说明,并列出不同的API选项,每个选项的特点和使用方法。同时,生成相关问题,帮助用户进步探索,比如免费限制、数据准确性、处理步骤等。</think>### 根据经纬度获取实时气象数据的实现方法 #### 1. 核心步骤 1. **获取经纬度坐标** 使用浏览器的`navigator.geolocation.getCurrentPosition` API 或移动端定位服务获取用户经纬度,例如: ```javascript navigator.geolocation.getCurrentPosition(position => { const { latitude, longitude } = position.coords; }); ``` 这是地理数据获取的基础步骤[^1]。 2. **选择气象数据API** - **高德地图天气API** 需先通过高德地理编码API将经纬度转换为行政区划编码(adcode),再请求天气数据: ```bash # 示例请求(需替换为你的API密钥) https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=<your-key> ``` 返回数据包含实时温度、湿度、风力等信息[^1]。 - **和风天气API** 支持直接通过经纬度查询,无需地理编码: ```bash # 实时天气接口示例 https://devapi.qweather.com/v7/weather/now?location=116.41,39.92&key=<your-key> ``` 提供分钟级降水、空气质量等扩展数据[^2]。 - **OpenWeatherMap** 国际常用服务,免费层支持每分钟60次调用: ```bash https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=<your-key> ``` #### 2. 实现要点对比 | API | 直接支持经纬度 | 免费调用量 | 数据粒度 | 额外功能 | |---------------|----------------|------------|----------------|----------------------| | 高德地图 | 需地理编码 | 5000次/日 | 城市级 | 灾害预警 | | 和风天气 | 支持 | 1000次/日 | 坐标级 | 台风路径、天文数据 | | OpenWeatherMap | 支持 | 1000次/日 | 坐标级 | 全球覆盖、历史数据 | #### 3. 推荐实施方案 1. **国内场景**优先选择高德或和风天气,数据更本地化 2. **国际需求**建议使用OpenWeatherMap 3. **高频访问**需购买商用授权(如和风天气企业版支持10万次/日)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值