【问题标题】:Finding polygon area with primefaces使用primefaces查找多边形区域
【发布时间】:2015-07-14 22:16:24
【问题描述】:

我正在尝试使用素数面来查找多边形的区域。我能够放下标记并创建一个多边形并使其显示。我希望将多边形置于 JavaScript 几何 API 函数调用中,但我无法访问已绘制的多边形,因为它是由支持 bean 创建的。我目前的计划是有两个代表同一个多边形的多边形对象,一个在纯 JavaScript 中,一个在 Google Maps/Prime Faces 中,但我不确定它是否会起作用。这是我目前所拥有的:

 <p:gmap id="gmap" center="52.561201, -9.256510" zoom="13" type="HYBRID" style="width:100%;height:400px"
                        model="#{map.emptyModel}" onPointClick="handlePointClick(event);" widgetVar="map" />



                <p:dialog widgetVar="dlg" showEffect="fade">
                    <h:form prependId="false">
                        <h:panelGrid columns="2">
                            <h:outputLabel for="title" value="Are you Sure?" />


                            <f:facet name="footer">
                                <p:commandButton value="Yes" actionListener="#{map.addMarker}" update=":messages" oncomplete="markerAddComplete()" />
                                <p:commandButton value="No" onclick="return cancel()" />
                            </f:facet>
                        </h:panelGrid>

                        <h:inputHidden id="lat" value="#{map.lat}" />
                        <h:inputHidden id="lng" value="#{map.lng}" />
                        <h:inputHidden id="area" value="#{map.area}" />
                    </h:form>
                </p:dialog>

                <script type="text/javascript">
                    var currentMarker = null;
                    var markers = [];
                    var path = new google.maps.MVCArray;
                    var poly;
                    function handlePointClick(event) {
                        //if statement handles bean markers and coordinates
                        if (currentMarker === null) {
                            document.getElementById('lat').value = event.latLng.lat();
                            document.getElementById('lng').value = event.latLng.lng();

                            currentMarker = new google.maps.Marker({
                                position: new google.maps.LatLng(event.latLng.lat(), event.latLng.lng())
                            });



                            PF('map').addOverlay(currentMarker);

                            PF('dlg').show();


                        }
                        // javascript to mimic polygon copy
                        path.insertAt(path.length, event.latLng);
                        poly =  new google.maps.Polygon();
                        poly.setPaths(new google.maps.MVCArray([path]));
                        document.getElementById('area').value =  document.getElementById('area').value = google.maps.geometry.spherical.computeArea(measure.polygon.getPath());
                        console.log(path);
                    }

if 语句中的所有内容都与位于脚本上方的 xhtml 代码有关,下面的所有其他内容都是我尝试获取该区域,但它不起作用。如果有人对如何在素数面上实现多边形区域有任何想法,请分享,谢谢。

【问题讨论】:

    标签: javascript java google-maps primefaces polygon


    【解决方案1】:

    如果你在你的应用程序中使用 JavaScript,那么只要有一个谷歌地图事件监听器,只要用户点击地图的一部分,或者当你使用某种菜单来构建一个多边形,这可能会更容易。手动输入一个点(我想你已经这样做了):

    var polygonCoords = [];
    
    //can be called using forms
    function addMarker(lat, lng){ //split apart from google.maps.latLng to make compatible with form
      polygonCoords.push(new google.maps.LatLng(lat, lng));
    }
    
    google.maps.event.addListener(map, 'click', function(event){
      addPoint(event.latLng.lat(), event.latLng.lng());
    }
    
    function getArea(pts){
      return google.maps.geometry.spherical.computeArea(pts);
    }
    
    //to get area do:
    getArea(polygonCoords);
    //this will return a float of the area
    

    此解决方案需要包含 geometry library

    我没有包含用于显示(或实际制作!)多边形的代码,因为我不确定你想怎么做。另外,制作多边形不需要计算它的面积。

    据我了解,PrimeFaces 的使用与 jQuery 类似。话虽如此,我认为使用 PrimeFaces 检索坐标并不重要,尤其是当 Google 地图已经更好地支持它时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2012-11-01
      • 2012-03-02
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多