Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在地图上绘制多个圆和矩形?_Java_Google Maps_Jxmaps - Fatal编程技术网

Java 如何在地图上绘制多个圆和矩形?

Java 如何在地图上绘制多个圆和矩形?,java,google-maps,jxmaps,Java,Google Maps,Jxmaps,对于我大学的一个项目,我需要在地图上显示芝加哥的所有十字路口和一些车站,我已经有了数据链接列表,我需要用十字路口的位置画圆圈,用车站的位置画矩形。我正在使用jxMaps库,根据示例,我能够根据开发人员提供的示例绘制一个圆和一个矩形来测试metods,但是如果我在打开地图时尝试使用循环绘制多个,它将保持灰色。 这是我的代码: public class Draw extends MapView { private static final long serialVersionUID = 1

对于我大学的一个项目,我需要在地图上显示芝加哥的所有十字路口和一些车站,我已经有了数据链接列表,我需要用十字路口的位置画圆圈,用车站的位置画矩形。我正在使用jxMaps库,根据示例,我能够根据开发人员提供的示例绘制一个圆和一个矩形来测试metods,但是如果我在打开地图时尝试使用循环绘制多个,它将保持灰色。 这是我的代码:

public class Draw extends MapView
{

    private static final long serialVersionUID = 1L;

    Map map;

    IList <Integer, Intersetion> intersections;

    IList <Integer, Station> stations;

    public Draw(MapViewOptions options, IList <Integer, Intersection> inter, IList <Integer, Station> est)
    {
        super(options);
        // Setting of a ready handler to MapView object. onMapReady will be called when map initialization is done and
        // the map object is ready to use. Current implementation of onMapReady customizes the map object.
        setOnMapReadyHandler(new MapReadyHandler()
        {
            @Override
            public void onMapReady(MapStatus status)
            {
                // Check if the map is loaded correctly
                if (status == MapStatus.MAP_STATUS_OK)
                {
                    map = getMap();
                    intersections = inter; // I Load the list with the intersections data
                    stations = est; // I load the list with the stations data
                    rectangle();
                    circle();
                    // Creating a map options object
                    MapOptions mapOptions = new MapOptions();
                    // Creating a map type control options object
                    MapTypeControlOptions controlOptions = new MapTypeControlOptions();
                    // Changing position of the map type control
                    controlOptions.setPosition(ControlPosition.TOP_RIGHT);
                    // Setting map type control options
                    mapOptions.setMapTypeControlOptions(controlOptions);
                    // Setting map options
                    map.setOptions(mapOptions);
                    // Setting the map center
                    map.setCenter(new LatLng(41.875486, -87.626570));
                    // Setting initial zoom value
                    map.setZoom(9.0);
                }
            }
        });
    }

    public void circle ()
    {
        CircleOptions options = new CircleOptions();
        options.setFillOpacity(0);
        options.setStrokeColor("#CB4335");
        options.setStrokeWeight(5.0);

        for (Intersetion inter: intersections)
        {
            Circle circle = new Circle(map);
            circle.setCenter(new LatLng(inter.darLatitude(), inter.darLongitude()));
            circle.setRadius(50);
            circle.setOptions(options);
        }
    }
    public void rectangle()
    {
        RectangleOptions options = new RectangleOptions();
        options.setFillOpacity(0);
        options.setStrokeColor("#2E86C1");
        int i = 0;
        for (Station rect: stations)
        {
            Rectangle rectangulo = new Rectangle (map);
            LatLngBounds bounds = new LatLngBounds (new LatLng (rect.darLatitude() - 0.0004, rect.darLongitude() - 0.0006), new LatLng (rect.darLatitude() + 0.0004, rect.darLongitude() + 0.0006));
            rectangle.setBounds(bounds);
            rectangle.setOptions(optionts);
        }
    }
}
公共类绘制扩展了MapView
{
私有静态最终长serialVersionUID=1L;
地图;
IList交叉点;
IList站;
公共绘图(MapViewOptions选项、IList inter、IList est)
{
超级(期权);
//映射初始化完成后,将调用MapView object.onMapReady的就绪处理程序的设置,并且
//映射对象已准备好使用。onMapReady的当前实现可自定义映射对象。
setOnMapReadyHandler(新的MapReadyHandler()
{
@凌驾
mapready上的公共无效(MapStatus状态)
{
//检查地图是否正确加载
if(status==MapStatus.MAP\u status\u OK)
{
map=getMap();
crossions=inter;//我加载带有交叉点数据的列表
stations=est;//我用stations数据加载列表
矩形();
圆圈();
//创建贴图选项对象
MapOptions MapOptions=新的MapOptions();
//创建贴图类型控件选项对象
MapTypeControlOptions controlOptions=新的MapTypeControlOptions();
//更改地图类型控件的位置
controlOptions.setPosition(ControlPosition.右上角);
//设置贴图类型控件选项
setMapTypeControlOptions(controlOptions);
//设置地图选项
设置选项(mapOptions);
//设置地图中心
地图设置中心(新LatLng(41.875486,-87.626570));
//设置初始缩放值
map.setZoom(9.0);
}
}
});
}
公共空间圈()
{
CircleOptions=新的CircleOptions();
选项。setFillOpacity(0);
选项。设置行程颜色(“CB4335”);
选项。设定行程重量(5.0);
用于(闭会期间:交叉口)
{
圆圈=新圆圈(地图);
circle.setCenter(新车床(中间纬度(),中间经度());
圆。设定半径(50);
circle.setOptions(选项);
}
}
公共空矩形()
{
矩形选项=新矩形选项();
选项。setFillOpacity(0);
选项。设置行程颜色(“2E86C1”);
int i=0;
用于(车站直达:车站)
{
矩形矩形矩形=新矩形(贴图);
LatLngBounds bounds=新LatLngBounds(新LatLng(rect.darLatitude()-0.0004,rect.DarLength()-0.0006),新LatLng(rect.darLatitude()+0.0004,rect.DarLength()+0.0006));
矩形.立根(边界);
矩形。设置选项(选项);
}
}
}

我已经分析了提供的源代码,除了设置笔划颜色的地方,它看起来还可以。您必须在HTML格式中使用颜色,因此您必须更改:

options.setStrokeColor(Color.RED.toString()); to options.setStrokeColor("#FF0000");
但是,这并不是出现灰色屏幕的原因。灰色屏幕通常发生在设置映射属性时出现错误时(
在onMapReady()处理程序内部

因此,您必须检查是否发生任何异常,如果是,则修复其根本原因

此外,您还可以启用日志记录并检查它是否有任何错误。您可以通过将
-Djxmaps.logging.level=ALL
参数添加到应用程序的VM选项中来实现这一点

编辑________________________________________________________________________

以下是允许创建多个圆的代码示例:

map.addEventListener("click", new MapMouseEvent() {
                        @Override
                        public void onEvent(MouseEvent mouseEvent) {
                            final Circle circle = new Circle(map);
                            circle.setRadius(2000);
                            circle.setCenter(mouseEvent.latLng());
                        }
                    });

事实上,出于某种原因,如果我在设置地图选项后在最后调用方法circle和rectangle,它会起作用,这有点奇怪,因为当我只是按照问题帖子中显示的顺序创建一个圆或一个矩形时,它会起作用。

我选中了,没有引发异常,我认为问题在于,当我实例化许多Circle和Rectangle类型的对象时,但是在示例中,每次只绘制一个类型的对象,如何绘制多个类型的对象?如果列表中已经有latlng的数据?因此,圆圈被添加,当我打开地图时,它们已经在那里了。