# MapTools **Repository Path**: cjf_90/MapTools ## Basic Information - **Project Name**: MapTools - **Description**: 定位转换,定位相关基类。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-13 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MapTools MapTools 是一个用于处理地图数据、坐标转换和地理空间计算的 Java 工具库。它提供了丰富的 API 来支持地图开发中的常见操作,如坐标转换、距离计算、面积计算、多边形判断等。 ## 特性 - **坐标转换**:支持百度坐标 (BD-09)、高德坐标 (GCJ-02) 和 WGS84 坐标之间的相互转换。 - **距离与方位计算**:使用 Haversine 公式和 Vincenty 算法进行精确的距离和方位角计算。 - **几何形状支持**:包括点(LatLng)、多边形(Polygon)、折线(Polyline)、矩形(LatLngBounds)和圆形(Circle)等几何形状的操作。 - **面积计算**:提供多种方法来计算多边形的面积。 - **多边形包含判断**:可以判断一个点是否在给定的多边形内部。 - **路径距离计算**:支持路径上所有线段的总距离计算。 - **地理围栏检测**:能够检测一个点是否在一个圆形或不规则多边形的地理围栏内。 - **坐标格式转换**:支持十进制度数与度分秒之间的转换。 ## 安装 ### Gradle ```gradle implementation 'com.gitee.cjf_90:MapTools:0.0.9' ``` ## 使用示例 ### 坐标转换 ```java LatLng wgs84Point = new LatLng(39.9042, 116.4074, CoordinateType.WGS84); LatLng baiduPoint = CoordinateConverter.toBaiDu(wgs84Point); // 转换为百度坐标 LatLng amapPoint = CoordinateConverter.toAMap(wgs84Point); // 转换为高德坐标 ``` ### 距离计算 ```java LatLng pointA = new LatLng(39.9042, 116.4074, CoordinateType.WGS84); LatLng pointB = new LatLng(40.7128, 74.0060, CoordinateType.WGS84); BearingDistanceCache distance = pointA.distance(pointB); double distanceInMeters = distance.getDistance(); // 获取两点之间的距离(米) float bearing = distance.getInitialBearing(); // 获取从 A 到 B 的初始方位角 ``` ### 多边形包含判断 ```java List polygon = Arrays.asList( new LatLng(39.9042, 116.4074, CoordinateType.WGS84), new LatLng(39.9042, 116.4174, CoordinateType.WGS84), new LatLng(39.9142, 116.4174, CoordinateType.WGS84), new LatLng(39.9142, 116.4074, CoordinateType.WGS84) ); LatLng testPoint = new LatLng(39.9092, 116.4124, CoordinateType.WGS84); boolean isInside = PolygonUtil.containsLocation(testPoint, polygon, false); // 判断点是否在多边形内 ``` ### 圆形地理围栏检测 ```java LatLng center = new LatLng(39.9042, 116.4074, CoordinateType.WGS84); int radius = 1000; // 半径 1000 米 LatLng testPoint = new LatLng(39.9052, 116.4084, CoordinateType.WGS84); boolean isInside = CalculatorUtils.isPointInsideVincenty(center, radius, testPoint); // 判断点是否在圆形围栏内 ``` ### 面积计算 ```java List polygon = Arrays.asList( new LatLng(39.9042, 116.4074, CoordinateType.WGS84), new LatLng(39.9042, 116.4174, CoordinateType.WGS84), new LatLng(39.9142, 116.4174, CoordinateType.WGS84), new LatLng(39.9142, 116.4074, CoordinateType.WGS84) ); double areaInSquareMeters = CalculatorUtils.area(polygon); // 计算多边形面积(平方米) ``` ### 路径距离计算 ```java List path = Arrays.asList( new LatLng(39.9042, 116.4074, CoordinateType.WGS84), new LatLng(40.7128, 74.0060, CoordinateType.WGS84), new LatLng(51.5074, -0.1278, CoordinateType.WGS84) ); double totalDistance = CalculatorUtils.distanceVincenty(path); // 计算路径总距离(米) ``` ## 贡献 欢迎贡献代码和提出问题!请先阅读我们的 [贡献指南](CONTRIBUTING.md)。 ## 许可证 本项目使用 MIT 许可证。更多信息请查看 [LICENSE](LICENSE) 文件。