Как я могу нарисовать несколько кругов и прямоугольников на карте? - PullRequest
0 голосов
/ 11 ноября 2018

Для проекта в моем университете мне нужно показать на карте все перекрестки и некоторые станции в Чикаго, у меня уже есть LinkedLists с данными, и мне нужно нарисовать круги с положением пересечений и прямоугольники с положением станций. Я использую библиотеку jxMaps и на основе примеров я смог нарисовать один круг и один прямоугольник, тестируя методы в соответствии с примерами, предоставленными разработчиками, но если я попытаюсь нарисовать несколько с циклом при открытии карты, это остается в сером. Это мой код:

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);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

На самом деле, по какой-то причине, это работает, если я вызываю методы circle и rectangle в конце после установки параметров карты, что довольно странно, учитывая, что он работает нормально, когда я просто создаю один круг или один прямоугольник в порядок, который появляется в сообщении вопроса.

0 голосов
/ 12 ноября 2018

Я проанализировал предоставленный исходный код, и он выглядит нормально, за исключением места, где вы устанавливаете цвет обводки.Вы должны использовать цвета в формате HTML, поэтому вы должны изменить:

options.setStrokeColor(Color.RED.toString()); to options.setStrokeColor("#FF0000");

Однако это не может быть причиной появления серого экрана.Серый экран обычно возникает, когда что-то идет не так при настройке атрибутов карты (inside onMapReady() handler).

Поэтому вы должны проверить, не произошло ли какое-либо исключение, и, если да, то устранить причину его возникновения.

Кроме того, вы можете включить ведение журнала и проверить наличие ошибок.Это можно сделать, добавив параметр -Djxmaps.logging.level=ALL в параметры виртуальной машины вашего приложения.

РЕДАКТИРОВАТЬ ________________________________________________________________________

Вот пример кода, который позволяет создавать несколько кругов:

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