# MapGIS-Mobile-React-Native
**Repository Path**: osmapgis/MapGIS-Mobile-React-Native
## Basic Information
- **Project Name**: MapGIS-Mobile-React-Native
- **Description**: MapGIS Mobile for React Native,是MapGIS推出的一款基于React Native的跨平台移动开发框架,用户可以基于它使用JavaScript开发出在Android和iOS平台下运行的原生移动GIS应用。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 2
- **Created**: 2020-06-30
- **Last Updated**: 2025-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MapGIS-Mobile-React-Native
MapGIS Mobile for React Native,是MapGIS推出的一款基于React Native的跨平台移动开发框架,用户可以基于它使用JavaScript开发出在Android和iOS平台下运行的原生移动GIS应用。
## 在线资源
[MapGIS移动端资源中心-云开发世界](http://www.smaryun.com/dev/resource_center.html#/type27/tag186/page1)
## 在线服务
[问答社区-云听](http://www.smaryun.com/cloudlisten/index.php)
## 安装
在React Native项目中安装 `@mapgis/mobile-react-native` 包。
```bash
yarn add @mapgis/mobile-react-native
# or with npm
# npm install @mapgis/mobile-react-native
```
### 链接原生库
- **React Native 0.60 and higher**
[linking is automatic](https://github.com/react-native-community/cli/blob/master/docs/autolinking.md),不需要执行任何操作。
- **React Native 0.59 and lower**
如果您使用的是旧版本的React Native,则需要手动链接:
```sh
react-native link @mapgis/mobile-react-native
```
## 用法
```js
// In App.js
import React, { Component } from "react";
import { Platform, StyleSheet, View, PermissionsAndroid } from "react-native";
import { Environment, MGMapView } from "@mapgis/mobile-react-native";
export default class App extends Component {
onGetInstance = mapView => {
this.mapView = mapView;
this.openMap();
};
openMap = async () => {
//请求权限
await requestMultiplePermission();
//初始化环境目录
var environmnetModule = new Environment();
var environmnet = await environmnetModule.createObj();
await environmnet.initialize("MapGISSample");
//请求授权
await environmnet.requestAuthorization();
//加载文档
await this.mapView.loadFromFile(
"MapGISSample/Map/MapShow/WuHan/WuHan.mapx"
);
};
render() {
return (
);
}
}
function checkGranted(granteds) {
const values = Object.values(granteds);
let isGranted = true;
for (let i = 0; i < values.length - 1; i++) {
if (values[i] != values[i + 1]) {
isGranted = false;
break;
}
}
if (isGranted && values[0] === PermissionsAndroid.RESULTS.GRANTED) {
return true;
}
return false;
}
async function requestMultiplePermission() {
if (Platform.OS === "ios") return;
try {
const permissions = [
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE
];
//返回得是对象类型
const granteds = await PermissionsAndroid.requestMultiple(permissions);
if (!checkGranted(granteds)) {
throw new Error("授权拒绝,无法正常使用本应用");
}
} catch (err) {
throw new Error("授权失败,无法正常使用本应用");
}
}
const styles = StyleSheet.create({
container: {
flex: 1
},
mapView: {
flex: 1,
alignSelf: "stretch"
}
});
```