【发布时间】:2018-09-09 14:04:25
【问题描述】:
我看到了这个信息:https://stackshare.io/stackups/leaflet-vs-mapbox-vs-openlayers
我正在同时开发一个使用 OpenLayers 做出反应的 Web 应用程序。而且我必须使用 react native 在移动设备上制作相同的应用程序,但我不知道如何使它工作。
这是我使用 React + Openlayers 编写 Web 应用程序的代码:
import React, { Component } from 'react';
import './App.css';
// openlayers
import View from 'ol/view';
import Projection from 'ol/proj/projection';
import Map from 'ol/map';
import Zoom from 'ol/control/zoom';
import Tile from 'ol/layer/tile';
import OSM from 'ol/source/osm';
class App extends Component {
constructor(props) {
super(props);
this.view = new View({
center: [-41925.302985762304, 4789880.268977703],
zoom: 12,
minZoom: 2,
maxZoom: 28,
projection: new Projection({
code: 'EPSG:3857',
units: 'm'
})
});
}
componentDidMount() {
this.map = new Map({
view: this.view,
controls: [ new Zoom() ],
layers: [new Tile({ source: new OSM() })],
target: 'map'
});
}
render() {
console.log('-> render App')
return (
<div id="map" class="map"></div>
);
}
}
export default App;
这是我的问题,我不知道如何让它在 react native 中工作。
如何在 WebView 中添加 this.map(javascript Map 对象)?
我在其他问题 React Native and WMS 中看到过这个示例,但我想使用 React,因为我需要修改、动态添加图层等。
import React, { Component } from 'react';
import { StyleSheet, View, WebView } from 'react-native';
// openlayers
import View from 'ol/view';
import Projection from 'ol/proj/projection';
import Map from 'ol/map';
import Zoom from 'ol/control/zoom';
import Tile from 'ol/layer/tile';
import OSM from 'ol/source/osm';
type Props = {};
export default class App extends Component<Props> {
constructor(props) {
super(props);
this.view = new View({
center: [-41925.302985762304, 4789880.268977703],
zoom: 12,
minZoom: 2,
maxZoom: 28,
projection: new Projection({
code: 'EPSG:3857',
units: 'm'
})
});
}
componentDidMount() {
this.map = new Map({
view: this.view,
controls: [ new Zoom() ],
layers: [new Tile({ name:'tile', source: new OSM() })],
target: 'map'
});
}
render() {
var html = '<div id="map" class="map"></div>';
return (
<View style={styles.container}>
<WebView
ref={webview => { this.webview = webview; }}
source={{html}}
onMessage={this.onMessage}/>
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
}
});
【问题讨论】:
-
我进行了一些研究,但没有发现任何关于 react native 和 openlayers 的正常实践。自从传单上市以来,openlayers 也是某种已弃用的滑动地图软件。也许你可以试试看github.com/reggie3/react-native-webview-leaflet
标签: javascript reactjs react-native leaflet openlayers-3