高德地图判断点的位置是否在浏览器可视区域内

业务场景如下:

1.在地图上点击企业位置mark时,地图不做缩放和移动操作(能点击mark,说明该位置肯定在可视区域内)。

2.点击右侧企业列表的企业时,如果企业的位置不在当前可视区域内,就需要将地图平滑的移动到该企业位置,并且需要缩小地图,先查看到该企业位于哪个区域,再将地图放大到之前缩放的级别。

实现思路:

高德地图有几个关系判断的API:判断点是否在线上、点是否在多边形内、面与面的几何关系,可看下方链接示例

https://lbs.amap.com/api/javascript-api/example/relationship-judgment/is-point-on-segment

暂时没有看到有API能直接实现判断点是否在当前地图可视范围内,所以就想的使用判断点是否在多边形内来实现。

1.要使用判断点是否在多边形内来实现,就必须先将当前地图可视范围想象为多边形,获取其四边的路径位置,因为界面是方形的,所以只需要获取四个点的位置即可。

2.高德地图提供啦获取当前可是范围的bounds API,map.getBounds(),可以获取到东北角和西南角的坐标位置。

3.通过东北角和西南角的坐标再去获取到东南角和西北角的坐标位置,就有啦四个点的位置。

4.通过API  AMap.GeometryUtil.isPointInRing(point, path)判断是否在这四个点组成的面内。

注:path里坐标位置的先后顺序很重要。

实现方法:

creatEnterpriseDetailMark (markerColor, options) {
  const bounds = this.Map.getBounds();

  const NorthEast = bounds.getNorthEast();
  const SouthWest = bounds.getSouthWest();
  const SouthEast = [NorthEast.lng, SouthWest.lat];
  const NorthWest = [SouthWest.lng, NorthEast.lat];
  const path = [[NorthEast.lng, NorthEast.lat], SouthEast, [SouthWest.lng, SouthWest.lat], NorthWest]; // 将地图可视区域四个角位置按照顺序放入path,用于判断point是否在可视区域
  const isPointInRing = AMap.GeometryUtil.isPointInRing(options.position, path); // 判断point是否在可视区域
  let zoom;
  this.Map.remove(this.areaMarks);

  const icon = markerColor ? markerColor : ‘#4fd0f7‘;
  if (!options.position) {
    return;
  }
  // this.Map.setZoom(11);
  // this.Map.panTo(options.position);

  const enterpriseMarker = new AMap.CircleMarker({ // 绘制企业位置mark
    map: this.Map,
    center: options.position,
    radius: 8,
    strokeColor: ‘white‘,
    strokeWeight: 2,
    strokeOpacity: 0.5,
    fillColor: icon,
    fillOpacity: 1,
    zIndex: 10,
    bubble: true,
    cursor: ‘pointer‘,
    clickable: true,
    extData: {
      id: options.id,
      name: options.name,
      position: options.position
    }
  });
  const changeZoom = () => {
    this.Map.setZoomAndCenter(zoom, options.position);
    this.Map.off(‘zoomend‘, changeZoom); // 移除zoomend事件绑定 https://lbs.amap.com/api/javascript-api/reference/event
  };
  if (!isPointInRing) {
    zoom = this.Map.getZoom(); // 保存当前的缩放级别,用于后面恢复
    // this.Map.setFitView();
    this.Map.setZoom(10);
    this.Map.on(‘zoomend‘, changeZoom);
  }
  this.areaMarks.push(enterpriseMarker);
}

原文地址:https://www.cnblogs.com/amor17/p/10396673.html

时间: 2024-10-12 20:48:36

高德地图判断点的位置是否在浏览器可视区域内的相关文章

判断dom原始是否在可视区域内

isElementInViewport (el, offset = 0) { const box = el.getBoundingClientRect(), top = (box.top >= 0), left = (box.left >= 0), bottom = (box.bottom <= (window.innerHeight || document.documentElement.clientHeight) + offset), right = (box.right <=

判断元素是否在可视区域内

如果页面有头部置顶和底部置底的元素,需要自行进行计算: scrollTop  +   头部置顶元素高度 screenHeight - (置顶和置底元素的高度) //元素距离页面顶部的距离 var eleTop = $("#ele").offset().top; //元素本身的高度 var eleHeight = $("#ele").height(); //页面滚动的距离 var scrollTop = $(window).scrollTop(); //可视区域高度

IOS原生地图与高德地图

原生地图 1.什么是LBS LBS: 基于位置的服务   Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位      2.基站定位      3.WIFI定位 3.框架 MapKit:地图框架,显示地图 CoreLocation:定位框架,没有地图时也可以使用定位. 4.如何使用原生地图<MapKit> 和定位<CoreLocation> MapKit: 1) 初始化MapView _map

百度地图API和高德地图API资料集锦

[高德地图API]从零开始学高德JS API(五)路线规划--驾车|公交|步行 [高德地图API]从零开始学高德JS API(四)搜索服务--POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 [高德地图API]从零开始学高德JS API(二)地图控件与插件--测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 [高德地图API]从零开始学高德JS API

【python】获取高德地图省市区县列表

项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功能. 看到高德地图的js的demo里面有这样的展示页面:http://lbs.amap.com/api/javascript-api/example/u/2001-2/,所以我就直接利用它来分析. 1. 省列表 省的列表是直接写死在这个界面里的,所以我也照搬,把省都直接写死: provinceLis

如何实现在H5里调起高德地图APP?(上)

这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发中,我们会在地图上标记marker点或者使用地图上的poi点,这时候如果能在高德地图客户端展示这个位置的话,用户就可以使用导航或者路线规划等功能前往指定地点,起到引导用户前往的作用,因此JSAPI提供的调起高德地图并显示点标记或者poi点的功能,以满足此类需求. 点标记位置展示 通常我们都使用Mar

javascript判断某种元素是否进入可视区域

判断是否在指定的可视区域内,先用最简单的方式,比如整个页面为可视区域 找到几个关键因素: sTop= $(window).scrollTop();  //滚动条距顶部的高度 clientHeight= document.documentElement.clientHeight; //可视区域的高度 pos =  = $("#pointinfo_" + markers[i].id).offset().top;    //指定的元素上方距顶部的高度 pos1  = $("#poi

利用高德地图完成用户地图选址,包括搜索位置和标签固定居中

这两天一直捣鼓着地图的选址功能,需要达到的要求是:1,能用户定位  2,大头针固定在地图中心,拖动地图停止后获取到该大头针的位置信息    3,能通过搜索框搜索到我们输入的地址 主要思路:大头针分为两个   一个是用户的位置大头针  另一个是所选取的位置的大头针(包括拖动后的大头针和搜索功能查找到位置的大头针,公用一个大头针  )并且两个大头针都成为控制器器属性. 我使用到的高德地图sdk是: 'AMap3DMap' , '5.2.1' #高德3D地图 'AMapSearch' , '5.2.1

iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)

[objc] view plaincopy  1. BOOL hasBaiduMap = NO;   2.         BOOL hasGaodeMap = NO;   3.            4.         if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){   5.             hasBaiduMap = YES;   6.