Flutter地理数据解析插件wkt_parser的使用
Flutter地理数据解析插件wkt_parser的使用
安装
在 pubspec.yaml
文件中添加 wkt_parser
依赖项,然后运行 pub get
下载新依赖。
dependencies:
wkt_parser: any # 或者是最新版本
使用示例
你可以将任何从 epsg.io
复制的 OGC WKT / ESRI WKT 定义字符串转换为 Map<String, dynamic>
格式,然后进一步转换为 JSON,以实现与其他编程语言的完全互操作性。以下是一个使用 EPSG:23700 的示例。
import 'package:wkt_parser/wkt_parser.dart' as wkt_parser;
void main() {
// WKT CRS 字符串
var wktText =
'PROJCS["HD72 / EOV",GEOGCS["HD72",DATUM["Hungarian_Datum_1972",SPHEROID["GRS 167",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[52.17,-71.82,-14.9,0,0,0,0],AUTHORITY["EPSG","6237"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4237"]],PROJECTION["Hotine_Oblique_Mercator_Azimuth_Center"],PARAMETER["latitude_of_center",47.14439372222222],PARAMETER["longitude_of_center",19.04857177777778],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",0.99993],PARAMETER["false_easting",650000],PARAMETER["false_northing",200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Y",EAST],AXIS["X",NORTH],AUTHORITY["EPSG","23700"]]';
// 解析后的对象类型为 ProjWKT
var output = wkt_parser.parseWKT(wkText);
// 这返回一个 JSON 编码的 WKT 字符串
print(output.toString());
}
结果应该是(JSON 编码):
{
"type": "PROJCS",
"name": "HD72 / EOV",
"GEOGCS": {
"name": "HD72",
"DATUM": {
"name": "Hungarian_Datum_1972",
"SPHEROID": {
"name": "GRS 1967",
"a": 6378160.0,
"rf": 298.247167427,
"AUTHORITY": {
"EPSG": "7036"
}
},
"TOWGS84": [52.17, -71.82, -14.9, 0.0, 0.0, 0.0, 0.0],
"AUTHORITY": {
"EPSG": "6237"
}
},
"PRIMEM": {
"name": "greenwich",
"convert": 0.0,
"AUTHORITY": {
"EPSG": "8901"
}
},
"UNIT": {
"name": "degree",
"convert": 0.0174532925199433,
"AUTHORITY": {
"EPSG": "9122"
}
},
"AUTHORITY": {
"EPSG": "4237"
}
},
"PROJECTION": "Hotine_Oblique_Mercator_Azimuth_Center",
"latitude_of_center": 47.14439372222222,
"longitude_of_center": 19.04857177777778,
"azimuth": 90.0,
"rectified_grid_angle": 90.0,
"scale_factor": 0.99993,
"false_easting": 650000.0,
"false_northing": 200000.0,
"UNIT": {
"name": "metre",
"convert": 1.0,
"AUTHORITY": {
"EPSG": "9001"
}
},
"AXIS": [
["Y", "EAST"],
["X", "NORTH"]
],
"AUTHORITY": {
"EPSG": "23700"
},
"projName": "Hotine_Oblique_Mercator_Azimuth_Center",
"units": "meter",
"to_meter": 1.0,
"datumCode": "hungarian_datum_1972",
"ellps": "GRS 1967",
"a": 6378160.0,
"rf": 298.247167427,
"datum_params": [52.17, -71.82, -14.9, 0.0, 0.0, 0.0, 0.0],
"k0": 0.99993,
"lat0": 0.8228248943093227,
"longc": 0.3324602953246919,
"x0": 650000.0,
"y0": 200000.0,
"alpha": 1.5707963267948966,
"srsCode": "HD72 / EOV"
}
更多关于Flutter地理数据解析插件wkt_parser的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地理数据解析插件wkt_parser的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter地理数据解析插件wkt_parser
的使用,这里是一个简单的代码案例来展示如何解析WKT(Well-Known Text)格式的地理数据。WKT是一种文本标记语言,用于表示矢量几何对象。
首先,确保你的Flutter项目中已经添加了wkt_parser
插件。你可以在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
wkt_parser: ^x.y.z # 请将x.y.z替换为当前的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用wkt_parser
插件来解析WKT数据:
- 导入必要的包。
- 使用
WKT.parse
方法来解析WKT字符串。 - 处理解析后的地理数据。
以下是一个完整的代码示例:
import 'package:flutter/material.dart';
import 'package:wkt_parser/wkt_parser.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('WKT Parser Demo'),
),
body: Center(
child: WKTParserDemo(),
),
),
);
}
}
class WKTParserDemo extends StatefulWidget {
@override
_WKTParserDemoState createState() => _WKTParserDemoState();
}
class _WKTParserDemoState extends State<WKTParserDemo> {
String? wktString = "POINT (30 10)";
String? result;
void parseWKT() {
try {
// 使用WKT.parse方法来解析WKT字符串
Geometry? geometry = WKT.parse(wktString!);
// 根据解析后的Geometry类型进行处理
if (geometry is Point) {
Point point = geometry as Point;
setState(() {
result = "Parsed Point: (${point.coordinates!.first}, ${point.coordinates!.last})";
});
} else {
setState(() {
result = "Parsed Geometry: ${geometry?.toJson()}";
});
}
} catch (e) {
setState(() {
result = "Error parsing WKT: $e";
});
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('WKT String:'),
TextField(
decoration: InputDecoration(border: OutlineInputBorder()),
controller: TextEditingController(text: wktString ?? ""),
onChanged: (value) {
setState(() {
wktString = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: parseWKT,
child: Text('Parse WKT'),
),
SizedBox(height: 20),
Text(result ?? "No result yet."),
],
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个文本字段用于输入WKT字符串,一个按钮用于触发解析操作,以及一个文本显示区域用于显示解析结果。
WKT.parse
方法用于解析输入的WKT字符串,并返回一个Geometry
对象。- 根据返回的
Geometry
对象的类型(在这个示例中我们只处理了Point
类型),我们可以进一步处理或显示解析后的地理数据。
注意:wkt_parser
插件可能支持多种几何类型(如LineString
、Polygon
等),你可以根据实际需求扩展这个示例来处理其他类型的几何数据。