网站想做个链接怎么做asp.net 3.5网站开发全程解析

news/2025/9/23 19:18:58/文章来源:
网站想做个链接怎么做,asp.net 3.5网站开发全程解析 ,虚拟主机做多个网站,制作网站的步骤和方法目录 引言 Redis GEO命令概述 什么是GEO命令#xff1f; 主要命令详解 命令应用示例 添加地点信息 查询两地距离 查询附近的城市 实现查找附近的人功能 功能需求与实现思路 基本需求 实现思路 命令实现方案 存储用户位置 查询附近的用户 Java代码实…目录 引言 Redis GEO命令概述 什么是GEO命令 主要命令详解 命令应用示例 添加地点信息 查询两地距离 查询附近的城市 实现查找附近的人功能 功能需求与实现思路 基本需求 实现思路 命令实现方案 存储用户位置 查询附近的用户 Java代码实现详解 使用Redis GEO的优势与注意事项 优势 注意事项 引言 在移动互联网时代基于地理位置的服务已成为众多应用的标配功能。无论是打车软件、外卖平台还是社交应用附近的XX功能几乎无处不在。这类功能的核心技术挑战在于如何高效存储地理位置数据并进行快速检索Redis 3.2版本引入的GEO地理空间命令集完美解决了这一问题为开发者提供了简单高效的地理位置数据处理方案。 本文将深入浅出地介绍Redis GEO命令及其工作原理通过实际案例和代码示例帮助你轻松实现查找附近的人等地理位置相关功能。无论你是Redis新手还是有经验的开发者都能从中获取有价值的信息。 Redis GEO命令概述 什么是GEO命令 GEO是Geolocation地理定位的简写Redis GEO是Redis专门为地理位置信息存储和检索设计的命令集。它允许我们将经纬度坐标存储到Redis数据库中并支持按距离查询、计算两点间距离等多种地理空间操作。 底层实现上Redis GEO使用了地理空间索引算法Geohash将二维的经纬度转换为一维的字符串并通过Redis的有序集合(Sorted Set)来存储这使得地理位置的存取和计算变得非常高效。 主要命令详解 Redis GEO主要提供了以下几个核心命令 GEOADD: 添加地理空间信息 # 将指定的地理空间位置经度、纬度、名称添加到指定的key中 # 可以一次添加多个位置 GEOADD key longitude latitude member [longitude latitude member ...] GEODIST: 计算两点间距离 # 返回两个给定位置之间的距离 # unit参数指定返回值的单位可以是m米、km千米、mi英里或ft英尺 GEODIST key member1 member2 [unit] GEOHASH: 获取经纬度的Geohash表示 # 返回一个或多个位置元素的Geohash表示 # Geohash是一种将经纬度编码为字符串的方法 GEOHASH key member [member ...] GEOHASH: 获取经纬度的Geohash表示 # 返回一个或多个位置元素的Geohash表示 # Geohash是一种将经纬度编码为字符串的方法 GEOHASH key member [member ...] GEOPOS: 获取位置的经纬度 # 返回指定名称位置的经纬度坐标 GEOPOS key member [member ...] GEORADIUS: 查找指定半径内的成员 # 以给定的经纬度为中心返回键中包含的位置元素当中与中心的距离不超过给定半径的所有位置元素 GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key] WITHDIST: 在返回位置元素的同时将位置元素与中心之间的距离也一并返回 WITHCOORD: 将位置元素的经度和纬度也一并返回 WITHHASH: 以52位无符号整数的形式返回位置元素的geohash值主要用于调试 COUNT n: 限定返回的记录数量 ASC|DESC: 根据中心的位置按照从近到远ASC或从远到近DESC的顺序返回位置元素 GEOSEARCH: 在指定范围内搜索 # 在指定范围内搜索范围可以是圆形或矩形 GEOSEARCH key [FROMMEMBER member] [FROMLONLAT longitude latitude] [BYRADIUS radius unit] [BYBOX width height unit] [WITHDIST] [WITHCOORD] [WITHHASH] [COUNT count] [ASC|DESC] GEOSEARCHSTORE: 在指定范围内搜索并将结果存储 # 与GEOSEARCH功能相同但可以将结果存储到指定的key中 GEOSEARCHSTORE destination key [FROMMEMBER member] [FROMLONLAT longitude latitude] [BYRADIUS radius unit] [BYBOX width height unit] [WITHDIST] [WITHCOORD] [WITHHASH] [COUNT count] [ASC|DESC] 这些命令共同构成了一个完整的地理空间数据处理工具集能够满足大多数基于位置的服务需求。 命令应用示例 让我们通过一个具体的例子来理解GEO命令的使用 添加地点信息 # 上述命令将东京和吉隆坡两个城市的经纬度信息添加到名为locations的地理空间集合中。 GEOADD locations 139.781210 35.774426 东京 101.653962 5.205122 吉隆坡 查询两地距离 # 这个命令会返回东京和吉隆坡之间的距离单位公里。 GEODIST locations 东京 吉隆坡 km 查询附近的城市 # 这个命令会查找距离指定坐标点经度139.0纬度35.01000公里范围内的所有城市并同时返回它们与中心点的距离。 GEORADIUS locations 139.0 35.0 1000 km WITHDIST 实现查找附近的人功能 查找附近的人是移动应用中的常见功能下面我们将详细讲解如何使用Redis GEO命令来实现。 功能需求与实现思路 基本需求 存储每个用户的地理位置信息经纬度能够查询指定用户周围一定范围内的其他用户返回的用户列表按照距离排序 实现思路 使用GEOADD命令将用户ID及其经纬度信息存储在Redis中当需要查询附近的人时使用GEORADIUS命令以查询用户的位置为中心指定半径范围进行搜索 命令实现方案 假设我们正在开发一个社交应用需要实现广州市用户查找1000公里范围内其他用户的功能 存储用户位置 GEOADD user_location 113.267548 23.142979 user1 GEOADD user_location 113.300000 23.150000 user2 GEOADD user_location 114.057868 22.543099 user3 查询附近的用户 # 命令会返回距离广州市指定坐标1000公里范围内的所有用户并显示他们与查询点的具体距离。 GEORADIUS user_location 113.254325 23.144043 1000 km WITHDIST Java代码实现详解 下面是使用Java语言和Jedis客户端实现查找附近的人功能的代码示例 import redis.clients.jedis.GeoCoordinate; import redis.clients.jedis.GeoRadiusResponse; import redis.clients.jedis.GeoUnit; import redis.clients.jedis.Jedis; import redis.clients.jedis.params.GeoRadiusParam;import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.stream.Collectors;/*** Redis GEO功能示例实现附近的人功能* * author Muller*/ public class RedisGeoDemo {private static final String USER_LOCATION_KEY user_location;/*** 存储用户地理位置信息* * param userId 用户ID* param longitude 经度* param latitude 纬度* param jedis Redis连接* return 添加成功的数量*/public static Long saveUserLocation(String userId, double longitude, double latitude, Jedis jedis) {try {return jedis.geoadd(USER_LOCATION_KEY, longitude, latitude, userId);} catch (Exception e) {System.err.println(保存用户位置信息失败: e.getMessage());return 0L;}}/*** 批量存储多个用户的地理位置信息* * param userLocations 用户位置Mapkey为用户IDvalue为经纬度坐标* param jedis Redis连接* return 添加成功的数量*/public static Long saveUserLocations(MapString, double[] userLocations, Jedis jedis) {try {MapString, GeoCoordinate memberCoordinateMap new HashMap();for (Map.EntryString, double[] entry : userLocations.entrySet()) {String userId entry.getKey();double[] coordinates entry.getValue();memberCoordinateMap.put(userId, new GeoCoordinate(coordinates[0], coordinates[1]));}return jedis.geoadd(USER_LOCATION_KEY, memberCoordinateMap);} catch (Exception e) {System.err.println(批量保存用户位置信息失败: e.getMessage());return 0L;}}/*** 查询附近的人* * param longitude 经度* param latitude 纬度* param radius 半径* param jedis Redis连接* return 附近用户ID列表*/public static ListString getNearbyUsers(double longitude, double latitude, double radius, Jedis jedis) {try {ListGeoRadiusResponse responses jedis.georadius(USER_LOCATION_KEY, longitude, latitude, radius, GeoUnit.KM, GeoRadiusParam.geoRadiusParam().withDist().sortAscending());return responses.stream().map(GeoRadiusResponse::getMemberByString).collect(Collectors.toList());} catch (Exception e) {System.err.println(查询附近用户失败: e.getMessage());return List.of();}}/*** 获取用户详细地理信息包含距离* * param longitude 经度* param latitude 纬度* param radius 半径* param jedis Redis连接* return 附近用户详细信息列表*/public static ListUserGeoInfo getNearbyUsersWithDistance(double longitude, double latitude, double radius, Jedis jedis) {try {ListGeoRadiusResponse responses jedis.georadius(USER_LOCATION_KEY, longitude, latitude, radius, GeoUnit.KM, GeoRadiusParam.geoRadiusParam().withDist().withCoord().sortAscending());return responses.stream().map(response - new UserGeoInfo(response.getMemberByString(),response.getDistance(),response.getCoordinate().getLongitude(),response.getCoordinate().getLatitude())).collect(Collectors.toList());} catch (Exception e) {System.err.println(查询附近用户详细信息失败: e.getMessage());return List.of();}}/*** 计算两个用户之间的距离* * param userId1 用户1的ID* param userId2 用户2的ID* param jedis Redis连接* return 两用户间距离单位公里如果计算失败返回-1*/public static double getDistanceBetweenUsers(String userId1, String userId2, Jedis jedis) {try {Double distance jedis.geodist(USER_LOCATION_KEY, userId1, userId2, GeoUnit.KM);return distance ! null ? distance : -1;} catch (Exception e) {System.err.println(计算用户距离失败: e.getMessage());return -1;}}/*** 获取用户的地理坐标* * param userId 用户ID* param jedis Redis连接* return 用户坐标[经度,纬度]如果不存在返回null*/public static double[] getUserPosition(String userId, Jedis jedis) {try {ListGeoCoordinate positions jedis.geopos(USER_LOCATION_KEY, userId);if (positions ! null !positions.isEmpty() positions.get(0) ! null) {GeoCoordinate pos positions.get(0);return new double[] { pos.getLongitude(), pos.getLatitude() };}return null;} catch (Exception e) {System.err.println(获取用户坐标失败: e.getMessage());return null;}}/*** 用户地理信息包装类*/public static class UserGeoInfo {private String userId;private double distance;private double longitude;private double latitude;public UserGeoInfo(String userId, double distance, double longitude, double latitude) {this.userId userId;this.distance distance;this.longitude longitude;this.latitude latitude;}public String getUserId() {return userId;}public double getDistance() {return distance;}public double getLongitude() {return longitude;}public double getLatitude() {return latitude;}Overridepublic String toString() {return 用户ID: userId , 距离: String.format(%.2f, distance) 公里 , 坐标: [ longitude , latitude ];}}/*** 示例用法*/public static void main(String[] args) {// 这里仅用于演示实际使用应通过连接池获取Jedis实例try (Jedis jedis new Jedis(localhost, 6379)) {// 清除之前可能存在的测试数据jedis.del(USER_LOCATION_KEY);// 存储几个测试用户的位置广州及周边城市的坐标saveUserLocation(user1, 113.267548, 23.142979, jedis); // 广州saveUserLocation(user2, 114.057868, 22.543099, jedis); // 深圳saveUserLocation(user3, 113.030396, 22.938259, jedis); // 佛山saveUserLocation(user4, 116.397128, 39.916527, jedis); // 北京System.out.println( 查询广州周边1000公里范围内的用户 );ListString nearbyUsers getNearbyUsers(113.267548, 23.142979, 1000, jedis);System.out.println(附近的用户: nearbyUsers);System.out.println(\n 查询广州周边1000公里范围内的用户包含距离信息 );ListUserGeoInfo nearbyUsersWithDist getNearbyUsersWithDistance(113.267548, 23.142979, 1000, jedis);nearbyUsersWithDist.forEach(System.out::println);System.out.println(\n 计算用户间距离 );double distance getDistanceBetweenUsers(user1, user2, jedis);System.out.println(广州(user1)到深圳(user2)的距离: String.format(%.2f, distance) 公里);distance getDistanceBetweenUsers(user1, user4, jedis);System.out.println(广州(user1)到北京(user4)的距离: String.format(%.2f, distance) 公里);System.out.println(\n 获取用户坐标 );double[] pos getUserPosition(user1, jedis);if (pos ! null) {System.out.println(用户user1的坐标: [ pos[0] , pos[1] ]);}}} } 使用Redis GEO的优势与注意事项 优势 性能高效Redis基于内存操作地理位置查询性能极高使用简单GEO命令集设计直观容易上手功能完善提供了从添加、查询到计算距离的完整功能集可扩展性好可以轻松处理百万级别的POI兴趣点数据与Redis其他功能协同可以结合Redis的缓存、事务等功能 注意事项 精度限制GEO命令的精度受到Geohash算法的限制对于需要极高精度的应用场景如军事可能不适用内存消耗大量GEO数据会占用较多内存需要合理规划Redis服务器资源经纬度范围Redis GEO只接受有效的经纬度范围经度-180到180纬度-85.05112878到85.05112878数据持久化使用AOF持久化模式可能会导致重启时间延长需权衡数据安全性和重启速度适用场景最适合附近的XX这类不需要复杂地理形状计算的场景如需多边形区域计算等高级地理信息功能可能需要专业GIS系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成品网站nike源码1688旅游宣传网站建设方案

线程简介 在 Java 中,并发机制非常重要。在以往的程序设计中,我们都是一个任务完成后再进行下一个任务,这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制,程序员可以在程序中执行多个线程,每一…

详细介绍:内网后渗透攻击--域控制器安全(1)

详细介绍:内网后渗透攻击--域控制器安全(1)2025-09-23 19:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

2025/9/23

A 用时:1h 预期:100pts 实际:100pts 发现把三个人放在一个状态没有必要,直接分开跑背包再枚举答案即可。 B 用时:2h 预期:100pts 实际:100pts 考试时想了很久的怎么 \(O(n)\) 。 把式子转化为 \(\frac{1}{2}(ma…

Tita:更频繁的绩效考核周期的好处

创建一个能对员工的优势和重点产生有意义的见解的绩效评估周期是一项艰巨的任务,尤其是对一个人来说。(我在跟你说话,人力资源领导。) 不仅如此,这些审查还必须帮助员工的目标与组织的大方向保持一致,量化谁是高绩…

完整教程:DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

怎样监测熊掌号绑定成功网站宁波seo排名优化教程

题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1 行每行包含两个正整数x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以…

做seo优化产品网站网站无备案

一.汉字的编码 我们知道计算机存储英文字母,标点,数字用的是ascall码,128种用一个字节表示绰绰有余。而汉字远远不止128种,因此汉字需要两个字节表示。 1.gbk编码中汉字占两个字节。 2.utf-8中,一个汉字占三个字节。…

网站图标只做爱狼戈网站建设

在OpenCV中,滤波器用于对图像进行平滑、锐化、边缘检测等操作。以下是一些常用的滤波器及其在OpenCV中的Python代码示例: 均值滤波器(平滑图像): import cv2 import numpy as np# 读取图像 image cv2.imread(path_t…

如何修改网站标题wordpress 标签前缀

局部敏感哈希(LSH)技术是快速近似最近邻(ANN)搜索中的一个关键方法,广泛应用于实现高效且准确的相似性搜索。这项技术对于许多全球知名的大型科技公司来说是不可或缺的,包括谷歌、Netflix、亚马逊、Spotify…

网站推广方法及特点个人跨境电商怎么做

看的过程中,一直在看时间,只剩30分钟了,20分,15分了,主人公怎么还没发达。 因为那种痛苦,绝望,沮丧,真的可以隔着屏幕传递过来。 你会带着儿子住厕所么? 你会拼了老命赶时…

如何提高网站的访问量培训网站平台如何推广

1.内部类 内的五大成员:属性、方法、构造方法、代码块、内部类 解释:在一个类的里面,再定义一个类。举例:在A类的内部定义B类,B类就被称为内部类注意:内部类表示的事物是外部类的一部分,内部类单独出现没…

怎么上传网站iis绥中做网站

基础知识 渐变:gradient 在两个或者多个颜色之间显示平稳过度。由浏览器生成。 线性渐变:line-gradient(过渡方向,初始颜色,结束颜色)。注意过渡方向默认从上到下。 1、支持多颜色渐变,多个值,就是从多个…

重庆建设工程招标信息网seo网站内容优化

您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们浏览一下这篇文章,研究如何解决表达式Java非法开头错误。 这是一个动态错误,这意味着编译器会发现某些不符合Java编程规则或语法的内容。 初学者大多会遇到Java中的…

网站系统分析的步骤有哪些免费的正能量视频素材网站

问题描述 后端再给前端返回数据,使用Long类型的时候存在精度丢失问题。 原因分析: 分布式项目中广泛使用雪花算法生成ID作为数据库表的主键,Long类型的雪花ID有19位,而前端接收Long类型用的是number类型,但是number…

创同盟做网站巴中住房建设部网站

1. grep常用参数 -i忽略大小写-w精准匹配整词-v结果取反(匹配指定的字符串以外的内容)-A关键字所在行的后几行也一起显示-B关键字所在行的前几行也一起显示-C关键字所在行的前后几行行一起显示 2. 常用命令 2.1 从文件中查找关键词 # 精准匹配 grep linux test.txt# 从多个…

详细介绍:【Linux】Linux文件系统详解:从磁盘到文件的奥秘

详细介绍:【Linux】Linux文件系统详解:从磁盘到文件的奥秘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

Which side of a 2d curve is a point on

https://math.stackexchange.com/questions/1288309/which-side-of-a-2d-curve-is-a-point-on

20250923

今天上了工程实训课,看了机床是什么样子,又学习了英语,认识了几个单词,我觉得今天也十分充实。 就是这个课后作业任务竟然如此繁重,离散数学作业还没写,并且英语还有任务,现在准备进行对于反码补码的学习了,等…

CCPC秦皇岛 2023 M Inverted

一.题面: 点这里 二.分析: 1.性质分析: 首先,对于题目中复杂的过程描述,我们应当找到生成新图的本质。 考虑对于第 \(i\) 次操作的意义,通过点 \(u\) 生成了一个全新的点 \(u\),然后对于 \(\forall_{v\in V(u)}…

HTTPS 映射如何做?(HTTPS 映射配置、SNI 映射、TLS 终止、内网映射与 iOS 真机验证实战) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …