Flutter地理数据解析插件wkt_parser的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

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

1 回复

更多关于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数据:

  1. 导入必要的包。
  2. 使用WKT.parse方法来解析WKT字符串。
  3. 处理解析后的地理数据。

以下是一个完整的代码示例:

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插件可能支持多种几何类型(如LineStringPolygon等),你可以根据实际需求扩展这个示例来处理其他类型的几何数据。

回到顶部