如何从圆的中心增加一个半径线的一个点上圆

问题描述 投票:0回答:2

下面的代码将给出半径到图形层的一个圆的ArcGIS地图上。我怎么可以添加加入圈子的中心圆上的图形层的任何点的直线。

基本的问题是如何计算圆上的一个点,绘制加入中心的圆的交点的线,并将其添加到图形层。

    performSearchPoint : function(e) {
        var self = this;
        var radius = $('#radius-distance').val();
        if(radius > 0 && radius < 100000){
            $('#besideMouse').removeClass('hide');
            $('#besideMouse').show();
            var loadingBMint = setInterval(this.loadingBM, 0);
            var searchPointClick = OURAPP.App.Map.on("click",function(evt) {
                loadingBMint = clearInterval(loadingBMint);
                $('#besideMouse').hide();
                var radius = $('#radius-distance').val();
                var units = $("input:radio[name='unitsGroup']:checked").val();
                if (units == "miles"){
                    units = "9035"; // if we use GeometryService
                } else {
                    units = "9003"; // if we use GeometryService
                }

                //clear only search graphics
                for ( var gr in OURAPP.App.Map.graphics.graphics) {
                    if(OURAPP.App.Map.graphics.graphics[gr].infoTemplate != null){
                         var template = OURAPP.App.Map.graphics.graphics[gr].infoTemplate;
                         if(template != "undefined" || template != null){   
                         if(template.title.trim() == "Search Graphic"){
                            OURAPP.App.Map.graphics.remove(OURAPP.App.Map.graphics.graphics[gr]);
                         }   
                    }}}
                /*do buffer geometry for draw circle and use the circle geometry to get the features*/
                var geoService = new OURAPP.esri.GeometryService("http://XXXX:YYYY/arcgis/rest/services/Utilities/Geometry/GeometryServer");

                var params = new OURAPP.esri.BufferParameters();
                params.geometries = [ evt.mapPoint ];
                params.distances = [ radius ];
                params.unit = units;
                params.bufferSpatialReference = OURAPP.App.Map.spatialReference;
                params.outSpatialReference = new OURAPP.esri.SpatialReference(4326);
                var bufferPolygon = new OURAPP.esri.Polygon;
                bufferPolygon.spatialReference = new OURAPP.esri.SpatialReference(4326);
                geoService.buffer(params,function(geometries) {
                    var symbol = new OURAPP.esri.SimpleFillSymbol()
                            .setColor(null).outline.setColor("red");
                    dojo.forEach(geometries,function(geometry) {
                                geometry.spatialReference = new OURAPP.esri.SpatialReference(4326);
                                var graphic = new OURAPP.esri.Graphic(geometry,symbol);
                                // add name to identify the search graphics
                                var template = new OURAPP.esri.InfoTemplate(graphic.geometry);
                                template.setTitle("Search Graphic");
                                template.setContent("Map Query circle with Radius: " + radius);
                                graphic.setInfoTemplate(template);  
                                OURAPP.App.Map.graphics.add(graphic);
                                bufferPolygon = geometry;
                                OURAPP.App.Map.setExtent(graphic.geometry.getExtent().expand(2));
                    });
                    self.searchType="Distance Search from point";
                    self.nameofplace=radius + " "+$("input:radio[name='unitsGroup']:checked").val();
                    self.showCount(bufferPolygon);
                });
                searchPointClick.remove();
            });
        }
    },
arcgis-js-api
2个回答
0
投票

我能画一条线,并使用以下将其添加到图形层。在[-XX.XXXXXXXXXXXX,YY.YYYYYYYYYYY]是地图上的一个随机点,现在唯一剩下的就是找到一个圆上的一个点。所以,现在的问题是如何找到一个点,这是沿同一纬度的已知点(圆的中心)X英里。

                            var lineSymbol = new OURAPP.esri.CartographicLineSymbol(
                              OURAPP.esri.CartographicLineSymbol.STYLE_SOLID,
                              new OURAPP.esri.Color([255,0,0]), 2,
                              OURAPP.esri.CartographicLineSymbol.CAP_SQUARE,
                              OURAPP.esri.CartographicLineSymbol.JOIN_MITER, 5
                            );
                            var lineGeometry = new OURAPP.esri.Polyline; 
                            lineGeometry.spatialReference = new OURAPP.esri.SpatialReference(4326);
                            lineGeometry.addPath([[evt.mapPoint.getLongitude(),evt.mapPoint.getLatitude()], [-XX.XXXXXXXXXXXX,YY.YYYYYYYYYYY]])
                            var lineGraphic = new OURAPP.esri.Graphic(lineGeometry, lineSymbol);
                            OURAPP.App.Map.graphics.add(lineGraphic);

0
投票

这可能是最好的一个,我想出了其工作。

                            var lineSymbol = new OURAPP.esri.CartographicLineSymbol(
                              OURAPP.esri.CartographicLineSymbol.STYLE_SOLID,
                              new OURAPP.esri.Color([255,0,0]), 2,
                              OURAPP.esri.CartographicLineSymbol.CAP_SQUARE,
                              OURAPP.esri.CartographicLineSymbol.JOIN_MITER, 5
                            );


                            var radiusInMeters; 
                            if (selectedUnit == "miles"){
                                radiusInMeters = radius*1609.34; //have to convert it to meters. 
                            } else {
                                radiusInMeters = radius*0.3048;  //have to convert it to meters. 
                            }
                            // Calculate the new map point on the circle.
                            var radians =  Math.PI/180;
                            var ltLong = OURAPP.esri.webMercatorUtils.xyToLngLat(evt.mapPoint.x + radiusInMeters*Math.cos(radians), evt.mapPoint.y + radiusInMeters*Math.sin(radians));
                            // Calculate the new map point on the circle. 

                            var lineGeometry = new OURAPP.esri.Polyline; 
                            lineGeometry.spatialReference = new OURAPP.esri.SpatialReference(4326);
                            lineGeometry.addPath([[evt.mapPoint.getLongitude(),evt.mapPoint.getLatitude()], ltLong]);
                            var lineGraphic = new OURAPP.esri.Graphic(lineGeometry, lineSymbol);
© www.soinside.com 2019 - 2024. All rights reserved.