Flutter LV95坐标转换插件lv95的使用
Flutter LV95坐标转换插件lv95的使用
该插件提供了瑞士LV95(CH1903+)坐标与WGS84坐标之间的转换功能。
使用方法
import 'package:lv95/lv95.dart';
void main() {
// 定义一个WGS84坐标
final wgs84 = LatLng(46.93371248052634, 7.120573812162601);
// 将WGS84坐标转换为LV95坐标
final xy = LV95.fromWGS84(wgs84);
print(xy); // 输出 XY(x:1198118.3615880755, y:2575779.6599590005)
// 将LV95坐标转换回WGS84坐标
final wgs84_2 = LV95.toWGS84(xy);
print(wgs84_2); // 输出 LatLng(46.93371394740376, 7.120579242285814)
}
默认实现使用的是快速近似算法。如果你需要更精确但较慢的算法,可以通过指定precise: true
来请求。当使用精确计算时,如果能通过GNSS接收器或其他方式确定高度信息,还可以进一步提高转换的准确性。
import 'package:lv95/lv95.dart';
void main() {
// 定义一个WGS84坐标
final wgs84 = LatLng(46.93371248052634, 7.120573812162601);
// 将WGS84坐标转换为LV95坐标,使用精确算法并指定高度
final xy = LV95.fromWGS84(wgs84, precise: true, height: 431.3);
print(xy); // 输出 XY(x:1198118.3469151012, y:2575779.6827807147)
}
现在结果与由https://github.com/perron2/lv95/blob/master/3提供的官方在线转换工具给出的结果完全一致。
参考
该库使用的计算公式基于瑞士联邦测绘局(swisstopo)提供的官方公式:
- https://github.com/perron2/lv95/blob/master/2 提供了用于计算瑞士保形圆柱投影的公式和常数,以及不同坐标系统之间的转换公式。
示例代码
以下是完整的示例代码:
import 'package:lv95/lv95.dart';
void main() {
// 定义一个WGS84坐标
final wgs84 = LatLng(46.93371248052634, 7.120573812162601);
// 将WGS84坐标转换为LV95坐标
final xy = LV95.fromWGS84(wgs84);
print(xy);
// 将LV95坐标转换回WGS84坐标
final wgs84_2 = LV95.toWGS84(xy);
print(wgs84_2);
// 使用精确算法将WGS84坐标转换为LV95坐标,并指定高度
final xyp = LV95.fromWGS84(wgs84, precise: true, height: 431.3);
print(xyp);
}
更多关于Flutter LV95坐标转换插件lv95的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter LV95坐标转换插件lv95的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用LV95坐标转换插件,通常是为了将瑞士的LV95坐标系(也称为CH1903+坐标系)转换为WGS84坐标系(全球通用的经纬度坐标系),或者进行相反的转换。以下是一个简单的步骤指南,帮助你使用lv95
插件进行坐标转换。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加lv95
插件的依赖:
dependencies:
flutter:
sdk: flutter
lv95: ^1.0.0 # 请确保使用最新版本
然后运行flutter pub get
来安装依赖。
2. 导入包
在你的Dart文件中导入lv95
包:
import 'package:lv95/lv95.dart';
3. 使用lv95
进行坐标转换
将WGS84坐标转换为LV95坐标
void convertWGS84ToLV95() {
// WGS84坐标(纬度,经度)
double latitude = 46.94798; // 例如:苏黎世的纬度
double longitude = 7.44744; // 例如:苏黎世的经度
// 转换为LV95坐标
LV95Coordinate lv95Coordinate = LV95.fromWGS84(latitude, longitude);
print('LV95 X: ${lv95Coordinate.x}');
print('LV95 Y: ${lv95Coordinate.y}');
}
将LV95坐标转换为WGS84坐标
void convertLV95ToWGS84() {
// LV95坐标(X, Y)
double x = 2600000.0; // 例如:苏黎世的X坐标
double y = 1200000.0; // 例如:苏黎世的Y坐标
// 转换为WGS84坐标
WGS84Coordinate wgs84Coordinate = LV95.toWGS84(x, y);
print('WGS84 Latitude: ${wgs84Coordinate.latitude}');
print('WGS84 Longitude: ${wgs84Coordinate.longitude}');
}
4. 运行代码
你可以在Flutter应用的任何地方调用上述函数来进行坐标转换。例如,在main
函数中调用:
void main() {
convertWGS84ToLV95();
convertLV95ToWGS84();
}
5. 示例输出
运行上述代码后,你可能会看到类似以下的输出:
LV95 X: 2600000.0
LV95 Y: 1200000.0
WGS84 Latitude: 46.94798
WGS84 Longitude: 7.44744