package com.lairen.admin.controller.platform;import java.text.DecimalFormat;public class AngleUtil {/*** 求B点经纬度** @param A 已知点的经纬度,* @param distance   AB两地的距离  单位km* @param angle  AB连线与正北方向的夹角(0~360)*/final static double Rc = 6378137;final static double Rj = 6356725;double m_LoDeg, m_LoMin, m_LoSec;double m_LaDeg, m_LaMin, m_LaSec;double m_Longitude, m_Latitude;double m_RadLo, m_RadLa;double Ec;double Ed;private final static DecimalFormat DOUBLE_FORMAT = new DecimalFormat("#.000000");public AngleUtil(double longitude, double latitude) {m_LoDeg = (int) longitude;m_LoMin = (int) ((longitude - m_LoDeg) * 60);m_LoSec = (longitude - m_LoDeg - m_LoMin / 60.) * 3600;m_LaDeg = (int) latitude;m_LaMin = (int) ((latitude - m_LaDeg) * 60);m_LaSec = (latitude - m_LaDeg - m_LaMin / 60.) * 3600;m_Longitude = longitude;m_Latitude = latitude;m_RadLo = longitude * Math.PI / 180.;m_RadLa = latitude * Math.PI / 180.;Ec = Rj + (Rc - Rj) * (90. - m_Latitude) / 90.;Ed = Ec * Math.cos(m_RadLa);}/*** @Return:坐标 B点的经纬度*/public static String getMyLatLng(AngleUtil A, double distance, double angle) {double dx = distance * 1000 * Math.sin(Math.toRadians(angle));double dy = distance * 1000 * Math.cos(Math.toRadians(angle));double bjd = (dx / A.Ed + A.m_RadLo) * 180. / Math.PI;double bwd = (dy / A.Ec + A.m_RadLa) * 180. / Math.PI;bjd = Double.parseDouble(DOUBLE_FORMAT.format(bjd));bwd = Double.parseDouble(DOUBLE_FORMAT.format(bwd));String lnglat = bjd + "," + bwd;return lnglat;}/*** 获取两点坐标距离(米)** @param lng1 起始经度* @param lat1 起始纬度* @param lng2 目地地经度* @param lat2 目的地纬度* @return*/public static int getDistance(double lng1, double lat1, double lng2, double lat2) {/*double x, y, distance;x = (lon2 - lon1) * PI * R * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;y = (lat2 - lat1) * PI * R / 180;distance = Math.hypot(x, y);return (int) (distance + 0.5);*/double dx = lng1 - lng2; // 经度差值double dy = lat1 - lat2; // 纬度差值double b = (lat1 + lat2) / 2.0; // 平均纬度double Lx = Math.toRadians(dx) * Rc * Math.cos(Math.toRadians(b)); // 东西距离double Ly = Rc * Math.toRadians(dy); // 南北距离return (int) Math.sqrt(Lx * Lx + Ly * Ly);}/*** @param longitude  经度* @param latitude   维度* @param linelength 距离(单位:km)* @param brim       几边形* @return*/public static String getLongAndLatString(double longitude, double latitude, double linelength, int brim) {int angle = 0;StringBuffer sb = new StringBuffer();String myLatLng = "";if (brim > 0) {angle = 360 / brim;AngleUtil angleUtil = new AngleUtil(longitude, latitude);for (int i = 0; i < brim; i++) {myLatLng = AngleUtil.getMyLatLng(angleUtil, linelength, angle * (i + 1));sb.append(myLatLng + ",");}} else {sb.append("请输入正确的参数!!!");}String longAndLats = sb.toString();return longAndLats.substring(0, longAndLats.length() - 1);}public static void main(String[] args) {double longitude = 114.502461;double latitude = 38.045474;double linelength = 1000;int angle = 6;String longAndLatString = AngleUtil.getLongAndLatString(longitude, latitude, linelength, angle);System.out.println(longAndLatString);}
}


												

根据经纬度画多边形(返回各个顶点坐标)相关推荐

  1. python画二次函数图像的顶点坐标为_二次函数顶点坐标公式

    函数在数学中占有很大的比例,但是函数的学习却很复杂.其考察的内容有很多方面, 开口方向.对称轴及坐标公式都是考察的重点.下面小编为大家整理了二次函数顶点坐标的 相关公式,希望能帮到大家. 一.基本简介 ...

  2. 五边形顶点坐标_任意给定五边形的5个顶点坐标,利用多边形填充的扫描算法,编写程序生成一个实心五边形...

    // // 功能: 填充多边形 // // 参数: lpPoints: 指向顶点坐标数组的指针,数组类型为POINT,多边形由它们顺次封闭连接得到 // nCount: 顶点的个数 // nColor ...

  3. OpenLayers 获得多边形顶点坐标

    OpenLayers官网目前为止,并没有提供获取多边形顶点坐标的直接DEMO.各位小菜鸟是不是很心机如焚.满世界找不到答案,自我怀疑了呢?不要着急,在这里将会柳暗花明.看官请看: 1.通过debug可 ...

  4. 识别图片文本坐标;透视变换;输入点集坐标,输出凸包(最大多边形)顶点坐标

    '''识别图片文本坐标 ''' import cv2 import pytesseract from pytesseract import Output from PIL import Image f ...

  5. 已知多边形各顶点坐标如何计算多边形面积

    多边形的面积可通过分割成很多个三角形面积之和来求得! 通过多边形各顶点坐标可以求得各边长,再采用海伦公式,计算分割后的小三角形的面积. 海伦公式如下: 假设在平面内,有一个三角形,边长分别为a.b.c ...

  6. PCL ——最小包围盒(画出了最小包围盒并求出顶点坐标)

    PCL --最小包围盒 2018年09月21日 15:31:01 不懂音乐的欣赏者 阅读数:35 标签: PCL包围盒外接矩形最小矩形收起 个人分类: PCL 1.包围盒简介   包围盒也叫外接最小矩 ...

  7. Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形

    OpenCV 中的绘图函数 使用 OpenCV 绘制不同几何图形,其中包括的函数有 cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2. ...

  8. 问题三十二:怎么用ray tracing画多边形(polygon, triangle)

    画多边形主要分为两步: 1,光线和多边形所在的平面相交,求得交点: 2,判断交点是否在多边形内: 32.1 光线和多边形所在的平面相交 分别定义光线.多边形和多边形所在平面.光线和平面的方程如下:(注 ...

  9. python用circle画多边形_pythonopencv圆、椭圆与任意多边形的绘制

    圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...

最新文章

  1. python 变量转字符串_[Python Basic] 字符串处理以及类型转换 2
  2. HDU - 3551 Hard Problem(一般图最大匹配)
  3. WinRAR 命令行简体中文说明
  4. 从堆里找回“丢失”的代码相关命令简介
  5. C语言形参和实参的区别
  6. SpringBoot+Prometheus+Grafana实现应用监控和报警
  7. git——IntelliJ中配置使用git,码云管理项目
  8. eclipse.ini vm参数– eclipse.ini文件位置Mac,Windows
  9. Java基础教程【第七章:包和接口】
  10. 栈(操作受限的线性表)---C语言版
  11. 集成Android SlidingMenu(SlideMenu)
  12. iis php 内存溢出,iis-7.5 - HTTP错误405.0-不允许方法IIS 7.5模块staticfilemodule - 堆栈内存溢出...
  13. 高可用之2——存储b
  14. Linux基础知识、常用命令和操作
  15. elasticsearch搜索IK分词器实现单个字搜索
  16. C语言模拟回合制游戏 源码
  17. AES - Openssl AES 函数说明
  18. 用计算机弹下课铃声,智能广播打铃系统(校园广播上下课铃声)V7.2.1 免费版
  19. Android+H5开发
  20. 柠萌影业三次冲刺IPO,爆款制造机的压力大爆了

热门文章

  1. 学习记录 flex布局(弹性盒子)flex-direction
  2. QQ和360干起来了,中国互联网2大服务商进行白刃战
  3. RK3399工控机-给你不一样的工控体验
  4. 小觅双目相机如何使用_小觅双目深度相机亮相GTC2019
  5. Java工程师成神之路:程序员的学习路线规划以及书籍推荐
  6. ubuntu14.04系统下对SD卡分区
  7. Unity场景渲染之混合光照模式下的 Baked Indrect(十)
  8. 【目录】王爽《汇编语言》
  9. 一只超级愤怒的租房者对黑中介(鹏基伟业的控诉)
  10. 五、再次执行hello-world.cc