当前位置: 首页 > news >正文

南昌网站优化公司精品课程网站建设建议

南昌网站优化公司,精品课程网站建设建议,网站给假冒伪劣产品做推广,梅州网站建设wlwl一、业务场景 最近在研发的项目#xff0c;在做可视化层#xff0c;在全球地图上#xff0c;对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后#xff0c;需要将我们已有的数据库数据(业务项目)按照地址的经纬度#xff0c;映射到…一、业务场景 最近在研发的项目在做可视化层在全球地图上对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后需要将我们已有的数据库数据(业务项目)按照地址的经纬度映射到这些点位上找到对应的id建立联系。简化后的处理逻辑如下 参考上图 纬度为y轴跨度为35间距为1 经度为x轴跨度为61间距为1 橙色的点为业务项目对应的经纬度信息(x’,y’) 需要计算出二维坐标中整数点上最靠近的点(利用三角形三边公式) MIN(aa bb) 第一层粉色层 第二层灰色层 … 由于我们国家的地图存在边界并不是一个规规矩矩的4方形且我国的内陆海渤海的包围圈海洋地区并不计入在二维坐标中跨度为1的情况下会出现项目对应的坐标点需要一层一层对外查找的情况。 二、点位数据 CREATE TABLE china_grid_map (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 自增主见,lng decimal(20,6) NOT NULL COMMENT 经度,lat decimal(20,6) NOT NULL COMMENT 纬度,PRIMARY KEY (id),KEY idx_lat (lng),KEY idx_lng (lat) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT自定义中国陆地地图网格经纬度信息;部分示例数据 INSERT INTO china_grid_map (id, lng, lat) VALUES (1, 74.000000, 39.000000),(3, 74.000000, 40.000000),(4, 75.000000, 37.000000),(5, 75.000000, 38.000000),(7, 75.000000, 39.000000),(9, 75.000000, 40.000000),(11, 76.000000, 37.000000),(13, 76.000000, 38.000000),(15, 76.000000, 39.000000),(17, 76.000000, 40.000000),(18, 77.000000, 36.000000),(20, 77.000000, 37.000000),(22, 77.000000, 38.000000),(24, 77.000000, 39.000000),(26, 77.000000, 40.000000),(28, 77.000000, 41.000000),(30, 78.000000, 36.000000),(32, 78.000000, 37.000000),(34, 78.000000, 38.000000),(36, 78.000000, 39.000000),(38, 78.000000, 40.000000),(40, 78.000000, 41.000000),(42, 79.000000, 32.000000),(44, 79.000000, 34.000000),(46, 79.000000, 35.000000),... (1911, 131.000000, 44.000000),(1913, 131.000000, 45.000000),(1915, 131.000000, 46.000000),(1917, 131.000000, 47.000000),(1920, 132.000000, 46.000000),(1922, 132.000000, 47.000000),(1925, 133.000000, 46.000000),(1927, 133.000000, 47.000000),(1929, 133.000000, 48.000000),(1930, 134.000000, 47.000000),(1932, 134.000000, 48.000000);三、实现方式 v1.0 版本 MySQL-直取数据 假设要求的项目坐标点为: {“lat”: “31.231706”, “lng”: “121.472644”} 第一版本 直接利用sql查找出最靠近的四个点然后再计算距离。 select id, lng, lat from china_grid_map where lat (select lat as latright from china_grid_map where lat 31.231706 order by lat limit 1)and lat (select lat as latleft from china_grid_map where lat 31.231706 order by lat desc limit 1)and lng (select lng as lngright from china_grid_map where lng 121.472644 order by lng limit 1)and lng (select lng as lngLeft from china_grid_map where lng 121.472644 order by lng desc limit 1);如果查到了点 就求出最小的距离对应的点 如果没查到重复上面点查询扩大点数 存在的问题 1.SQL复杂如果点位正好在边界上无论扩充多少层都查不到数据 2.耗时久 v2.0 版本 redis-Zset {“lat”: “31.231706”, “lng”: “121.472644”} 已经知道步长为1所以最靠近的点如图1中所示直接对x’y’向下向上取整组合。 利用redis缓存使用Zset模型 key存储序列化后的信息score用经度值 利用Zset的对经度范围取值score (x,x1) 对返回的数据再挨个查找找出映射的id 存在的问题 1.耗时久因为按照经度 (x,x1)取值 还是会得到很多数据需要循环对比数据 才能得到对应的id 2.批量导入数据时需要反反复复的从redis中取数据 v3.0 版本 内存-HashMap MapString,Long CACHE new HashMap(); key lat “-” lng value id 按照步骤二的模式获取到点列表后从map中get(key); 如果第一层4个点未命中扩大到第二层 存在的问题 1.存在内存中分布式系统部署每台服务器上的内存各自独立[好在该点位信息一旦生成后不会修改在项目初始化后不存在插入、删除相关的操作只要考虑查询的时间效率] 2.791个点消耗的存储比较大113944 v4.0 版本 内存-二维数组 long[][] 由于点位是提前知道不会变动且是步长为1的有规则的数据 经度数据区间 74 - 134 总个数 61 纬度数据区间 : 19 - 53 总个数 35 private static long[][] GRID_ARRAY new long[61][35]; 在项目启动时初始化缓存数据 public void initCacheByArray() {//先获取到所有的点位数据ListGridMapDO mapDOS baseMapper.listAllDO();if (CollectionUtil.isEmpty(mapDOS)) {return;}//循环将数据放入到缓存中for (GridMapDO grid : mapDOS) {int arrayLng getArrayLng(grid.getLng());int arrayLat getArrayLat(grid.getLat());if (arrayLng -1 || arrayLat -1) {//存在越界的点位log.info(存在越界点位[经度:{},纬度:{}],跳过缓存, grid.getLng(), grid.getLat());continue;}//找到对应的位置 将id存储为数组的值GRID_ARRAY[arrayLng][arrayLat] grid.getId();}log.info( 缓存结束,缓存内容:[{}] , JSONObject.toJSONString(GRID_ARRAY));}private int getArrayLng(BigDecimal lng) {//防止数组下标越界int intLng lng.intValue();if (intLng 74 || intLng 134) {return -1;}return lng.intValue() - 74;}private int getArrayLat(BigDecimal lat) {int intLat lat.intValue();if (intLat 19 || intLat 53) {return -1;}return lat.intValue() - 19;}用的时候 只需要计算出点位直接从数组中取对应的下标即可。 如果 GRID_ARRAY[x][y] 0L 说明点位不是中国的大陆地图 如果 GRID_ARRAY[x][y] ! 0L 计算出该点的距离平方 存在的问题 1.存在内存中分布式系统部署每台服务器上的内存各自独立[好在该点位信息一旦生成后不会修改在项目初始化后不存在插入、删除相关的操作只要考虑查询的时间效率] 2.791个点消耗的存储比V3.0版本减少了1个数量级但是数组用的是连续的存储空间 四、总结 可以多尝试找出最合适项目的结合数据的规律空间换时间 等等 只有实践了 才能找到最佳的吧…
http://www.dnsts.com.cn/news/7598.html

相关文章:

  • 制作模板网站报价以家乡为主题做网站
  • 青岛开发区建设局网站东莞市网站建设平台
  • 青岛网站建设搜q.479185700简单的网页设计作品模板
  • 汽车html静态网站中国金湖建设网站
  • 网站建设基础入门企业建设网站的方式有两种
  • wordpress站标wordpress移动端缓存
  • 网站开发 工资高吗wordpress本地渗透
  • 网站加载很慢网页制作培训班前景
  • 南宁北京网站建设肥西建设局官方网站
  • 如何跟建网站的人员沟通网站上的动效是用ae做的
  • 网站制作企业首页杭州做网站哪家便宜
  • 网站做新闻外链有作用吗专门做网上链接推广的网站
  • 如何让搜素引擎不收录自己的网站如何做全网营销推广
  • 南康市建设局网站优惠券网站怎么做
  • 做胃肠医院网站国家建设标准发布网站在哪里
  • 网站推广的方案设计怎么写淮北建投网站
  • 网站站群建设进度钦州市建设工程质量监督站网站
  • 军博做网站公司网站建设费能计入无形资产
  • 网站建设项目外包合同范本广州番禺区怎么样
  • 怎么寻找做有意做网站的客户wordpress做付费阅读
  • 西安专业做网站的开发网站实训的心得体会
  • 市场体系建设司在官方网站wordpress数据库删除
  • 橡胶塑料制品公司网站建设wordpress自定义表格
  • linux做网站优势wordpress网站生成app应用
  • 素材搜集网站中文网址的作用
  • html5 可以做网站吗wordpress淘宝i主题
  • 解决设计网站问题手机网站做分享到朋友圈
  • 电子商务网站建设课件南平建设集集团网站
  • 开源门户网站建设方案美发营销型网站
  • 东莞网站建设制作公司怎么做离线网站