如何使用 react-google-maps 在 React.JS 中获取多边形的坐标

Posted

技术标签:

【中文标题】如何使用 react-google-maps 在 React.JS 中获取多边形的坐标【英文标题】:How to fetch coordinates of Polygon in React.JS using react-google-maps 【发布时间】:2020-05-17 09:16:38 【问题描述】:

我想获取在 Google 地图上绘制的多边形的所有坐标。这是我的代码

import React from "react";
import  compose, withProps  from "recompose";
import 
  withScriptjs,
  withGoogleMap,
  GoogleMap,
  Marker
 from "react-google-maps";
//import withScriptjs from "react-google-maps/lib/async/withScriptjs";
import  DrawingManager  from "react-google-maps/lib/components/drawing/DrawingManager";

const MyMapComponent = compose(
  withProps(
    /**
     * Note: create and replace your own key in the Google console.
     * https://console.developers.google.com/apis/dashboard
     * The key "AIzaSyBkNaAGLEVq0YLQMi-PYEMabFeREadYe1Q" can be ONLY used in this sandbox (no forked).
     */
    googleMapURL:
      "https://maps.googleapis.com/maps/api/js?key=AIzaSyALpmb4KhFoR2Kcvty21gzzegprl4ilIgs&v=3.exp&libraries=geometry,drawing,places",
    loadingElement: <div style= height: `100%`  />,
    containerElement: <div style= height: `400px`  />,
    mapElement: <div style= height: `100%`  />
  ),
  withScriptjs,
  withGoogleMap
)(props => (
  <GoogleMap
    defaultZoom=8
    defaultCenter=new window.google.maps.LatLng(-34.397, 150.644)
  >
    <DrawingManager
      defaultDrawingMode=
        window.google.maps.drawing.OverlayType.ControlPosition
      
      defaultOptions=
        drawingControl: true,
        drawingControlOptions: 
          position: window.google.maps.ControlPosition.TOP_CENTER,
          drawingModes: [
            window.google.maps.drawing.OverlayType.CIRCLE,
            window.google.maps.drawing.OverlayType.POLYGON,
            window.google.maps.drawing.OverlayType.POLYLINE,
            window.google.maps.drawing.OverlayType.RECTANGLE
          ]
        ,
        circleOptions: 
          fillColor: `#ffff00`,
          fillOpacity: 1,
          strokeWeight: 5,
          clickable: false,
          editable: true,
          zIndex: 1
        
      
    />
    props.isMarkerShown && (
      <Marker position= lat: -34.397, lng: 150.644  />
    )
  </GoogleMap>
));

我的工作重点是获取应该在 Google 地图上绘制的该多边形的所有坐标。我还想使用 mongoose 和 NodeJs 作为后端将这些坐标存储在 MongoDB 中。

【问题讨论】:

【参考方案1】:

我们可以使用这个函数来获取多边形或任何其他反应角的所有坐标。

function getPaths(polygon) 

  var polygonBounds = polygon.getPath();
  var bounds = [];
  for (var i = 0; i < polygonBounds.length; i++) 
    var point = 
      lat: polygonBounds.getAt(i).lat(),
      lng: polygonBounds.getAt(i).lng()
    ;
    bounds.push(point);
  
  console.log(bounds);

在 GoogleMap 组件中,我通过给定的方式简化了上面的代码。

<DrawingManager
    drawingMode="polygon"
    onPolygonComplete=value => console.log(getPaths(value)) />

【讨论】:

以上是关于如何使用 react-google-maps 在 React.JS 中获取多边形的坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-google-maps 中添加标记?

如何使用 react-google-maps 库创建折线

如何使用 react-google-maps 在 React.JS 中获取多边形的坐标

如何将自定义按钮添加到 react-google-maps?

react-google-maps:如何使用 fitBounds、panBy、panTo、panToBounds 公共 API?

如何更改 React-Google-Maps 多边形的样式选项 onHover?