Google maps 如何在flatter中包含本机代码以在Google地图上显示KML层?
我一直在研究在我的Flutter应用程序中运行本机代码,以便在我的谷歌地图上显示KML层,虽然我的应用程序运行本机代码(至少在Android上),但我很难让KML的东西正常工作 我已经在我的flatter类中创建了一个MethodChannel来运行本机代码,这很好。请看下面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 =
// 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