Omaha #3549 improve performance of DataStoreResource processing of
requests Change-Id: Ica72cded45aff23737c4b2aab8bbe94e0fc99755 Former-commit-id: bab091169dff1383a3b78ea4b94ec67d446e5f80
This commit is contained in:
parent
e1106f77eb
commit
95d510849a
2 changed files with 122 additions and 116 deletions
|
@ -124,9 +124,9 @@ import com.vividsolutions.jts.geom.Point;
|
|||
* Mar 25, 2014 #2664 randerso Added support for non-WGS84 shape files
|
||||
* Apr 14, 2014 #2664 randerso Fix NullPointerException when no .prj file present
|
||||
* Apr 21, 2014 #2998 randerso Stored types of attributes to be used in the AttributeViewer
|
||||
* Aug 14, 2014 #3523 mapeters Updated deprecated {@link DrawableString#textStyle}
|
||||
* assignments.
|
||||
* Aug 14, 2014 #3523 mapeters Updated deprecated DrawableString.textStyle assignments.
|
||||
* Aug 21, 2014 #3459 randerso Restructured Map resource class hierarchy
|
||||
* Nov 18, 2014 #3549 njensen Improved performance of processRequest()
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -137,6 +137,7 @@ import com.vividsolutions.jts.geom.Point;
|
|||
public class DataStoreResource extends
|
||||
AbstractMapResource<DataStoreResourceData, MapDescriptor> implements
|
||||
IPropertyChangeListener {
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("GIS:");
|
||||
|
||||
|
@ -256,7 +257,7 @@ public class DataStoreResource extends
|
|||
return;
|
||||
}
|
||||
|
||||
List<String> fields = new ArrayList<String>();
|
||||
List<String> fields = new ArrayList<>();
|
||||
fields.add(req.geomField);
|
||||
if ((req.labelField != null)
|
||||
&& !fields.contains(req.labelField)
|
||||
|
@ -279,7 +280,7 @@ public class DataStoreResource extends
|
|||
.createWireframeShape(false,
|
||||
req.getResource().getDescriptor());
|
||||
|
||||
List<LabelNode> newLabels = new ArrayList<LabelNode>();
|
||||
List<LabelNode> newLabels = new ArrayList<>();
|
||||
|
||||
IShadedShape newShadedShape = null;
|
||||
if (req.isProduct || (req.shadingField != null)) {
|
||||
|
@ -311,10 +312,10 @@ public class DataStoreResource extends
|
|||
FilterFactory2 ff = CommonFactoryFinder
|
||||
.getFilterFactory2(GeoTools.getDefaultHints());
|
||||
|
||||
List<Geometry> geomList = new ArrayList<Geometry>();
|
||||
List<Geometry> geomList = new ArrayList<>();
|
||||
flattenGeometry(req.getBoundingGeom(), geomList);
|
||||
|
||||
List<Filter> filterList = new ArrayList<Filter>(geomList.size());
|
||||
List<Filter> filterList = new ArrayList<>(geomList.size());
|
||||
for (Geometry g : geomList) {
|
||||
Filter filter = ff.intersects(ff.property(shapeField),
|
||||
ff.literal(g));
|
||||
|
@ -325,24 +326,25 @@ public class DataStoreResource extends
|
|||
|
||||
SimpleFeatureSource featureSource = req.getResource()
|
||||
.getDataStore().getFeatureSource(typeName);
|
||||
|
||||
SimpleFeatureCollection featureCollection = featureSource
|
||||
.getFeatures(query);
|
||||
SimpleFeatureIterator featureIterator = featureCollection
|
||||
.features();
|
||||
|
||||
if (req.getResource().displayAttributes == null) {
|
||||
req.getResource().displayAttributes = new HashMap<String, DataStoreResource.DisplayAttributes>(
|
||||
(int) Math.ceil(featureCollection.size() / 0.75f),
|
||||
0.75f);
|
||||
/*
|
||||
* just default the map size as featureCollection.size() is slow
|
||||
* since it iterates over the entire collection
|
||||
*/
|
||||
req.getResource().displayAttributes = new HashMap<>();
|
||||
}
|
||||
|
||||
// TODO: do we need to implement the GeometryCache/gidMap
|
||||
// stuff like in DbMapResource?
|
||||
|
||||
List<Geometry> resultingGeoms = new ArrayList<Geometry>();
|
||||
List<Geometry> highlightGeoms = new ArrayList<Geometry>();
|
||||
List<Geometry> resultingGeoms = new ArrayList<>();
|
||||
List<Geometry> highlightGeoms = new ArrayList<>();
|
||||
int numPoints = 0;
|
||||
try (SimpleFeatureIterator featureIterator = featureCollection
|
||||
.features()) {
|
||||
while (featureIterator.hasNext()) {
|
||||
if (checkCanceled(result)) {
|
||||
return;
|
||||
|
@ -350,8 +352,8 @@ public class DataStoreResource extends
|
|||
|
||||
SimpleFeature f = featureIterator.next();
|
||||
String id = f.getID();
|
||||
DisplayAttributes da = req.getResource().getDisplayAttributes(
|
||||
id);
|
||||
DisplayAttributes da = req.getResource()
|
||||
.getDisplayAttributes(id);
|
||||
if (!da.isVisible()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -378,7 +380,8 @@ public class DataStoreResource extends
|
|||
}
|
||||
}
|
||||
|
||||
if (DataStoreResource.ID_ATTRIBUTE_NAME.equals(req.labelField)) {
|
||||
if (DataStoreResource.ID_ATTRIBUTE_NAME
|
||||
.equals(req.labelField)) {
|
||||
labelAttr = id;
|
||||
}
|
||||
|
||||
|
@ -396,8 +399,7 @@ public class DataStoreResource extends
|
|||
label = labelAttr.toString();
|
||||
}
|
||||
int numGeometries = g.getNumGeometries();
|
||||
List<Geometry> gList = new ArrayList<Geometry>(
|
||||
numGeometries);
|
||||
List<Geometry> gList = new ArrayList<>(numGeometries);
|
||||
for (int polyNum = 0; polyNum < numGeometries; polyNum++) {
|
||||
Geometry poly = g.getGeometryN(polyNum);
|
||||
gList.add(poly);
|
||||
|
@ -406,7 +408,8 @@ public class DataStoreResource extends
|
|||
Collections.sort(gList, new Comparator<Geometry>() {
|
||||
@Override
|
||||
public int compare(Geometry g1, Geometry g2) {
|
||||
return (int) Math.signum(g2.getEnvelope().getArea()
|
||||
return (int) Math
|
||||
.signum(g2.getEnvelope().getArea()
|
||||
- g1.getEnvelope().getArea());
|
||||
}
|
||||
});
|
||||
|
@ -422,7 +425,8 @@ public class DataStoreResource extends
|
|||
point.getCoordinate().x,
|
||||
point.getCoordinate().y });
|
||||
|
||||
DrawableString ds = new DrawableString(label, null);
|
||||
DrawableString ds = new DrawableString(label,
|
||||
null);
|
||||
ds.font = req.getResource().font;
|
||||
Rectangle2D rect = req.getTarget()
|
||||
.getStringsBounds(ds);
|
||||
|
@ -442,6 +446,7 @@ public class DataStoreResource extends
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newOutlineShape.allocate(numPoints);
|
||||
RGB outlineColor = req.getResource()
|
||||
|
@ -533,7 +538,7 @@ public class DataStoreResource extends
|
|||
|
||||
RGB getColor(Object key) {
|
||||
if (colorMap == null) {
|
||||
colorMap = new HashMap<Object, RGB>();
|
||||
colorMap = new HashMap<>();
|
||||
}
|
||||
RGB color = colorMap.get(key);
|
||||
if (color == null) {
|
||||
|
@ -757,8 +762,7 @@ public class DataStoreResource extends
|
|||
try {
|
||||
List<SimpleFeature> features = findFeatures(new ReferencedCoordinate(
|
||||
c));
|
||||
List<String> featureIds = new ArrayList<String>(
|
||||
features.size());
|
||||
List<String> featureIds = new ArrayList<>(features.size());
|
||||
for (SimpleFeature feature : features) {
|
||||
featureIds.add(feature.getID());
|
||||
}
|
||||
|
@ -1032,14 +1036,14 @@ public class DataStoreResource extends
|
|||
int displayWidth = (descriptor.getMapWidth());
|
||||
double kmPerPixel = (displayWidth / screenWidth) / 1000.0;
|
||||
|
||||
List<Geometry> geomList = new ArrayList<Geometry>();
|
||||
List<Geometry> geomList = new ArrayList<>();
|
||||
PixelExtent extent = clipToProjExtent(projExtent);
|
||||
Geometry boundingGeom = JTS.transform(
|
||||
buildBoundingGeometry(extent, worldToScreenRatio, kmPerPixel),
|
||||
latLonToIncoming);
|
||||
flattenGeometry(boundingGeom, geomList);
|
||||
|
||||
List<Filter> filterList = new ArrayList<Filter>(geomList.size());
|
||||
List<Filter> filterList = new ArrayList<>(geomList.size());
|
||||
for (Geometry g : geomList) {
|
||||
Filter filter = ff
|
||||
.intersects(ff.property(geomField), ff.literal(g));
|
||||
|
@ -1055,6 +1059,10 @@ public class DataStoreResource extends
|
|||
|
||||
featureCollection = featureSource.getFeatures(query);
|
||||
|
||||
/*
|
||||
* TODO get the size some other way, as featureCollection.size() may
|
||||
* iterate over everything and potentially be slow
|
||||
*/
|
||||
int size = featureCollection.size();
|
||||
Set<String> attributeNames = attrTypeMap.keySet();
|
||||
attributes = new Object[size][attributeNames.size()];
|
||||
|
@ -1280,10 +1288,9 @@ public class DataStoreResource extends
|
|||
* worldToScreenRatio;
|
||||
RGB color = getCapability(ColorableCapability.class).getColor();
|
||||
IExtent extent = paintProps.getView().getExtent();
|
||||
List<DrawableString> strings = new ArrayList<DrawableString>(
|
||||
labels.size());
|
||||
List<LabelNode> selectedNodes = new ArrayList<LabelNode>(labels.size());
|
||||
List<IExtent> extents = new ArrayList<IExtent>();
|
||||
List<DrawableString> strings = new ArrayList<>(labels.size());
|
||||
List<LabelNode> selectedNodes = new ArrayList<>(labels.size());
|
||||
List<IExtent> extents = new ArrayList<>();
|
||||
String lastLabel = null;
|
||||
// get min distance
|
||||
double density = this.getCapability(DensityCapability.class)
|
||||
|
@ -1642,9 +1649,9 @@ public class DataStoreResource extends
|
|||
Geometry clickBox = JTS.transform(
|
||||
buildBoundingGeometry(bboxExtent, worldToScreenRatio,
|
||||
kmPerPixel), latLonToIncoming);
|
||||
List<Geometry> clickGeomList = new ArrayList<Geometry>();
|
||||
List<Geometry> clickGeomList = new ArrayList<>();
|
||||
flattenGeometry(clickBox, clickGeomList);
|
||||
List<Filter> clickFilterList = new ArrayList<Filter>(
|
||||
List<Filter> clickFilterList = new ArrayList<>(
|
||||
clickGeomList.size());
|
||||
for (Geometry g : clickGeomList) {
|
||||
Filter filter = ff.intersects(ff.property(geomField),
|
||||
|
@ -1668,7 +1675,7 @@ public class DataStoreResource extends
|
|||
.getFeatureSource(typeName);
|
||||
|
||||
featureCollection = featureSource.getFeatures(query);
|
||||
features = new ArrayList<SimpleFeature>(featureCollection.size());
|
||||
features = new ArrayList<>(featureCollection.size());
|
||||
featureIterator = featureCollection.features();
|
||||
|
||||
while (featureIterator.hasNext()) {
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
-Dlogback.statusListenerClass=com.raytheon.uf.common.status.logback.UFLogbackInternalStatusListener
|
||||
-Dthrift.stream.maxsize=200
|
||||
-Dviz.memory.warn.threshold=99
|
||||
-Dorg.eclipse.swt.internal.gtk.cairoGraphics=false
|
||||
-XX:MaxDirectMemorySize=1G
|
||||
-XX:+UnlockExperimentalVMOptions
|
||||
-XX:G1HeapRegionSize=4M
|
||||
|
@ -51,12 +52,10 @@
|
|||
</win>
|
||||
</launcher>
|
||||
|
||||
|
||||
<vm>
|
||||
<windows include="true">jdk1.6.0</windows>
|
||||
</vm>
|
||||
|
||||
|
||||
<plugins>
|
||||
</plugins>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue