Issue #2537 Increase efficiency of DAF geometry requests when geometries are reused.
Change-Id: Idf0822745cdf3d52668223038f83c76e3de1c55c Former-commit-id:9b3bde3b49
[formerly3f3f74087a
] [formerlyfa46a08fec
] [formerlyed2e34e5aa
[formerlyfa46a08fec
[formerly 05c62ceb516807719a1649e0559a395ce604aee9]]] Former-commit-id:ed2e34e5aa
Former-commit-id: b410e6c352a9425f7237b9429b1f965279aadfe7 [formerly7dd641f5cc
] Former-commit-id:cf385ac2c3
This commit is contained in:
parent
a5bf22cefe
commit
2f46b15ae6
6 changed files with 60 additions and 25 deletions
|
@ -34,9 +34,10 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 03, 2013 dgilling Initial creation
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- ----------- --------------------------
|
||||
* Jun 03, 2013 dgilling Initial creation
|
||||
* Jan 06, 2014 2537 bsteffen Store geometry index instead of WKT.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -51,13 +52,13 @@ public class GeometryResponseData extends AbstractResponseData {
|
|||
private Map<String, Object[]> dataMap;
|
||||
|
||||
@DynamicSerializeElement
|
||||
private String geometryWKT;
|
||||
private int geometryWKTindex;
|
||||
|
||||
public GeometryResponseData() {
|
||||
// no-op, for serialization
|
||||
}
|
||||
|
||||
public GeometryResponseData(final IGeometryData data) {
|
||||
public GeometryResponseData(final IGeometryData data, final int geometryWKTindex) {
|
||||
super(data);
|
||||
|
||||
Set<String> parameters = data.getParameters();
|
||||
|
@ -75,7 +76,7 @@ public class GeometryResponseData extends AbstractResponseData {
|
|||
}
|
||||
dataMap.put(param, dataTuple);
|
||||
}
|
||||
geometryWKT = data.getGeometry().toText();
|
||||
this.geometryWKTindex = geometryWKTindex;
|
||||
}
|
||||
|
||||
public Map<String, Object[]> getDataMap() {
|
||||
|
@ -86,11 +87,11 @@ public class GeometryResponseData extends AbstractResponseData {
|
|||
this.dataMap = dataMap;
|
||||
}
|
||||
|
||||
public String getGeometryWKT() {
|
||||
return geometryWKT;
|
||||
public int getGeometryWKTindex() {
|
||||
return geometryWKTindex;
|
||||
}
|
||||
|
||||
public void setGeometryWKT(String geometry) {
|
||||
this.geometryWKT = geometry;
|
||||
public void setGeometryWKTindex(int geometryWKTindex) {
|
||||
this.geometryWKTindex = geometryWKTindex;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,9 +34,10 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 3, 2013 dgilling Initial creation
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- ----------- --------------------------
|
||||
* Jun 3, 2013 dgilling Initial creation
|
||||
* Jan 06, 2014 2537 bsteffen Share geometry WKT.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -47,6 +48,9 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|||
@DynamicSerialize
|
||||
public class GetGeometryDataResponse {
|
||||
|
||||
@DynamicSerializeElement
|
||||
private List<String> geometryWKTs;
|
||||
|
||||
@DynamicSerializeElement
|
||||
private List<GeometryResponseData> geoData;
|
||||
|
||||
|
@ -55,9 +59,16 @@ public class GetGeometryDataResponse {
|
|||
}
|
||||
|
||||
public GetGeometryDataResponse(final Collection<IGeometryData> geoData) {
|
||||
this.geometryWKTs = new ArrayList<String>();
|
||||
this.geoData = new ArrayList<GeometryResponseData>(geoData.size());
|
||||
for (IGeometryData element : geoData) {
|
||||
this.geoData.add(new GeometryResponseData(element));
|
||||
String wkt = element.getGeometry().toText();
|
||||
int index = geometryWKTs.indexOf(wkt);
|
||||
if (index == -1) {
|
||||
index = geometryWKTs.size();
|
||||
geometryWKTs.add(wkt);
|
||||
}
|
||||
this.geoData.add(new GeometryResponseData(element, index));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,4 +79,13 @@ public class GetGeometryDataResponse {
|
|||
public void setGeoData(List<GeometryResponseData> geoData) {
|
||||
this.geoData = geoData;
|
||||
}
|
||||
|
||||
public List<String> getGeometryWKTs() {
|
||||
return geometryWKTs;
|
||||
}
|
||||
|
||||
public void setGeometryWKTs(List<String> geometryWKTs) {
|
||||
this.geometryWKTs = geometryWKTs;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 06/04/13 #2023 dgilling Initial Creation.
|
||||
# 01/06/14 #2537 bsteffen Store geometry index instead of WKT.
|
||||
#
|
||||
#
|
||||
|
||||
|
@ -37,7 +38,7 @@ class GeometryResponseData(AbstractResponseData):
|
|||
def __init__(self):
|
||||
super(GeometryResponseData, self).__init__()
|
||||
self.dataMap = None
|
||||
self.geometryWKT = None
|
||||
self.geometryWKTindex = None
|
||||
|
||||
def getDataMap(self):
|
||||
return self.dataMap
|
||||
|
@ -45,8 +46,8 @@ class GeometryResponseData(AbstractResponseData):
|
|||
def setDataMap(self, dataMap):
|
||||
self.dataMap = dataMap
|
||||
|
||||
def getGeometryWKT(self):
|
||||
return self.geometryWKT
|
||||
def getGeometryWKTindex(self):
|
||||
return self.geometryWKTindex
|
||||
|
||||
def setGeometryWKT(self, geometryWKT):
|
||||
self.geometryWKT = geometryWKT
|
||||
def setGeometryWKTindex(self, geometryWKTindex):
|
||||
self.geometryWKTindex = geometryWKTindex
|
||||
|
|
|
@ -23,8 +23,15 @@
|
|||
class GetGeometryDataResponse(object):
|
||||
|
||||
def __init__(self):
|
||||
self.geometryWKTs = None
|
||||
self.geoData = None
|
||||
|
||||
def getGeometryWKTs(self):
|
||||
return self.geometryWKTs
|
||||
|
||||
def setGeometryWKTs(self, geometryWKTs):
|
||||
self.geometryWKTs = geometryWKTs
|
||||
|
||||
def getGeoData(self):
|
||||
return self.geoData
|
||||
|
||||
|
|
|
@ -28,19 +28,18 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 06/03/13 dgilling Initial Creation.
|
||||
# 01/06/14 #2537 bsteffen Share geometry WKT.
|
||||
#
|
||||
#
|
||||
|
||||
from ufpy.dataaccess import IGeometryData
|
||||
from ufpy.dataaccess import PyData
|
||||
import shapely.wkt
|
||||
|
||||
|
||||
class PyGeometryData(IGeometryData, PyData.PyData):
|
||||
|
||||
def __init__(self, geoDataRecord):
|
||||
def __init__(self, geoDataRecord, geometry):
|
||||
PyData.PyData.__init__(self, geoDataRecord)
|
||||
self.__geometry = shapely.wkt.loads(geoDataRecord.getGeometryWKT())
|
||||
self.__geometry = geometry
|
||||
self.__dataMap = {}
|
||||
tempDataMap = geoDataRecord.getDataMap()
|
||||
for key, value in tempDataMap.items():
|
||||
|
|
|
@ -28,10 +28,12 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 05/21/13 #2023 dgilling Initial Creation.
|
||||
# 01/06/14 #2537 bsteffen Share geometry WKT.
|
||||
#
|
||||
|
||||
|
||||
import numpy
|
||||
import shapely.wkt
|
||||
|
||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.impl import DefaultDataRequest
|
||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableLocationNamesRequest
|
||||
|
@ -43,6 +45,7 @@ from ufpy import ThriftClient
|
|||
from ufpy.dataaccess import PyGeometryData
|
||||
from ufpy.dataaccess import PyGridData
|
||||
|
||||
|
||||
class ThriftClientRouter(object):
|
||||
|
||||
def __init__(self, host='localhost'):
|
||||
|
@ -97,10 +100,14 @@ class ThriftClientRouter(object):
|
|||
except TypeError:
|
||||
geoDataRequest.setRequestedPeriod(times)
|
||||
response = self._client.sendRequest(geoDataRequest)
|
||||
|
||||
geometries = []
|
||||
for wkt in response.getGeometryWKTs():
|
||||
geometries.append(shapely.wkt.loads(wkt))
|
||||
|
||||
retVal = []
|
||||
for geoDataRecord in response.getGeoData():
|
||||
retVal.append(PyGeometryData.PyGeometryData(geoDataRecord))
|
||||
geom = geometries[geoDataRecord.getGeometryWKTindex()]
|
||||
retVal.append(PyGeometryData.PyGeometryData(geoDataRecord, geom))
|
||||
return retVal
|
||||
|
||||
def getAvailableLocationNames(self, request):
|
||||
|
|
Loading…
Add table
Reference in a new issue