#1990 Ignores GPS positions with 0/0 latitude and longitude values. (#1991)

(cherry picked from commit 55b20c75c0)

Co-authored-by: sheirerd <sheirerd@ainfosec.com>
This commit is contained in:
Denny Sheirer
2024-09-22 09:56:00 -04:00
committed by GitHub
parent 8070ae3c4b
commit 32ce79b8af
3 changed files with 54 additions and 38 deletions

View File

@@ -87,17 +87,20 @@ public class PlottableEntityHistory
*/ */
public void add(PlottableDecodeEvent event) public void add(PlottableDecodeEvent event)
{ {
TimestampedGeoPosition mostRecentPosition = getLatestPosition(); if(event.isValidLocation())
TimestampedGeoPosition latest = new TimestampedGeoPosition(event.getLocation(), event.getTimeStart());
if(isUnique(latest, mostRecentPosition))
{ {
mCurrentEvent = event; TimestampedGeoPosition mostRecentPosition = getLatestPosition();
mLocationHistory.add(0, latest); TimestampedGeoPosition latest = new TimestampedGeoPosition(event.getLocation(), event.getTimeStart());
while(mLocationHistory.size() > MAX_LOCATION_HISTORY) if(isUnique(latest, mostRecentPosition))
{ {
mLocationHistory.remove(mLocationHistory.size() - 1); mCurrentEvent = event;
mLocationHistory.add(0, latest);
while(mLocationHistory.size() > MAX_LOCATION_HISTORY)
{
mLocationHistory.remove(mLocationHistory.size() - 1);
}
} }
} }
} }

View File

@@ -101,42 +101,45 @@ public class PlottableEntityModel extends AbstractTableModel implements Listener
@Override @Override
public void receive(PlottableDecodeEvent plottableDecodeEvent) public void receive(PlottableDecodeEvent plottableDecodeEvent)
{ {
//Add or update the event on the swing event thread if(plottableDecodeEvent.isValidLocation())
EventQueue.invokeLater(() -> { {
Identifier from = plottableDecodeEvent.getIdentifierCollection().getFromIdentifier(); //Add or update the event on the swing event thread
EventQueue.invokeLater(() -> {
Identifier from = plottableDecodeEvent.getIdentifierCollection().getFromIdentifier();
if(from != null && from.getForm() != Form.LOCATION) if(from != null && from.getForm() != Form.LOCATION)
{
AliasListConfigurationIdentifier aliasList = plottableDecodeEvent.getIdentifierCollection().getAliasListConfiguration();
String key = (aliasList != null ? aliasList.toString() : KEY_NO_ALIAS_LIST) + from;
PlottableEntityHistory entityHistory = mEntityHistoryMap.get(key);
if(entityHistory == null)
{ {
entityHistory = new PlottableEntityHistory(from, plottableDecodeEvent); AliasListConfigurationIdentifier aliasList = plottableDecodeEvent.getIdentifierCollection().getAliasListConfiguration();
mEntityHistories.add(entityHistory); String key = (aliasList != null ? aliasList.toString() : KEY_NO_ALIAS_LIST) + from;
mEntityHistoryMap.put(key, entityHistory);
int index = mEntityHistories.indexOf(entityHistory); PlottableEntityHistory entityHistory = mEntityHistoryMap.get(key);
fireTableRowsInserted(index, index);
if(entityHistory == null)
{
entityHistory = new PlottableEntityHistory(from, plottableDecodeEvent);
mEntityHistories.add(entityHistory);
mEntityHistoryMap.put(key, entityHistory);
int index = mEntityHistories.indexOf(entityHistory);
fireTableRowsInserted(index, index);
}
else
{
entityHistory.add(plottableDecodeEvent);
int index = mEntityHistories.indexOf(entityHistory);
fireTableRowsUpdated(index, index);
}
for(IPlottableUpdateListener listener : mPlottableUpdateListeners)
{
listener.addPlottableEntity(entityHistory);
}
} }
else else
{ {
entityHistory.add(plottableDecodeEvent); LOGGER.warn("Received plottable decode event that does not contain a FROM identifier - cannot plot");
int index = mEntityHistories.indexOf(entityHistory);
fireTableRowsUpdated(index, index);
} }
});
for(IPlottableUpdateListener listener : mPlottableUpdateListeners) }
{
listener.addPlottableEntity(entityHistory);
}
}
else
{
LOGGER.warn("Received plottable decode event that does not contain a FROM identifier - cannot plot");
}
});
} }
@Override @Override

View File

@@ -62,6 +62,16 @@ public class PlottableDecodeEvent extends DecodeEvent
return mGeoPosition; return mGeoPosition;
} }
/**
* Indicates if the location is non-null and either latitude or longitude is not at the zero axis. If the location
* coordinates are zero or both are very small values close to zero, then the location is flagged as invalid.
*/
public boolean isValidLocation()
{
return mGeoPosition != null &&
((Math.abs(mGeoPosition.getLatitude()) > 0.01) || (Math.abs(mGeoPosition.getLongitude()) > 0.01));
}
/** /**
* Sets the heading for the mobile plottable event * Sets the heading for the mobile plottable event
* @param heading * @param heading