Google maps 如何在flatter中包含本机代码以在Google地图上显示KML层?

Google maps 如何在flatter中包含本机代码以在Google地图上显示KML层?,google-maps,flutter,kml,native-code,google-maps-flutter,Google Maps,Flutter,Kml,Native Code,Google Maps Flutter,我一直在研究在我的Flutter应用程序中运行本机代码,以便在我的谷歌地图上显示KML层,虽然我的应用程序运行本机代码(至少在Android上),但我很难让KML的东西正常工作 我已经在我的flatter类中创建了一个MethodChannel来运行本机代码,这很好。请看下面 // Run java code for KML Campus Map Overlay Future<void> _showCampusMap() async { const platform =

我一直在研究在我的Flutter应用程序中运行本机代码,以便在我的谷歌地图上显示KML层,虽然我的应用程序运行本机代码(至少在Android上),但我很难让KML的东西正常工作

我已经在我的flatter类中创建了一个MethodChannel来运行本机代码,这很好。请看下面

// Run java code for KML Campus Map Overlay
  Future<void> _showCampusMap() async {
    const platform = MethodChannel('uk.ac.manchestermaps/kmlLayer');
    try {
      final campusMapOverlay =
          await platform.invokeMethod('retrieveFileFromUrl');
      print(campusMapOverlay);
    } on PlatformException catch (error) {
      print(error);
    }
  }
MainActivity类由以下内容组成

public class MainActivity extends FlutterActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);

    new MethodChannel(getFlutterView(), "**<MY CHANNEL>**").setMethodCallHandler(new MethodCallHandler() {
      @Override
      public void onMethodCall(MethodCall call, MethodChannel.Result result) {

        if (call.method.equals("retrieveFileFromUrl")) {
          retrieveFileFromUrl();
          result.success("KMLLayer Retrieved");
        }

      }
    });
  }

  private void retrieveFileFromUrl() {
    new DownloadKmlFile("**<REMOTE KML FILE>**")
        .execute();
  }

  private class DownloadKmlFile extends AsyncTask<String, Void, byte[]> {
    private final String mUrl;

    public DownloadKmlFile(String url) {
      mUrl = url;
    }

    protected byte[] doInBackground(String... params) {

      try {
        InputStream is = new URL(mUrl).openStream();
        // Log.d(TAG, "doInBackground: " + mUrl.toString());
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[16384];
        while ((nRead = is.read(data, 0, data.length)) != -1) {
          buffer.write(data, 0, nRead);
        }
        buffer.flush();
        return buffer.toByteArray();
      } catch (IOException e) {
        e.printStackTrace();
      }
      return null;
    }

    protected void onPostExecute(byte[] byteArr) {
      try {
        KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr), getApplicationContext());
        kmlLayer.addLayerToMap();
        // moveCameraToKml(kmlLayer);
      } catch (XmlPullParserException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}
我环顾了四周,但找不到任何有助于这个具体案例的东西,因为我不认为有很多人在做这件事。我知道KML对google_maps_Flatter软件包的支持已经被要求了,但它似乎已经安静下来了

非常感谢您的帮助,因为这是我正在开发的应用程序的核心。如果没有这些,这个应用程序几乎是无用的


谢谢

你在Flitter中加载kml层成功了吗?还没有-我不得不在我的应用程序中处理其他事情,但最近又重新开始了。我有一个小型XML读取器,可以检索KML文件的建筑名称,但我需要更深入地了解这一点。它目前只来自本地文件,但我需要它是远程的。我正在考虑使用google_-map_-polyline包来显示多段线,并已将其用于显示方向。我还没有到那里,但可以看到一个可能的解决办法。我不认为我们会听到那个写了KML阅读器的家伙的声音。你是对的。我也在等那家伙的答复。我正在学习在颤振中开发插件,你能告诉我你是如何将其他插件集成到你自己的插件项目中,以开发基于特定插件的一些功能或扩展功能的吗。就像你可能安装谷歌地图来开发kml层一样,我只是想知道你是如何在插件中使用谷歌地图的。我只是简单地将它们添加到我的pubspec.yaml中,然后以标准方式导入它们。在flutter中加载kml层并没有什么异常的成功吗?还并没有-我不得不在我的应用程序中处理其他事情,但最近又重新开始了。我有一个小型XML读取器,可以检索KML文件的建筑名称,但我需要更深入地了解这一点。它目前只来自本地文件,但我需要它是远程的。我正在考虑使用google_-map_-polyline包来显示多段线,并已将其用于显示方向。我还没有到那里,但可以看到一个可能的解决办法。我不认为我们会听到那个写了KML阅读器的家伙的声音。你是对的。我也在等那家伙的答复。我正在学习在颤振中开发插件,你能告诉我你是如何将其他插件集成到你自己的插件项目中,以开发基于特定插件的一些功能或扩展功能的吗。就像你可能安装谷歌地图来开发kml层一样,我只是想知道你是如何在插件中使用谷歌地图的。我只是简单地将它们添加到我的pubspec.yaml中,然后以标准方式导入它们。没什么不寻常的
public class MainActivity extends FlutterActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);

    new MethodChannel(getFlutterView(), "**<MY CHANNEL>**").setMethodCallHandler(new MethodCallHandler() {
      @Override
      public void onMethodCall(MethodCall call, MethodChannel.Result result) {

        if (call.method.equals("retrieveFileFromUrl")) {
          retrieveFileFromUrl();
          result.success("KMLLayer Retrieved");
        }

      }
    });
  }

  private void retrieveFileFromUrl() {
    new DownloadKmlFile("**<REMOTE KML FILE>**")
        .execute();
  }

  private class DownloadKmlFile extends AsyncTask<String, Void, byte[]> {
    private final String mUrl;

    public DownloadKmlFile(String url) {
      mUrl = url;
    }

    protected byte[] doInBackground(String... params) {

      try {
        InputStream is = new URL(mUrl).openStream();
        // Log.d(TAG, "doInBackground: " + mUrl.toString());
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[16384];
        while ((nRead = is.read(data, 0, data.length)) != -1) {
          buffer.write(data, 0, nRead);
        }
        buffer.flush();
        return buffer.toByteArray();
      } catch (IOException e) {
        e.printStackTrace();
      }
      return null;
    }

    protected void onPostExecute(byte[] byteArr) {
      try {
        KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr), getApplicationContext());
        kmlLayer.addLayerToMap();
        // moveCameraToKml(kmlLayer);
      } catch (XmlPullParserException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}
Running Gradle task 'assembleDebug'...

.....\MainActivity.java:73: error: cannot find symbol
        KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr), getApplicationContext());
        ^

  symbol:   class KmlLayer

  location: class MainActivity.DownloadKmlFile
.....\MainActivity.java:73: error: cannot find symbol
        KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr), getApplicationContext());
                                ^

  symbol:   class KmlLayer

  location: class MainActivity.DownloadKmlFile
.....\MainActivity.java:73: error: cannot find symbol
        KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr), getApplicationContext());
                                         ^

  symbol:   variable mMap
  location: class MainActivity.DownloadKmlFile

3 errors