|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.bbn.openmap.dataAccess.shape.ShapeUtils com.bbn.openmap.layer.shape.SpatialIndex
public class SpatialIndex
A Spatial Index is a variation on a Shape Index, adding the bounding box of the shape to the index.
The file has a 100 byte header identical to a Shape Index followed by n records. Usage
Dumps spatial index information, excluding bounding boxes to stdout.
Useful for comparing to a shape index.
java com.bbn.openmap.layer.shape.SpatialIndex -d file.ssx
Dumps spatial index information including bounding boxes to stdout.
java com.bbn.openmap.layer.shape.SpatialIndex -d -b file.ssx
Creates spatial index file.ssx
from shape file.shp
java com.bbn.openmap.layer.shape.SpatialIndex -c file.shp
NotesWhen reading the Shape file, the content length is the length of the record's contents, exclusive of the record header (8 bytes). So the size that we need to read in from the Shape file is actually denoted as ((contentLength * 2) + 8). This converts from 16bit units to 8 bit bytes and adds the 8 bytes for the record header.
ShapeIndex
Nested Class Summary | |
---|---|
static class |
SpatialIndex.Entry
The spatial information for each shp entry is held in one of these. |
static class |
SpatialIndex.FileIndex
|
static class |
SpatialIndex.MemoryIndex
|
Field Summary | |
---|---|
protected ESRIBoundingBox |
bounds
The bounds of all the shapes in the shape file. |
protected DbfHandler |
dbf
The handler for dbf file information. |
static int |
DEFAULT_SHAPE_RECORD_SIZE
Default size for shape record buffer. |
protected java.util.List<SpatialIndex.Entry> |
entries
A cached list of the SpatialIndex file entries, for repeated reference. |
static java.util.logging.Logger |
logger
|
protected javax.swing.ImageIcon |
pointIcon
The icon to use for point objects. |
static int |
SHAPE_FILE_HEADER_LENGTH
Size of a shape file header in bytes. |
static int |
SHAPE_RECORD_HEADER_LENGTH
Size of a shape file record header in bytes. |
protected BinaryFile |
shp
The shape file. |
protected java.lang.String |
shpFileName
The file name for the shape file, for opening/reopening. |
static int |
SPATIAL_INDEX_HEADER_LENGTH
Size of the spatial index header in bytes. |
static int |
SPATIAL_INDEX_RECORD_LENGTH
Size of the spatial index record in bytes. |
Constructor Summary | |
---|---|
SpatialIndex(java.lang.String shpFilename)
Opens a spatial index file for reading based on the location of the provided shp file. |
|
SpatialIndex(java.lang.String ssxFilename,
java.lang.String shpFilename)
Deprecated. ssx file is figured based on the shp file path |
Method Summary | |
---|---|
boolean |
close(boolean done)
|
static java.lang.String |
dbf(java.lang.String shpFileName)
Figures out the dbf file name from the shp file name. |
void |
dumpIndex(boolean showBounds)
Displays the contents of this index. |
java.util.Iterator<SpatialIndex.Entry> |
entryIterator()
Provides an iterator over the SpatialIndex entries. |
java.util.Iterator<SpatialIndex.Entry> |
entryIterator(GeoCoordTransformation dataTransform)
Provides an iterator over the SpatialIndex entries. |
OMGraphic |
evaluate(OMGraphic omg,
OMGraphicList labels,
Projection mapProj)
Evaluates the OMGraphic against the DbfHandler rules. |
OMGraphicList |
evaluateDbf(OMGraphicList retList,
Projection mapProj)
Takes the contents of the list and evaluates them against the information contained in the DbfHandler set in this SpatialIndex class. |
OMGraphicList |
getAllOMGraphics(OMGraphicList retList,
DrawingAttributes drawingAttributes,
Projection mapProj,
GeoCoordTransformation dataProj)
Retrieves all OMGraphics in the shape file. |
ESRIBoundingBox |
getBounds()
Get the box boundary containing all the shapes. |
ESRIBoundingBox |
getBounds(GeoCoordTransformation coordTransform)
Returns the bounds of the shape file. |
DbfHandler |
getDbf()
|
EsriGraphicFactory |
getFactory()
The factory is used to filter and create OMGraphics from a shape file. |
OMGraphic |
getOMGraphicAtOffset(int byteOffset,
DrawingAttributes drawingAttributes)
Skips the BinaryFile for the shp data to the offset and reads the record data there, creating an OMGraphic from that data. |
OMGraphicList |
getOMGraphics(double xmin,
double ymin,
double xmax,
double ymax,
OMGraphicList list,
DrawingAttributes drawingAttributes,
Projection mapProj,
GeoCoordTransformation dataProj)
Locates OMGraphics in the shape file that intersect with the given rectangle. |
javax.swing.ImageIcon |
getPointIcon()
Get the icon used for general point objects. |
protected BinaryFile |
getShpFile(java.lang.String shapeFileName)
Method that can be overridden to adjust how the BinaryFile is created for shp files. |
protected static boolean |
intersects(double xmin1,
double ymin1,
double xmax1,
double ymax1,
double xmin2,
double ymin2,
double xmax2,
double ymax2)
Determines if two rectangles intersect. |
static SpatialIndex |
locateAndSetShapeData(java.lang.String shapeFileName)
Create a SpatialIndex object with just a shape file name. |
static java.lang.String |
locateFile(java.lang.String name)
Locate file 'fileName' in classpath, if it is not an absolute file name. |
ESRIRecord[] |
locateRecords(double xmin,
double ymin,
double xmax,
double ymax)
Locates records in the shape file that intersect with the given rectangle. |
static void |
main(java.lang.String[] argv)
The driver for the command line interface. |
ESRIRecord |
makeESRIRecord(int shapeType,
byte[] b,
int off)
Creates a record instance from the shape file data. |
static void |
printUsage(java.io.PrintStream out)
Prints a usage statement describing how to use this class from the command line. |
protected java.util.List<SpatialIndex.Entry> |
readIndexFile(ESRIBoundingBox bounds)
|
protected java.util.List<SpatialIndex.Entry> |
readIndexFile(ESRIBoundingBox bounds,
GeoCoordTransformation dataTransform)
|
void |
resetBounds()
Reset the bounds so they will be recalculated the next time a file is read. |
void |
setDbf(DbfHandler dbf)
|
void |
setFactory(EsriGraphicFactory factory)
|
void |
setPointIcon(javax.swing.ImageIcon ii)
Set the icon to use for point objects, in general. |
static java.lang.String |
ssx(java.lang.String shpFileName)
Figures out the ssx file name from the shp file name. |
Methods inherited from class com.bbn.openmap.dataAccess.shape.ShapeUtils |
---|
getStringForType, readBEInt, readBox, readLEDouble, readLEInt, readLEInt, readLELong, readPoint, writeBEInt, writeBox, writeLEDouble, writeLEInt, writeLELong, writePoint |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static java.util.logging.Logger logger
public static final int SHAPE_FILE_HEADER_LENGTH
public static final int SHAPE_RECORD_HEADER_LENGTH
public static final int SPATIAL_INDEX_HEADER_LENGTH
public static final int SPATIAL_INDEX_RECORD_LENGTH
public static final int DEFAULT_SHAPE_RECORD_SIZE
protected BinaryFile shp
protected DbfHandler dbf
protected javax.swing.ImageIcon pointIcon
protected ESRIBoundingBox bounds
protected java.lang.String shpFileName
protected java.util.List<SpatialIndex.Entry> entries
Constructor Detail |
---|
public SpatialIndex(java.lang.String shpFilename) throws java.io.IOException
shpFilename
- the name of the spatial index file
java.io.IOException
- if something goes wrong opening the filepublic SpatialIndex(java.lang.String ssxFilename, java.lang.String shpFilename) throws java.io.IOException
ssxFilename
- the name of the spatial index fileshpFilename
- the name of the shape file
java.io.IOException
- if something goes wrong opening the filesMethod Detail |
---|
public static java.lang.String ssx(java.lang.String shpFileName)
shpFileName
-
public static java.lang.String dbf(java.lang.String shpFileName)
shpFileName
-
public ESRIBoundingBox getBounds()
protected BinaryFile getShpFile(java.lang.String shapeFileName) throws java.io.IOException
shapeFileName
- The path to shape file, absolute, relative or URL
java.io.IOException
- if the shapeFileName can't be found.public ESRIBoundingBox getBounds(GeoCoordTransformation coordTransform)
coordTransform
-
public void resetBounds()
public ESRIRecord makeESRIRecord(int shapeType, byte[] b, int off) throws java.io.IOException
shapeType
- the shape file's shape type, enumerated in
ShapeUtils
b
- the buffer pointing to the raw record dataoff
- the offset of the data starting point in the buffer
java.io.IOException
- if something goes wrong reading the fileShapeUtils
public ESRIRecord[] locateRecords(double xmin, double ymin, double xmax, double ymax) throws java.io.IOException, FormatException
xmin
- the smaller of the x coordinatesymin
- the smaller of the y coordinatesxmax
- the larger of the x coordinatesymax
- the larger of the y coordinates
java.io.IOException
- if something goes wrong reading the files
FormatException
public EsriGraphicFactory getFactory()
public void setFactory(EsriGraphicFactory factory)
public OMGraphicList getOMGraphics(double xmin, double ymin, double xmax, double ymax, OMGraphicList list, DrawingAttributes drawingAttributes, Projection mapProj, GeoCoordTransformation dataProj) throws java.io.IOException, FormatException
xmin
- the smaller of the x coordinatesymin
- the smaller of the y coordinatesxmax
- the larger of the x coordinatesymax
- the larger of the y coordinateslist
- OMGraphicList to add OMGraphics to and return, if null one
will be created.drawingAttributes
- DrawingAttributes to set on the OMGraphics.mapProj
- the Map Projection for the OMGraphics so they can be
generated right after creation.dataProj
- for pre-projected data, a coordinate translator for the
data's projection to use to translate the coordinates to decimal
degree lat/lon. Can be null to leave the coordinates untouched.
java.io.IOException
- if something goes wrong reading the files
FormatException
public OMGraphicList getAllOMGraphics(OMGraphicList retList, DrawingAttributes drawingAttributes, Projection mapProj, GeoCoordTransformation dataProj) throws java.io.IOException, FormatException
retList
- OMGraphicList to add OMGraphics to and return, if null one
will be created.drawingAttributes
- DrawingAttributes to set on the OMGraphics.mapProj
- the Map Projection for the OMGraphics so they can be
generated right after creation. This will also be used by the
DbfHandler, to determine if some OMGraphics should not be returned
based on attribute settings.dataProj
- for preprojected data, a coordinate translator for the
data's projection to use to translate the coordinates to decimal
degree lat/lon. Can be null to leave the coordinates untouched.
java.io.IOException
- if something goes wrong reading the files
FormatException
public OMGraphicList evaluateDbf(OMGraphicList retList, Projection mapProj)
retList
- the list of OMGraphics to evaluate.mapProj
- the current map projection to be used by the DbfHandler to
determine if some OMGraphics should be visible.
public OMGraphic evaluate(OMGraphic omg, OMGraphicList labels, Projection mapProj)
omg
- the OMGraphic to evaluate.labels
- for DbfHandler label rules. Assumes that you are managing
display of the labels list.mapProj
- for DbfHandler scale rules.
public OMGraphic getOMGraphicAtOffset(int byteOffset, DrawingAttributes drawingAttributes) throws java.io.IOException, FormatException
byteOffset
- , usually gotten from an Entry object.drawingAttributes
-
java.io.IOException
FormatException
public java.util.Iterator<SpatialIndex.Entry> entryIterator() throws java.io.IOException, FormatException
java.io.IOException
FormatException
public java.util.Iterator<SpatialIndex.Entry> entryIterator(GeoCoordTransformation dataTransform) throws java.io.IOException, FormatException
dataTransform
- GeoCoordTransform for pre-projected data.
java.io.IOException
FormatException
protected java.util.List<SpatialIndex.Entry> readIndexFile(ESRIBoundingBox bounds) throws java.io.IOException, FormatException
bounds
- if not null, add min/max values to them.
java.io.IOException
FormatException
protected java.util.List<SpatialIndex.Entry> readIndexFile(ESRIBoundingBox bounds, GeoCoordTransformation dataTransform) throws java.io.IOException, FormatException
bounds
- if not null, add min/max values to them.dataTransform
- GeoCoordTransform for pre-projected data.
java.io.IOException
FormatException
protected static final boolean intersects(double xmin1, double ymin1, double xmax1, double ymax1, double xmin2, double ymin2, double xmax2, double ymax2)
xmin1
- the small x of rectangle 1ymin1
- the small y of rectangle 1xmax1
- the big x of rectangle 1ymax1
- the big y of rectangle 1xmin2
- the small x of rectangle 2ymin2
- the small y of rectangle 2xmax2
- the big x of rectangle 2ymax2
- the big y of rectangle 2
true
if the rectangles intersect, false
if they do notpublic void dumpIndex(boolean showBounds) throws java.io.IOException
showBounds
- true to show bounding box, false to skip it
java.io.IOException
- if something goes wrong reading the filepublic static void printUsage(java.io.PrintStream out)
out
- The output stream to use for outputpublic static java.lang.String locateFile(java.lang.String name)
public static SpatialIndex locateAndSetShapeData(java.lang.String shapeFileName)
public static void main(java.lang.String[] argv) throws java.io.IOException
See the file documentation for usage.
argv
- the command line arguments
java.io.IOException
- if something goes wrong reading or writing the
filepublic void setPointIcon(javax.swing.ImageIcon ii)
ii
- ImageIcon to use for icon.public javax.swing.ImageIcon getPointIcon()
public boolean close(boolean done)
public DbfHandler getDbf()
public void setDbf(DbfHandler dbf)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |