Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Eric Duminil
RegionChooser
Commits
eaacae87
Commit
eaacae87
authored
Apr 21, 2017
by
duminil
Browse files
Trying to define building iterator.
parent
227b6817
Changes
1
Show whitespace changes
Inline
Side-by-side
src/eu/simstadt/lowlevelgmlparser/CityGmlIterator.java
0 → 100644
View file @
eaacae87
package
eu.simstadt.lowlevelgmlparser
;
import
java.io.IOException
;
import
java.nio.file.Path
;
import
java.util.Iterator
;
import
java.util.logging.Logger
;
import
com.ximpleware.AutoPilot
;
import
com.ximpleware.NavException
;
import
com.ximpleware.VTDGen
;
import
com.ximpleware.VTDNav
;
import
com.ximpleware.XPathEvalException
;
import
com.ximpleware.XPathParseException
;
public
class
CityGmlIterator
implements
Iterable
<
String
>
{
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
CityGmlIterator
.
class
.
getName
());
private
AutoPilot
buildingsFinder
;
private
VTDNav
navigator
;
private
long
offsetAndLength
;
private
int
buildingsCount
=
0
;
private
int
buildingOffset
=
0
;
private
int
buildingLength
=
0
;
public
CityGmlIterator
(
Path
citygmlPath
)
throws
XPathParseException
,
NavException
,
NumberFormatException
,
XPathEvalException
,
IOException
{
VTDGen
parser
=
new
VTDGen
();
parser
.
parseFile
(
citygmlPath
.
toString
(),
false
);
this
.
navigator
=
parser
.
getNav
();
this
.
buildingsFinder
=
new
AutoPilot
(
navigator
);
buildingsFinder
.
selectXPath
(
"//cityObjectMember"
);
}
@Override
public
Iterator
<
String
>
iterator
()
{
Iterator
<
String
>
it
=
new
Iterator
<
String
>()
{
@Override
public
boolean
hasNext
()
{
try
{
return
buildingsFinder
.
evalXPath
()
!=
-
1
;
}
catch
(
XPathEvalException
|
NavException
ex
)
{}
return
false
;
}
@Override
public
String
next
()
{
try
{
buildingsCount
+=
1
;
if
(
buildingsCount
%
1000
==
0
)
{
LOGGER
.
info
(
"1000 buildings parsed"
);
}
offsetAndLength
=
navigator
.
getElementFragment
();
buildingOffset
=
(
int
)
offsetAndLength
;
buildingLength
=
(
int
)
(
offsetAndLength
>>
32
);
return
navigator
.
toRawString
(
buildingOffset
,
buildingLength
);
}
catch
(
NavException
ex
)
{}
return
null
;
}
@Override
public
void
remove
()
{
throw
new
UnsupportedOperationException
();
}
};
return
it
;
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment