21 package org.matsim.core.network.algorithms;
23 import java.io.FileInputStream;
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.Logger;
27 import org.geotools.data.shapefile.dbf.DbaseFileReader;
71 log.info(
"init " + this.getClass().getName() +
" module...");
125 log.info(
"running " + this.getClass().getName() +
" module...");
126 try (FileInputStream fis =
new FileInputStream(this.srDbfFileName)) {
129 int srIdNameIndex = -1;
130 int srSpeedNameIndex = -1;
131 int srValDirNameIndex = -1;
132 int srVerifiedNameIndex = -1;
133 for (
int i=0; i<r.getHeader().getNumFields(); i++) {
134 if (r.getHeader().getFieldName(i).equals(SR_ID_NAME)) { srIdNameIndex = i; }
135 if (r.getHeader().getFieldName(i).equals(SR_SPEED_NAME)) { srSpeedNameIndex = i; }
136 if (r.getHeader().getFieldName(i).equals(SR_VALDIR_NAME)) { srValDirNameIndex = i; }
137 if (r.getHeader().getFieldName(i).equals(SR_VERIFIED_NAME)) { srVerifiedNameIndex = i; }
139 if (srIdNameIndex < 0) {
throw new NoSuchFieldException(
"Field name '"+SR_ID_NAME+
"' not found."); }
140 if (srSpeedNameIndex < 0) {
throw new NoSuchFieldException(
"Field name '"+SR_SPEED_NAME+
"' not found."); }
141 if (srValDirNameIndex < 0) {
throw new NoSuchFieldException(
"Field name '"+SR_VALDIR_NAME+
"' not found."); }
142 if (srVerifiedNameIndex < 0) {
throw new NoSuchFieldException(
"Field name '"+SR_VERIFIED_NAME+
"' not found."); }
143 log.trace(
" FieldName-->Index:");
144 log.trace(
" "+SR_ID_NAME+
"-->"+srIdNameIndex);
145 log.trace(
" "+SR_SPEED_NAME+
"-->"+srSpeedNameIndex);
146 log.trace(
" "+SR_VALDIR_NAME+
"-->"+srValDirNameIndex);
147 log.trace(
" "+SR_VERIFIED_NAME+
"-->"+srVerifiedNameIndex);
151 while (r.hasNext()) {
152 Object[] entries = r.readEntry();
153 int verified = Integer.parseInt(entries[srVerifiedNameIndex].toString());
156 int valdir = Integer.parseInt(entries[srValDirNameIndex].toString());
157 String
id = entries[srIdNameIndex].toString();
162 if ((ftLink == null) || (tfLink == null)) { log.trace(
" linkid="+
id+
", valdir="+valdir+
": at least one link not found. Ignoring and proceeding anyway..."); srIgnoreCnt++; }
164 double speed = Double.parseDouble(entries[srSpeedNameIndex].toString())/3.6;
170 else if (valdir == 2) {
173 if (ftLink == null) { log.trace(
" linkid="+
id+
", valdir="+valdir+
": link not found. Ignoring and proceeding anyway..."); srIgnoreCnt++; }
175 double speed = Double.parseDouble(entries[srSpeedNameIndex].toString())/3.6;
180 else if (valdir == 3) {
183 if (tfLink == null) { log.trace(
" linkid="+
id+
", valdir="+valdir+
": link not found. Ignoring and proceeding anyway..."); srIgnoreCnt++; }
185 double speed = Double.parseDouble(entries[srSpeedNameIndex].toString())/3.6;
190 else {
throw new IllegalArgumentException(
"linkid="+
id+
": valdir="+valdir+
" not known."); }
193 log.info(
" "+srCnt+
" links with restricted speed assigned.");
194 log.info(
" "+srIgnoreCnt+
" speed restrictions ignored (while verified = 1).");
210 System.out.println(prefix+
"configuration of "+this.getClass().getName()+
":");
211 System.out.println(prefix+
" speed restrictions:");
212 System.out.println(prefix+
" srDbfFileName: "+this.srDbfFileName);
213 System.out.println(prefix+
" SR_ID_NAME: "+SR_ID_NAME);
214 System.out.println(prefix+
" SR_SPEED_NAME: "+SR_SPEED_NAME);
215 System.out.println(prefix+
" SR_VALDIR_NAME: "+SR_VALDIR_NAME);
216 System.out.println(prefix+
" SR_VERIFIED_NAME: "+SR_VERIFIED_NAME);
217 System.out.println(prefix+
"done.");
NetworkTeleatlasAddSpeedRestrictions(final String srDbfFileName)
void run(final Network network)
void setFreespeed(double freespeed)
static final String SR_SPEED_NAME
static final String SR_VERIFIED_NAME
static final Charset CHARSET_WINDOWS_ISO88591
final String srDbfFileName
void run2(final Network network)
static< T > Id< T > create(final long key, final Class< T > type)
static final String SR_ID_NAME
final void printInfo(final String prefix)
static final String SR_VALDIR_NAME