(GWT leaflet)图层返回“_leaflet_id”属性的“null”

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

我有我的班级Geofence的网格。另外,我使用传单创建层,即地理围栏。当我从服务器获得地理围栏时,我填充网格并创建和添加图层到FeatureGroup的drawingItems。我将图层的属性设置为geofence的id。这是代码:

if (200 == response.getStatusCode()) {
   JsArray<Geofence> geofenceJsArray = JsonUtils.safeEval(response.getText());
ILayer iLayer;
   for (int i = 0; i < geofenceJsArray.length(); i++) {
       geofenceStore.add(geofenceJsArray.get(i));
       JsArray<Coordinate> coordinateJsArray = geofenceJsArray.get(i).getCoordinates();
       if (geofenceJsArray.get(i).getType() == Type.CIRCLE) {
         double lat = coordinateJsArray.get(0).getLatitude();
         double lon = coordinateJsArray.get(0).getLongitude();
         LatLng latLng = new LatLng(lat, lon);
         double radius = geofenceJsArray.get(i).getRadius();
         Options options = new Options();
         iLayer = new Circle(latLng, radius, options);
         iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());
      } else {
         PolylineOptions polylineOptions = new PolylineOptions();
         LatLng[] latLngArray = new LatLng[coordinateJsArray.length()];
         for (int j = 0; j < coordinateJsArray.length(); j++) {
           double lat = coordinateJsArray.get(i).getLatitude();
           double lon = coordinateJsArray.get(i).getLongitude();
           latLngArray[j] = new LatLng(lat, lon);
         }
         iLayer = new Polygon(latLngArray, polylineOptions);
         iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());
      }
      drawnItems.addLayer(iLayer);
      map.addLayer(iLayer);
 }

但是当我想要删除这样的地理围栏时:enter image description here

使用此代码:

if (204 == response.getStatusCode()) {
  ILayer layerForRemove = null;
  for (int i = 0; i < drawnItems.getLayers().length; i++) {
    LoggerHelper.log(className, "_leaflet_id: " + drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "");
    if (selectedGeofence.getId() == Integer.parseInt(drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "")) {
      layerForRemove = drawnItems.getLayers()[i];
    }
  }
  drawnItems.removeLayer(layerForRemove);
  geofenceStore.remove(selectedGeofence);
  Info.display("Уведомление", "Геозона " + selectedGeofence.getName() + " успешно удалено!");
  LoggerHelper.log(className, "Device " + selectedGeofence.getName() + " has been removed. Bye-bye!");
} else {
    Info.display("Ошибка", "Не удалось удалить геозону  " + selectedGeofence.getName());
    LoggerHelper.log(className, "Error while deleting device. " +
                                        "Error code: " + response.getStatusCode() +
                                        ". Error status message: " + response.getStatusText());
}

我在这一行中收到_leaflet_id为“null”

LoggerHelper.log(className, "_leaflet_id: " + drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "");

为什么?因为我在这行中设置了它:

iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());

在此先感谢您的回答!

java gwt leaflet
1个回答
0
投票

您根本不应该处理Leaflet图层的_leaflet_id私有属性。试图这样做会产生意想不到的问题。

您可以自由地向Leaflet图层添加自定义属性,并保留对它们的引用,例如:

var geofencesById = {}

for (...) {
    layer = L.polygon(...);

    layer._geofence_id = geofenceJsArray.get(i).getId();
    geofencesById[ geofenceJsArray.get(i).getId() ] = layer;
}
© www.soinside.com 2019 - 2024. All rights reserved.