The "seismicdata" web service provides meta data about a seismic dataset.
A typical URL is: http://myserver.mycompany.com:8080/INTGeoServer/json/seismicdata?json={"file":"testXGY1.xgy","showNormalizationStats":true}
The following parameters are available:
file: the relative path of the specified dataset. This is a required parameter. If a path encoder is used, this path is encoded.
showNormalizationStats: indicates whether the statistics section should be included in the JSON response. This is an optional parameter. The default is true. This parameter is useful when displaying datasets that have no built-in amplitude statistics. If you don't need the server to calculate these statistics, you can improve the performance of the "seismicdata" service by setting this parameter to false. Statistics are usually approximative and meant to be used as part of the normalization of seismic displays. Statistics are often calculated based upon only a small selection of traces (ex: 200 traces that are far apart)
showEBCDIC: indicates whether the EBCDIC header should be included. This is an optional parameter. The default is true.
Here is an example response. This response has been formatted to improve readability
{
"version":1,
"displayName":"testXGY1",
"keys":[
{
"key":"INLINE",
"min":250.0,
"max":300.0,
"increment":1.0,
"sampleKey":false
},
{
"key":"XLINE",
"min":200.0,
"max":300.0,
"increment":1.0,
"sampleKey":false
},
{
"key":"Time",
"min":0.0,
"max":5.996,
"increment":0.004,
"sampleKey":true
}
],
"numberOfSamples":1500,
"numberOfTraces":5151,
"startValue":0.0,
"sampleRate":0.004,
"statistics":{
"min":-24.092697,
"max":26.9478,
"mean":2.76918,
"rms":3.8810556,
"percentiles":[
0.0,
0.0,
0.015941482,
0.04087515,
0.06720829,
0.09520638,
0.12476909,
0.1550864,
0.18737173,
0.22066283,
0.25472617,
0.2894727,
0.32496524,
0.36081988,
0.39719146,
0.4342698,
0.47139704,
0.5088227,
0.5463008,
0.58431256,
0.6229076,
0.661401,
0.7005828,
0.74078435,
0.7811172,
0.8212104,
0.86174655,
0.9027857,
0.94389427,
0.98555094,
1.027978,
1.0707445,
1.1140394,
1.1569633,
1.2007961,
1.2451267,
1.2903805,
1.3354559,
1.3821106,
1.4281721,
1.4750195,
1.5230722,
1.5716295,
1.6205082,
1.6703806,
1.7206669,
1.7708979,
1.8235674,
1.876401,
1.9299011,
1.9845495,
2.0400705,
2.0963163,
2.1539612,
2.2123814,
2.2721043,
2.3321028,
2.3943243,
2.4577885,
2.5226412,
2.589923,
2.65769,
2.7267904,
2.7969437,
2.869217,
2.9444036,
3.021119,
3.1001701,
3.1807003,
3.2632504,
3.3485527,
3.4380941,
3.5296373,
3.6240063,
3.723939,
3.8273335,
3.9358196,
4.0475903,
4.1650114,
4.28831,
4.4197483,
4.55698,
4.7010746,
4.853963,
5.01964,
5.193651,
5.3809395,
5.5811787,
5.7998276,
6.038084,
6.3024282,
6.5933743,
6.9230385,
7.299368,
7.733119,
8.244971,
8.866034,
9.661806,
10.77998,
12.608553,
26.9478
]
},
"gridCoordinates":[
{
"values":[
170.0,
170.0,
3267878.1625362784,
588349.4775910238
]
},
{
"values":[
170.0,
640.0,
3319519.6011048523,
590804.0901241377
]
},
{
"values":[
540.0,
170.0,
3265946.2261511893,
629003.4228727974
]
}
],
"traceHeader":{
"fields":[
{
"name":"TSSN",
"id":0,
"type":"UInt",
"size":4
},
{
"name":"FIELD REC",
"id":1,
"type":"UInt",
"size":4
},
{
"name":"FIELD TR",
"id":2,
"type":"UInt",
"size":4
},
{
"name":"SHTPT ID",
"id":3,
"type":"UInt",
"size":4
},
{
"name":"CDP",
"id":4,
"type":"Int",
"size":4
},
{
"name":"CDPTR",
"id":5,
"type":"UInt",
"size":4
},
{
"name":"TRACE ID",
"id":6,
"type":"UShort",
"size":2
},
{
"name":"VERT SUM",
"id":7,
"type":"UShort",
"size":2
},
{
"name":"HORZ SUM",
"id":8,
"type":"UShort",
"size":2
},
{
"name":"DATA USE",
"id":9,
"type":"UShort",
"size":2
},
{
"name":"OFFSET",
"id":10,
"type":"Int",
"size":4
},
{
"name":"RCV ELEV",
"id":11,
"type":"Int",
"size":4
},
{
"name":"SRC ELEV",
"id":12,
"type":"Int",
"size":4
},
{
"name":"SRC DEPTH",
"id":13,
"type":"UInt",
"size":4
},
{
"name":"RCV DATUM",
"id":14,
"type":"Int",
"size":4
},
{
"name":"SRC DATUM",
"id":15,
"type":"Int",
"size":4
},
{
"name":"SRC WATER DEPTH",
"id":16,
"type":"Int",
"size":4
},
{
"name":"RCV WATER DEPTH",
"id":17,
"type":"Int",
"size":4
},
{
"name":"ELEVATION SCALER",
"id":18,
"type":"Short",
"size":2
},
{
"name":"LOC SCALER",
"id":19,
"type":"Short",
"size":2
},
{
"name":"SRCX",
"id":20,
"type":"UInt",
"size":4
},
{
"name":"SRCY",
"id":21,
"type":"UInt",
"size":4
},
{
"name":"RCVX",
"id":22,
"type":"UInt",
"size":4
},
{
"name":"RCVY",
"id":23,
"type":"UInt",
"size":4
},
{
"name":"COORD UNITS",
"id":24,
"type":"UShort",
"size":2
},
{
"name":"WEATHER VEL",
"id":25,
"type":"UShort",
"size":2
},
{
"name":"SUBWEATHER VEL",
"id":26,
"type":"UShort",
"size":2
},
{
"name":"SRC UPHOLE TIME",
"id":27,
"type":"Short",
"size":2
},
{
"name":"RCV UPHOLE TIME",
"id":28,
"type":"Short",
"size":2
},
{
"name":"SRC STATIC CORR",
"id":29,
"type":"Short",
"size":2
},
{
"name":"RCV STATIC CORR",
"id":30,
"type":"Short",
"size":2
},
{
"name":"TOTAL STATIC CORR",
"id":31,
"type":"Short",
"size":2
},
{
"name":"LAG A",
"id":32,
"type":"Short",
"size":2
},
{
"name":"LAG B",
"id":33,
"type":"Short",
"size":2
},
{
"name":"START TIME",
"id":34,
"type":"Short",
"size":2
},
{
"name":"MUTE START",
"id":35,
"type":"Short",
"size":2
},
{
"name":"MUTE END",
"id":36,
"type":"Short",
"size":2
},
{
"name":"SAMPLES IN TRACE",
"id":37,
"type":"UShort",
"size":2
},
{
"name":"SAMPLE RATE",
"id":38,
"type":"UShort",
"size":2
},
{
"name":"CDPX",
"id":39,
"type":"Float",
"size":4
},
{
"name":"CDPY",
"id":40,
"type":"Float",
"size":4
},
{
"name":"INLINE",
"id":41,
"type":"Int",
"size":4
},
{
"name":"XLINE",
"id":42,
"type":"Int",
"size":4
},
{
"name":"SHTPT NUM",
"id":43,
"type":"UInt",
"size":4
},
{
"name":"SURF TIME SCALER",
"id":44,
"type":"Int",
"size":4
},
{
"name":"TraceNumber",
"id":1100,
"type":"Double",
"size":8
}
],
"size":148
},
"outline":[
[
[
249.5,
199.5
],
[
300.5,
199.5
],
[
300.5,
300.5
],
[
249.5,
300.5
]
]
],
"traceOrders":[
1
],
"units":0,
"zUnit":"s",
"indexType":"NONINDEXED",
"volumeDefaultKeyNames":{
"i":"INLINE",
"j":"XLINE"
},
"epsgCode":"32056:1176",
"regular":false,
"seismicFormatName":"Indexed-Segy",
"ebcdic":[
"C01++cdp_stack+test+dataset+++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C02+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C03+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C04+Data%3A+++CDP+Gathers+%28Multiple+Attenuation+Applied%29++++++++++++++++++++++++++",
"C05+Header+bytes+181-184%3A+Inline+%28integer%29++++++++++++++++++++++++++++++++++++++",
"C06+Header+bytes+185-188%3A+Crossline+%28integer%29+++++++++++++++++++++++++++++++++++",
"C07+Header+bytes+189-192%3A+CDP+X+Coordinate+%28IEEE+Floating+point%29++++++++++++++++",
"C08+Header+bytes+193-196%3A+CDP+Y+Coordinate+%28IEEE+Floating+point%29++++++++++++++++",
"C09+Grid+Corners%3A+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C10++++Corner++++Inline+++++Xline+++++++++X+++++++++Y+++++++++++++++++++++++++++",
"C11+++++++++1+++++++++1+++++++++1+++3250192+568898.62+++++++++++++++++++++++++++",
"C12+++++++++2+++++++++1+++++++693+++3326226+572512.38+++++++++++++++++++++++++++",
"C13+++++++++3+++++++629+++++++693+3322946.5+641514.44+++++++++++++++++++++++++++",
"C14+++++++++4+++++++629+++++++++1+3246912.5+637900.69+++++++++++++++++++++++++++",
"C15+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C16+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C17+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C18+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C19+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C20+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C21+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C22+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C23+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C24+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C25+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C26+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C27+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C28+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C29+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C30+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C31+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C32+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C33+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C34+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C35+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C36+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C37+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C38+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C39+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"C40+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
]
}
The version entry is an obsolete attribute that indicates which JSON format is being used for the response. Code dependent on the server version should use the serverinfo web service instead.
The displayName entry is the name of the specified file, without the extension.
The keys entry is a collection of all indexed seismic fields. Indexed seismic fields can be used as part of queries such as range queries. See the seismicquery web service for more information on how to perform queries. Raw Segy files typically have two key names: TraceNumber and Time. Indexed Segy files can have a varied set of keys, such as INLINE/XLINE/Time for volumes or INLINE/XLINE/OFFSET/Time for gathers. The names vary for each indexed dataset based upon the selections made during indexing. For each key, the boundaries (min and max) are specified along with an increment. The increment represents the minimum step between two traces along the specified axis. If no particular gridding was detecting during indexing and all values are integers, the increment is typically 1. The sampleKey attribute indicates which key represents the samples axis. There can be only one key with sampleKey attribute set to true. Do not assume that key values are all integers. Also, the step might be negative to indicate that the traces are stored on disk in reverse order.
The numberOfSamples entry represents the number of samples in each trace. The number of samples is identical for all traces.
The numberOfTraces entry represents the total number of traces found in the file. If a volume has no missing traces (the dataset is "regular"), this is the number of INLINEs multiplied by the number of XLINEs.
The startValue entry represents the time (or depth) of the first sample. This is the same value as the min attribute of the sample key. Do not assume that this value is always positive.
The sampleRate entry represents the time (or depth) increment between two consecutive samples. This is the same value as the increment attribute of the sample key. To calculate the time (or depth) of the last sample, the formula is:
endValue = startValue + (numberOfSamples - 1) * sampleRate
The statistics section gathers all amplitude statistics, only present if showNormalizationStats was not set to False. The min entry represents the minimum amplitude found. The max entry represents the maximum amplitude found. The mean entry represents the average amplitude for all amplitudes found. The rms entry represents the root mean square of all amplitudes found. The percentiles entry details the distribution frequency of all amplitudes found, from 0 to 100 with 1% increments.
The gridCoordinates entry represents the corner point geometry that converts INLINE/XLINE coordinates to X/Y coordinates. This corner point geometry is usually calculated or entered during indexing and might not be available. You only need to know the conversion of three non-aligned points to convert all points. In this example:
"gridCoordinates":[
{
"values":[
170.0,
170.0,
3267878.1625362784,
588349.4775910238
]
},
{
"values":[
170.0,
640.0,
3319519.6011048523,
590804.0901241377
]
},
{
"values":[
540.0,
170.0,
3265946.2261511893,
629003.4228727974
]
}
],
The following points are converted as follow:
INLINE=170, XLINE=170 converts to X=3267878.1625362784, Y=588349.4775910238
INLINE=170, XLINE=640 converts to X=3319519.6011048523, Y=590804.0901241377
INLINE=540, XLINE=170 converts to X=3265946.2261511893, Y=629003.4228727974
Note that the precision of the X,Y values might be too high. Two-digits precision is usually enough for most applications.
The traceHeader section lists all headers of a seismic dataset, whether they are indexed or non-indexed headers. These are the headers you'd retrieve when executing XSection queries.
Each header is identified by an id. All ids are unique but they might not be sequential. The name attribute indicates the name of each header. There is no guarantee that names are identical from one dataset to the next. For example, Segy files tend to use the keyword INLINE while Promax files use the keyword INLINE_NO. By convention, header names are uppercase, but this convention might not be followed by all datasets. However, the name of the indexed keys (in the keys section) must match exactly header names. The type can have several values:
UInt, for unsigned integer
Int, for signed integer
UShort, for unsigned short
Short, for signed short
Float
Double
The mapTraceHeader section lists the two headers of a seismic dataset when executing Map queries. This section is only populated if the dataset support Map queries.
The units entry indicates whether the dataset is in time or depth.
0 for time
1 for feet
2 for meters
The zUnit entry represents the symbol of the vertical unit, typically:
s for seconds
ms for milliseconds
m for meters
ft for feet
The indexedType entry represents the type of dataset, as set during indexing.
Values are:
VOLUME for volume
GATHER for gather
CUSTOM for custom
2DLINE for 2D line
NONINDEXED for raw files (ex: .sgy files)
The fields size attribute represents the number of bytes needed to represent all header values when a trace is sent over the network. This size is important when decoding headers as part of the seismictraces web service as the content length calculation is based upon this number. The traceHeader size attribute represents the sum of all sizes, adjusted to the next multiple of 4.
The traceOrders entry represents the types of query that are supported by this dataset:
1 for XSection queries
2 for Map queries
See the seismicquery web service for information about XSection vs Map queries. Most datasets support XSection queries. Datasets that have been transposed support Map queries. In rare cases, a dataset might support Map queries but not XSection queries.
The outline entry represents the points that defines the contour of a survey. Because it's a contour, it is always 1/2 an increment away from the center of each trace bordering the survey. The outline is shown in blue in the figure below:
The outline is typically calculated during indexing. An outline is not necessarily available for all datasets.
The volumeKeyNames entry represents the key names explicitly captured during indexing defining the dataset as a volume. This entry is not present if these key names are not known for sure. The i attribute represents the first key, the j attribute represents the second key.
The volumeDefaultKeyNames entry represents the "best guess" for which two keys define the dataset as a volume. Typically, you would ask the user to confirm this guess. The algorithm the perform this best guess is based only on the key names, not the values. For example, if a dataset is indexed with only two keys (INLINE and XLINE), the best guess algorithm will pick those two keys. If a dataset is indexed with three keys (INLINE, XLINE, OFFSET), the best guess algorithm will pick INLINE and XLINE. If the indexing explicitly captured the volume key names, this entry should be the same as volumeKeyNames.
The xyKeyNames entry represents the field names explicitly captured during indexing defining the X and Y headers. The xKeyName attribute is the name of the X field. This is typically CDPX. The yKeyName attribute is the name of the Y field. This is typically CDPY. Additional multiplier rules are need to read X,Y coordinates from trace header fields. If the multiplierType is:
0, no multiplier is needed
1, the multiplier field designated by the multiplierFieldName attribute should be used. Typically, the multiplier field name is LOC SCALER
2, a fixed multiplier designated by the fixedMultiplier attribute should be used
By convention, if the multiplier value is negative, the X and Y values found should be DIVIDED by the absolute value of this multiplier value instead of multiplied.
The epsgCode entry represents the code in the EPSG database of the X-Y coordinate system that the dataset is recorded in. The code 32056 might be formatted as 32056:1034 to indicate that the best transform to WGS84 has the code 1034. The separator : is used to separate EPSG codes from transforn codes. The EPSG code is usually picked during indexing.
The regular entry indicates whether the format allows missing traces. If the specified format doesn't allow missing traces, then the value is true. It is false otherwise. Formats such as a SEP always produce regular datasets.
The seismicFormatName entry is a human friendly name for the format underlying the specified dataset. Typical values are:
Segy (for raw .sgy files)
SU (for raw .sufiles)
SEP (for .sep or .hsep files)
SEG2 (for .seg2 files)
SEG-D (for .segd files)
ProMAX (for CIND files)
JavaSeis (for .js directories)
RSVF (for .rsvf files)
SMT (for .smt files)
SVF (for .svf files)
Indexed-ProMAX (for .xpx files)
Indexed-SU (for .xsu files)
Indexed-Segy for (.xgy files)
The ebcdic entry represents the EBCDIC header typically found in Segy files. A + sign replaces space characters. You can omit to include this entry by setting showEBCDIC to false. The EBCDIC header is typically 40 lines x 80 characters.
If the specified file doesn't match a valid seismic dataset, no JSON response will be provided. The HTTP response will only show a "File or Directory Not Found" (error 404) in its headers.
The HTTP header also contains a "dataHash" header. The hash code can be used to track whether the data file underlying the specified dataset has been changed since the last time it was loaded from disk.
The content of this web service is pluggable so that information specific to your data format can be included. To add your own content, extend the com.interactive.intgeoapi.server.seismic.dataformats.AbstractSeismicMetaDataProvider class.