根据图片中心点经纬度,计算图片四角的经纬度,并添加到地图中

 leaflet 详情总目录:传送 

        如何把图片在地图中显示?这里分两种情况:1、格式为tif,可以使用 L.imageOverlay,这个是使用geoserver的栅格数据展示图片,具体方法可以查看ImageMosaic 这篇文章;2、png/jpg等格式,如果知道图片对角经纬度,可以直接使用 L.imageOverlay 直接添加即可;如果仅有图片中心点经纬度,这里就需要通过计算来获取图片对角经纬度;如果没有图片相关的经纬度,那就放弃吧!

先看效果图:

今天主要是说一下根据图片中心点经纬度计算图片对角经纬度:

需要计算图片对角经纬度,就需要一些前提条件,如果没办法满足,这篇文章对你也就没啥作用了,不看也罢。

前提条件:1、相机传感器尺寸;2、相机拍摄分辨率;3、相机镜头焦距;4、拍摄高度。

计算公式:GSD = H * a / f;a = 传感器 / 分辨率; 

公式解释:H:拍摄高度 (m);f:相机镜头焦距 (mm);GSD:图片中每像素的真实距离 (m)

例如:传感器:35.7mm x 23.8mm ;拍摄分辨率:9504x6336;相机镜头焦距:40mm;拍摄高度:1000m;则:a = 35.7mm / 9504 = 0.00376mm(23.8mm / 6336 = 0.00376mm);GSD = 1000m * 0.00376mm / 40mm = 0.094m。(这些参数可以查看相机参数,或者问一下购买相机的客服)

前提条件已经准备好了,接下来直接上代码:

        /**
		 * 计算图片对角经纬度
		 * center 中心的坐标 
		 * latLength 图片高度像素
		 * lngLength 图片宽度像素
		 * gsd 
		 */
		computeLatlngByCenter(center, gsd, latLength, lngLength) {
			const latlng = center;
			let width = latLength * gsd;
			let height = lngLength * gsd;
			let one_lng_length = ((40076 * 1000) / 360) * Math.cos((latlng[0] * Math.PI) / 180);
            let one_lat_length = 111320 
			let lngOffSet = width / 2 / one_lng_length; 
			let latOffSet = height / one_lat_length / 2; 
			let north = latlng[0] + latOffSet;
			let south = latlng[0] - latOffSet;
			let east = latlng[1] + lngOffSet;
			let west = latlng[1] - lngOffSet;
			return [
				[north, west],
				[south, east],
			];
		},

注释:one_lng_length :1经度对应的纬线长度;one_lat_length :1纬度对应的经线长度,这个值是固定的;40076:赤道周长。以上数值都是在地球是圆形的基础上,和实际情况是有差距的,如果需要非常精确的数值,那这个方法就不合适了。

按照上面方法就可以算出图片对角的经纬度了,接下来就是把图片显示在地图上了:

        addImageLayer() {
			this.imageList = [
				{
					url: '/src/assets/image/A_01_DSC00520.jpg',
					center: [29.048664363492595, 119.76427712337504],
					height: 1000,
                    width:6336,
                    height:9504
				},
			];
			this.imageList.forEach((item) => {
				let gsd = 0.092;
				let imageBounds = this.computeLatlngByCenter(item.center, gsd,item.width,item.height);
				L.imageOverlay(item.url, imageBounds).addTo(this.map);
			});
		},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

travel_wsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值