tsy*_*176 5 java google-maps dart kotlin flutter
我依靠 flutter 中的本机代码将 .kml 覆盖加载到我的 Google 地图(修改后的 GoogleMapController.java)。
.kml 覆盖存储在此处:android/app/src/main/res/raw/borders.kml。
我在 main.dart 中调用我的覆盖层,如下所示:
Future<void> addKml(GoogleMapController mapController) async {
const MethodChannel channel = MethodChannel('flutter.native/helper');
try {
int kmlResourceId = await channel.invokeMethod('KML');
return mapController.channel.invokeMethod("map#addKML", <String, dynamic>{
'resourceId': kmlResourceId,
});
} on PlatformException catch (e) {
throw 'Unable to plot map: ${e.message}';
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 MainActivity.kt:
class MainActivity: FlutterActivity() {
private val CHANNEL = "flutter.native/helper"
private var mapId: Int? = null
override fun onCreate(savedInstanceState: Bundle?, PersistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, PersistentState)
GeneratedPluginRegistrant.registerWith(FlutterEngine(this));
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
MethodChannel(flutterEngine.dartExecutor,CHANNEL).setMethodCallHandler{
call,result ->
if (call.method == "KML") {
result.success (getKMLResource());
} else {
result.notImplemented();
}
}
}
private fun getKMLResource(): Int {
return R.raw.borders;
}
}
Run Code Online (Sandbox Code Playgroud)
最后是我的 GoogleMapController.java:
case "map#addKML":
int resourceId = call.argument("resourceId");
try {
KmlLayer kml = new KmlLayer(googleMap, resourceId, context);
kml.addLayerToMap();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
Run Code Online (Sandbox Code Playgroud)
如何在 flutter 中指定加载 .kml 的路径?它似乎是从 kotlin 中加载的:
return R.raw.borders;
Run Code Online (Sandbox Code Playgroud)
希望有人能在这里帮助我。先感谢您。
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |