如何在地图上绘制多个圆形和矩形?
How can I draw multiple circles and rectangles on a map?
对于我大学的一个项目,我需要在地图上显示芝加哥的所有十字路口和一些车站,我已经有了带有数据的链表,我需要用十字路口和矩形的位置绘制圆圈车站的位置。我正在使用 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);
}
}
}
我已经分析了提供的源代码,看起来不错,除了您设置描边颜色的地方。您必须使用 HTML 格式的颜色,因此您必须更改:
options.setStrokeColor(Color.RED.toString()); to options.setStrokeColor("#FF0000");
但是,这不可能是灰屏的原因。灰色屏幕通常发生在设置地图属性 (inside onMapReady() handler
) 时出错。
所以你必须检查是否有任何异常发生,如果是,然后修复它的根本原因。
此外,您可以启用日志记录并检查它是否有任何错误。您可以通过将 -Djxmaps.logging.level=ALL
参数添加到应用程序的 VM 选项来实现。
EDIT________________________________________________________________________
这是一个允许创建多个圈子的代码示例:
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,它会起作用,考虑到它在我只创建一个圆或一个矩形时工作正常,这有点奇怪按照问题中出现的顺序 post.
对于我大学的一个项目,我需要在地图上显示芝加哥的所有十字路口和一些车站,我已经有了带有数据的链表,我需要用十字路口和矩形的位置绘制圆圈车站的位置。我正在使用 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);
}
}
}
我已经分析了提供的源代码,看起来不错,除了您设置描边颜色的地方。您必须使用 HTML 格式的颜色,因此您必须更改:
options.setStrokeColor(Color.RED.toString()); to options.setStrokeColor("#FF0000");
但是,这不可能是灰屏的原因。灰色屏幕通常发生在设置地图属性 (inside onMapReady() handler
) 时出错。
所以你必须检查是否有任何异常发生,如果是,然后修复它的根本原因。
此外,您可以启用日志记录并检查它是否有任何错误。您可以通过将 -Djxmaps.logging.level=ALL
参数添加到应用程序的 VM 选项来实现。
EDIT________________________________________________________________________
这是一个允许创建多个圈子的代码示例:
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,它会起作用,考虑到它在我只创建一个圆或一个矩形时工作正常,这有点奇怪按照问题中出现的顺序 post.