SGisWktParser.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. /* SGisWktParser.java */
  2. /* Generated By:JavaCC: Do not edit this line. SGisWktParser.java */
  3. package com.persagy.gis.parser;
  4. import com.persagy.gis.entity.*;
  5. import com.persagy.gis.enums.SGisGeometryType;
  6. import java.util.*;
  7. /**
  8. * wkt 格�语法解��
  9. *
  10. * @author å¼ ç»´æ–? <zhangweixin@sagacloud.cn>
  11. */
  12. public class SGisWktParser implements SGisWktParserConstants {
  13. public SAbstractGisGeometry parser() throws ParseException {
  14. return passerGeometry();
  15. }
  16. /** 解�几何对象 */
  17. final public SAbstractGisGeometry passerGeometry() throws ParseException {SAbstractGisGeometry geometry;
  18. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  19. case POINT:{
  20. jj_consume_token(POINT);
  21. geometry = passerPointArgs();
  22. break;
  23. }
  24. case MULTIPOINT:{
  25. jj_consume_token(MULTIPOINT);
  26. geometry = passerMultiPointArgs();
  27. break;
  28. }
  29. case LINESTRING:{
  30. jj_consume_token(LINESTRING);
  31. geometry = passerLineStringArgs();
  32. break;
  33. }
  34. case MULTILINESTRING:{
  35. jj_consume_token(MULTILINESTRING);
  36. geometry = passerMultiLineStringArgs();
  37. break;
  38. }
  39. case POLYGON:{
  40. jj_consume_token(POLYGON);
  41. geometry = passerPolygonArgs();
  42. break;
  43. }
  44. case MULTIPOLYGON:{
  45. jj_consume_token(MULTIPOLYGON);
  46. geometry = passerMultiPolygonArgs();
  47. break;
  48. }
  49. default:
  50. jj_la1[0] = jj_gen;
  51. jj_consume_token(-1);
  52. throw new ParseException();
  53. }
  54. {if ("" != null) return geometry;}
  55. throw new Error("Missing return statement in function");
  56. }
  57. /** 解� Point �数 */
  58. final public SGisPoint passerPointArgs() throws ParseException {SGisPoint point;
  59. SGisPosition pos;
  60. point = new SGisPoint();
  61. jj_consume_token(LPAREN);
  62. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  63. case NUM:{
  64. pos = passerPosition();
  65. point.setCoordinates(pos);
  66. break;
  67. }
  68. default:
  69. jj_la1[1] = jj_gen;
  70. ;
  71. }
  72. jj_consume_token(RPAREN);
  73. {if ("" != null) return point;}
  74. throw new Error("Missing return statement in function");
  75. }
  76. /** 解� MultiPoint �数 */
  77. final public SGisMultiPoint passerMultiPointArgs() throws ParseException {SGisMultiPoint multiPoint;
  78. ArrayList<SGisPosition> posArr;
  79. multiPoint = new SGisMultiPoint();
  80. jj_consume_token(LPAREN);
  81. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  82. case NUM:{
  83. posArr = passerPositionArray();
  84. multiPoint.setCoordinates(posArr);
  85. break;
  86. }
  87. default:
  88. jj_la1[2] = jj_gen;
  89. ;
  90. }
  91. jj_consume_token(RPAREN);
  92. {if ("" != null) return multiPoint;}
  93. throw new Error("Missing return statement in function");
  94. }
  95. /** 解� LineString �数 */
  96. final public SGisLineString passerLineStringArgs() throws ParseException {SGisLineString line;
  97. ArrayList<SGisPosition> posArr;
  98. line = new SGisLineString();
  99. jj_consume_token(LPAREN);
  100. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  101. case NUM:{
  102. posArr = passerPositionArray();
  103. line.setCoordinates(posArr);
  104. break;
  105. }
  106. default:
  107. jj_la1[3] = jj_gen;
  108. ;
  109. }
  110. jj_consume_token(RPAREN);
  111. {if ("" != null) return line;}
  112. throw new Error("Missing return statement in function");
  113. }
  114. /** 解� MultiLineString �数 */
  115. final public SGisMultiLineString passerMultiLineStringArgs() throws ParseException {SGisMultiLineString multiLine;
  116. ArrayList<ArrayList<SGisPosition>> posArr2;
  117. multiLine = new SGisMultiLineString();
  118. jj_consume_token(LPAREN);
  119. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  120. case LPAREN:{
  121. posArr2 = passerPositionArray2();
  122. multiLine.setCoordinates(posArr2);
  123. break;
  124. }
  125. default:
  126. jj_la1[4] = jj_gen;
  127. ;
  128. }
  129. jj_consume_token(RPAREN);
  130. {if ("" != null) return multiLine;}
  131. throw new Error("Missing return statement in function");
  132. }
  133. /** 解� Polygon �数 */
  134. final public SGisPolygon passerPolygonArgs() throws ParseException {SGisPolygon polygon;
  135. ArrayList<ArrayList<SGisPosition>> posArr2;
  136. polygon = new SGisPolygon();
  137. jj_consume_token(LPAREN);
  138. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  139. case LPAREN:{
  140. posArr2 = passerPositionArray2();
  141. polygon.setCoordinates(posArr2);
  142. break;
  143. }
  144. default:
  145. jj_la1[5] = jj_gen;
  146. ;
  147. }
  148. jj_consume_token(RPAREN);
  149. {if ("" != null) return polygon;}
  150. throw new Error("Missing return statement in function");
  151. }
  152. /** 解� MultiPolygon �数 */
  153. final public SGisMultiPolygon passerMultiPolygonArgs() throws ParseException {SGisMultiPolygon multiPolygon;
  154. ArrayList<ArrayList<ArrayList<SGisPosition>>> posArr3;
  155. multiPolygon = new SGisMultiPolygon();
  156. jj_consume_token(LPAREN);
  157. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  158. case LPAREN:{
  159. posArr3 = passerPositionArray3();
  160. multiPolygon.setCoordinates(posArr3);
  161. break;
  162. }
  163. default:
  164. jj_la1[6] = jj_gen;
  165. ;
  166. }
  167. jj_consume_token(RPAREN);
  168. {if ("" != null) return multiPolygon;}
  169. throw new Error("Missing return statement in function");
  170. }
  171. /** 解�二维 Position 对象数组 */
  172. final public ArrayList<ArrayList<ArrayList<SGisPosition>>> passerPositionArray3() throws ParseException {ArrayList<ArrayList<SGisPosition>> posArray;
  173. ArrayList<ArrayList<ArrayList<SGisPosition>>> positionList = new ArrayList<ArrayList<ArrayList<SGisPosition>>>();
  174. jj_consume_token(LPAREN);
  175. posArray = passerPositionArray2();
  176. jj_consume_token(RPAREN);
  177. positionList.add(posArray);
  178. label_1:
  179. while (true) {
  180. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  181. case COMMA:{
  182. ;
  183. break;
  184. }
  185. default:
  186. jj_la1[7] = jj_gen;
  187. break label_1;
  188. }
  189. jj_consume_token(COMMA);
  190. jj_consume_token(LPAREN);
  191. posArray = passerPositionArray2();
  192. jj_consume_token(RPAREN);
  193. positionList.add(posArray);
  194. }
  195. {if ("" != null) return positionList;}
  196. throw new Error("Missing return statement in function");
  197. }
  198. /** 解�二维 Position 对象数组 */
  199. final public ArrayList<ArrayList<SGisPosition>> passerPositionArray2() throws ParseException {ArrayList<SGisPosition> posArray;
  200. ArrayList<ArrayList<SGisPosition>> positionList = new ArrayList<ArrayList<SGisPosition>>();
  201. jj_consume_token(LPAREN);
  202. posArray = passerPositionArray();
  203. jj_consume_token(RPAREN);
  204. positionList.add(posArray);
  205. label_2:
  206. while (true) {
  207. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  208. case COMMA:{
  209. ;
  210. break;
  211. }
  212. default:
  213. jj_la1[8] = jj_gen;
  214. break label_2;
  215. }
  216. jj_consume_token(COMMA);
  217. jj_consume_token(LPAREN);
  218. posArray = passerPositionArray();
  219. jj_consume_token(RPAREN);
  220. positionList.add(posArray);
  221. }
  222. {if ("" != null) return positionList;}
  223. throw new Error("Missing return statement in function");
  224. }
  225. /** 解� Position 对象数组 */
  226. final public ArrayList<SGisPosition> passerPositionArray() throws ParseException {SGisPosition pos;
  227. ArrayList<SGisPosition> positionList = new ArrayList<SGisPosition>();
  228. pos = passerPosition();
  229. positionList.add(pos);
  230. label_3:
  231. while (true) {
  232. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  233. case COMMA:{
  234. ;
  235. break;
  236. }
  237. default:
  238. jj_la1[9] = jj_gen;
  239. break label_3;
  240. }
  241. jj_consume_token(COMMA);
  242. pos = passerPosition();
  243. positionList.add(pos);
  244. }
  245. {if ("" != null) return positionList;}
  246. throw new Error("Missing return statement in function");
  247. }
  248. /** 解� Position 对象 */
  249. final public SGisPosition passerPosition() throws ParseException {Double pos;
  250. ArrayList<Double> valList = new ArrayList<Double>();
  251. pos = parserNum();
  252. valList.add(pos);
  253. label_4:
  254. while (true) {
  255. switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
  256. case NUM:{
  257. ;
  258. break;
  259. }
  260. default:
  261. jj_la1[10] = jj_gen;
  262. break label_4;
  263. }
  264. pos = parserNum();
  265. valList.add(pos);
  266. }
  267. if (valList.size() >= 3) {
  268. {if ("" != null) return new SGisPosition(valList.get(0), valList.get(1), valList.get(2));}
  269. }
  270. if (valList.size() >= 2) {
  271. {if ("" != null) return new SGisPosition(valList.get(0), valList.get(1), null);}
  272. }
  273. if (valList.size() >= 1) {
  274. {if ("" != null) return new SGisPosition(valList.get(0), 0.0, null);}
  275. }
  276. {if ("" != null) return new SGisPosition();}
  277. throw new Error("Missing return statement in function");
  278. }
  279. /** 解�� */
  280. final public Double parserNum() throws ParseException {Token t;
  281. t = jj_consume_token(NUM);
  282. {if ("" != null) return Double.parseDouble(t.image);}
  283. throw new Error("Missing return statement in function");
  284. }
  285. /** Generated Token Manager. */
  286. public SGisWktParserTokenManager token_source;
  287. SimpleCharStream jj_input_stream;
  288. /** Current token. */
  289. public Token token;
  290. /** Next token. */
  291. public Token jj_nt;
  292. private int jj_ntk;
  293. private int jj_gen;
  294. final private int[] jj_la1 = new int[11];
  295. static private int[] jj_la1_0;
  296. static {
  297. jj_la1_init_0();
  298. }
  299. private static void jj_la1_init_0() {
  300. jj_la1_0 = new int[] {0x7e0,0x800,0x800,0x800,0x4,0x4,0x4,0x10,0x10,0x10,0x800,};
  301. }
  302. /** Constructor with InputStream. */
  303. public SGisWktParser(java.io.InputStream stream) {
  304. this(stream, null);
  305. }
  306. /** Constructor with InputStream and supplied encoding */
  307. public SGisWktParser(java.io.InputStream stream, String encoding) {
  308. try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
  309. token_source = new SGisWktParserTokenManager(jj_input_stream);
  310. token = new Token();
  311. jj_ntk = -1;
  312. jj_gen = 0;
  313. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  314. }
  315. /** Reinitialise. */
  316. public void ReInit(java.io.InputStream stream) {
  317. ReInit(stream, null);
  318. }
  319. /** Reinitialise. */
  320. public void ReInit(java.io.InputStream stream, String encoding) {
  321. try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
  322. token_source.ReInit(jj_input_stream);
  323. token = new Token();
  324. jj_ntk = -1;
  325. jj_gen = 0;
  326. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  327. }
  328. /** Constructor. */
  329. public SGisWktParser(java.io.Reader stream) {
  330. jj_input_stream = new SimpleCharStream(stream, 1, 1);
  331. token_source = new SGisWktParserTokenManager(jj_input_stream);
  332. token = new Token();
  333. jj_ntk = -1;
  334. jj_gen = 0;
  335. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  336. }
  337. /** Reinitialise. */
  338. public void ReInit(java.io.Reader stream) {
  339. if (jj_input_stream == null) {
  340. jj_input_stream = new SimpleCharStream(stream, 1, 1);
  341. } else {
  342. jj_input_stream.ReInit(stream, 1, 1);
  343. }
  344. if (token_source == null) {
  345. token_source = new SGisWktParserTokenManager(jj_input_stream);
  346. }
  347. token_source.ReInit(jj_input_stream);
  348. token = new Token();
  349. jj_ntk = -1;
  350. jj_gen = 0;
  351. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  352. }
  353. /** Constructor with generated Token Manager. */
  354. public SGisWktParser(SGisWktParserTokenManager tm) {
  355. token_source = tm;
  356. token = new Token();
  357. jj_ntk = -1;
  358. jj_gen = 0;
  359. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  360. }
  361. /** Reinitialise. */
  362. public void ReInit(SGisWktParserTokenManager tm) {
  363. token_source = tm;
  364. token = new Token();
  365. jj_ntk = -1;
  366. jj_gen = 0;
  367. for (int i = 0; i < 11; i++) jj_la1[i] = -1;
  368. }
  369. private Token jj_consume_token(int kind) throws ParseException {
  370. Token oldToken;
  371. if ((oldToken = token).next != null) token = token.next;
  372. else token = token.next = token_source.getNextToken();
  373. jj_ntk = -1;
  374. if (token.kind == kind) {
  375. jj_gen++;
  376. return token;
  377. }
  378. token = oldToken;
  379. jj_kind = kind;
  380. throw generateParseException();
  381. }
  382. /** Get the next Token. */
  383. final public Token getNextToken() {
  384. if (token.next != null) token = token.next;
  385. else token = token.next = token_source.getNextToken();
  386. jj_ntk = -1;
  387. jj_gen++;
  388. return token;
  389. }
  390. /** Get the specific Token. */
  391. final public Token getToken(int index) {
  392. Token t = token;
  393. for (int i = 0; i < index; i++) {
  394. if (t.next != null) t = t.next;
  395. else t = t.next = token_source.getNextToken();
  396. }
  397. return t;
  398. }
  399. private int jj_ntk_f() {
  400. if ((jj_nt=token.next) == null)
  401. return (jj_ntk = (token.next=token_source.getNextToken()).kind);
  402. else
  403. return (jj_ntk = jj_nt.kind);
  404. }
  405. private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
  406. private int[] jj_expentry;
  407. private int jj_kind = -1;
  408. /** Generate ParseException. */
  409. public ParseException generateParseException() {
  410. jj_expentries.clear();
  411. boolean[] la1tokens = new boolean[13];
  412. if (jj_kind >= 0) {
  413. la1tokens[jj_kind] = true;
  414. jj_kind = -1;
  415. }
  416. for (int i = 0; i < 11; i++) {
  417. if (jj_la1[i] == jj_gen) {
  418. for (int j = 0; j < 32; j++) {
  419. if ((jj_la1_0[i] & (1<<j)) != 0) {
  420. la1tokens[j] = true;
  421. }
  422. }
  423. }
  424. }
  425. for (int i = 0; i < 13; i++) {
  426. if (la1tokens[i]) {
  427. jj_expentry = new int[1];
  428. jj_expentry[0] = i;
  429. jj_expentries.add(jj_expentry);
  430. }
  431. }
  432. int[][] exptokseq = new int[jj_expentries.size()][];
  433. for (int i = 0; i < jj_expentries.size(); i++) {
  434. exptokseq[i] = jj_expentries.get(i);
  435. }
  436. return new ParseException(token, exptokseq, tokenImage);
  437. }
  438. /** Enable tracing. */
  439. final public void enable_tracing() {
  440. }
  441. /** Disable tracing. */
  442. final public void disable_tracing() {
  443. }
  444. }