python 二维坐标多边形 计算多边形中心点,以及距该中心点最远的距离

def center_geolocation(geolocations):
	'''
	输入多个经纬度坐标(格式:[[lon1, lat1],[lon2, lat2],....[lonn, latn]]),找出中心点
	:param geolocations:
	:return:中心点坐标  [lon,lat]
	'''
	#求平均数  同时角度弧度转化 得到中心点
	x = 0	# lon
	y = 0	# lat
	z = 0
	lenth = len(geolocations)
	for lon, lat in geolocations:
		lon = radians(float(lon))
		#  radians(float(lon))   Convert angle x from degrees to radians
		# 	                    把角度 x 从度数转化为 弧度
		lat = radians(float(lat))
		x += cos(lat) * cos(lon)
		y += cos(lat) * sin(lon)
		z += sin(lat)
		x = float(x / lenth)
		y = float(y / lenth)
		z = float(z / lenth)
	return (degrees(atan2(y, x)), degrees(atan2(z, sqrt(x * x + y * y))))

#得到离中心点里程最近的里程

def geodistance(lon1,lat1,lon2,lat2):
	'''
	得到两个经纬度坐标距离 单位为千米 (计算不分前后顺序)
	:param lon1: 第一个坐标 维度
	:param lat1: 第一个坐标 经度
	:param lon2: 第二个坐标 维度
	:param lat2: 第二个坐标 经度
	:return: distance 单位千米
	'''
	# lon1,lat1,lon2,lat2 = (120.12802999999997,30.28708,115.86572000000001,28.7427)
	lon1, lat1, lon2, lat2 = map(radians, [float(lon1), float(lat1), float(lon2), float(lat2)])  #经纬度转换成弧度
	dlon=lon2-lon1
	dlat=lat2-lat1
	a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
	distance=2*asin(sqrt(a))*6371*1000  #地球平均半径,6371km
	distance=round(distance/1000,3)
	print(distance)
	return distance

def getMaxestDistance(geolocations,centre):
	'''
	中心点 距离 多个经纬度左边 最远的距离
	:param geolocations: 多个经纬度坐标(格式:[[lon1, lat1],[lon2, lat2],....[lonn, latn]])
	:param centre: 中心点   centre [lon,lat]
	:return: 最远距离  千米
	'''
	distantces=[]
	for lon, lat in geolocations:
		d=geodistance(lat,lon,centre[1],centre[0])
		distantces.append(d)
	# print(distantces)
	return max(distantces)

def getOnePolyygen(geolocations):
	'''
	输入多个经纬度坐标(格式:[[lon1, lat1],[lon2, lat2],....[lonn, latn]]),找出距该多边形中心点最远的距离
	:param geolocations:多个经纬度坐标(格式:[[lon1, lat1],[lon2, lat2],....[lonn, latn]])
	:return:center,neartDistance  多边形中心点  最远距离
	'''
	center=center_geolocation(geolocations) # 得到中心点
	neartDistance=getMaxestDistance(geolocations,center)
	# print(center,"-----------------",neartDistance)
	return center,neartDistance

 

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值