Flutter地图功能增强插件maphero的使用
Flutter 地图功能增强插件 maphero 的使用
插件信息
本 Flutter 插件允许您在 Flutter 应用程序中显示嵌入式交互式和可定制的矢量地图。
- 该项目是 flutter-mapbox-gl 的一个分支,它替换了 Mapbox GL 库的使用,改用了开源的 MapHero 库。
- 该仓库已转移到 MapHero 组织。您不应该看到任何负面影响,因为 GitHub 会自动将旧 URL 重定向到新 URL。请参阅 #221 获取更多信息。
支持的平台
- 通过 maplibre-gl-js 在 web 上的支持
- 通过 maplibre-native 在 Android 和 iOS 上的支持
该项目仅支持这些库公开 API 的子集。
支持的 API
功能 | Android | iOS | Web |
---|---|---|---|
风格 | ✅ | ✅ | ✅ |
相机 | ✅ | ✅ | ✅ |
手势 | ✅ | ✅ | ✅ |
用户位置 | ✅ | ✅ | ✅ |
符号 | ✅ | ✅ | ✅ |
圆 | ✅ | ✅ | ✅ |
线 | ✅ | ✅ | ✅ |
填充 | ✅ | ✅ | ✅ |
填充拉伸 | ✅ | ✅ | ✅ |
热力图层 | ✅ | ✅ | ✅ |
入门指南
添加为依赖项
在您的项目中添加 maphero
可以通过运行以下命令来实现:
flutter pub add maphero
或者直接将其作为依赖项添加到您的 pubspec.yaml
文件中:
dependencies:
maphero: ^0.0.3
iOS
不再需要对 iOS 进行特定设置即可使用该包。如果您在早期版本中添加了特定行,则必须删除它们,否则您的项目将无法构建。
查看过时的代码
source 'https://cdn.cocoapods.org/'
source 'https://github.com/m0nac0/flutter-maplibre-podspecs.git'
pod 'MapLibre'
pod 'MapLibreAnnotationExtension'
使用位置功能
如果您访问用户的位置,您还应该在 ios/Runner/Info.plist
中添加以下键以解释为什么您需要访问他们的位置数据:
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>[Your explanation here]</string>
</dict>
一个可能的解释可以是:“在地图上显示您的位置”。
Android
不再需要对 Android 进行特定设置即可使用该包。
使用位置功能
如果您想在地图上显示用户的位置,您需要在应用清单 android/app/src/main/AndroidManifest.xml
中添加 ACCESS_COARSE_LOCATION
或 ACCESS_FINE_LOCATION
权限:
<manifest>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>
从 Android API 级别 23 开始,您还需要在运行时请求此权限。该插件不会为您处理这一点。我们的示例应用程序使用 flutter 的 location
插件来处理这个问题。
Web
在您的 web/index.html
文件的 <head>
部分包含以下 JavaScript 和 CSS 文件:
<script src='https://unpkg.com/maplibre-gl@^4.3/dist/maplibre-gl.js'></script>
<link href='https://unpkg.com/maplibre-gl@^4.3/dist/maplibre-gl.css' rel='stylesheet'/>
地图样式
可以通过在 MapHeroMap
构造函数中设置 styleString
来提供地图样式。支持以下格式:
- 传递地图样式的 URL。这应该是使用
http(s)://
开头的远程服务器提供的自定义地图样式。 - 作为本地资产传递样式。在
assets
创建一个 JSON 文件,并在pubspec.yml
中添加引用。设置样式字符串为此资产的相对路径以加载到地图中。 - 作为本地文件传递样式。在应用程序目录(例如 ApplicationDocumentsDirectory)中创建一个 JSON 文件。设置样式字符串为此 JSON 文件的绝对路径。
- 传递地图样式的原始 JSON。这仅在 Android 上受支持。
图块源需要 API 密钥
如果您的图块源需要 API 密钥,我们建议直接指定带有 API 密钥的源 URL。例如:
https://tiles.example.com/{z}/{x}/{y}.vector.pbf?api_key={your_key}
文档
- 检查 API 文档。
- 查看我们的 示例项目 中的示例实现。
- 有关 MapHero 库的更多信息,请访问 maplibre-gl-js 和 maplibre-native。
获取帮助
- 需要代码帮助?: 检查此存储库上的 讨论 或打开一个新的讨论。或者在 Stack Overflow 上查找以前的问题,或提出新的问题。
- 有错误要报告?: 打开 问题。如果可能,请包括完整的日志、代码和显示问题的信息。
- 有功能请求?: 打开 问题。告诉我们该功能应做什么以及您想要该功能的原因。
常见问题与常见问题
加载 .mbtiles
图块文件或来自应用附带的资源的精灵/字形
一种成功用于加载的方法是从应用程序的资源目录复制文件到另一个目录(例如应用程序的缓存目录),然后引用该位置。
避免 Android UnsatisfiedLinkError
更新 android\app\build.gradle
中的 buildTypes
:
buildTypes {
release {
// 其他配置
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86_64', 'x86'
}
}
}
更多关于Flutter地图功能增强插件maphero的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图功能增强插件maphero的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用maphero
插件可以增强地图功能,提供丰富的地图操作和视觉体验。以下是一个使用maphero
插件的示例代码,展示如何集成该插件并实现一些基本功能。
首先,确保你已经在pubspec.yaml
文件中添加了maphero
依赖:
dependencies:
flutter:
sdk: flutter
maphero: ^最新版本号 # 请替换为实际发布的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,可以按照以下步骤使用maphero
插件:
1. 导入必要的包
在你的Dart文件中导入maphero
包:
import 'package:flutter/material.dart';
import 'package:maphero/maphero.dart';
2. 创建地图控件
在你的Widget树中,添加一个MapHero
控件。这里是一个简单的示例:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('MapHero Demo'),
),
body: MapHeroDemo(),
),
);
}
}
class MapHeroDemo extends StatefulWidget {
@override
_MapHeroDemoState createState() => _MapHeroDemoState();
}
class _MapHeroDemoState extends State<MapHeroDemo> {
late MapHeroController _mapHeroController;
@override
void initState() {
super.initState();
_mapHeroController = MapHeroController(
initialCameraPosition: CameraPosition(
target: LatLng(37.7749, -122.4194), // 初始位置,例如旧金山
zoom: 14.0,
),
);
}
@override
Widget build(BuildContext context) {
return MapHero(
mapHeroController: _mapHeroController,
onMapCreated: (MapHeroController controller) {
// 地图创建完成后的回调,可以在这里添加标记等
setState(() {
// 例如,添加一个标记
controller.addMarker(
MarkerOptions(
position: LatLng(37.7749, -122.4194),
infoWindow: InfoWindow(title: '旧金山', snippet: '加州'),
),
);
});
},
);
}
}
3. 增强功能
maphero
插件提供了多种增强功能,比如自定义标记、多边形、圆等。以下是如何添加一个圆和多边形的示例:
@override
Widget build(BuildContext context) {
return MapHero(
mapHeroController: _mapHeroController,
onMapCreated: (MapHeroController controller) {
// 添加标记
controller.addMarker(
MarkerOptions(
position: LatLng(37.7749, -122.4194),
infoWindow: InfoWindow(title: '旧金山', snippet: '加州'),
),
);
// 添加一个圆
controller.addCircle(
CircleOptions(
center: LatLng(37.7749, -122.4194),
radius: 1000, // 半径,单位为米
strokeColor: Colors.redAccent,
fillColor: Colors.red.withOpacity(0.3),
),
);
// 添加一个多边形
controller.addPolygon(
PolygonOptions(
points: [
LatLng(37.7749, -122.4194),
LatLng(37.7849, -122.4294),
LatLng(37.7799, -122.4394),
LatLng(37.7749, -122.4194), // 闭合多边形
],
strokeColor: Colors.blueAccent,
fillColor: Colors.blue.withOpacity(0.3),
),
);
},
);
}
4. 运行应用
现在,你可以运行你的Flutter应用,查看集成了maphero
插件的地图功能。
以上代码展示了如何在Flutter项目中集成maphero
插件,并添加标记、圆和多边形等增强功能。你可以根据需要进一步自定义和扩展这些功能。