最最最最新版

package routingtile;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;

public class TestMain {
	private static RoutingTileHeader header = new RoutingTileHeader();		
    private static SimpleIntersectionList simpleIntersection = new SimpleIntersectionList();
	private static LinkList link = new LinkList();
	private static RoutingIdRangeList routingIdRange = new RoutingIdRangeList();
	protected static final int BITS_PER_BYTE = 0x8;
	private static Readblom rb;
	private final static StringBuilder strB = HexFinder.readData();
	//创建一个指针
	private static int pointer;
	public static void main(String[] agrs)throws Exception{
			//header赋值
			routingTileHeader();
			//调用simpleIntersection方法
			simpleIntersection();
			//调用link方法
			link();
			//调用routingIdRange方法
			routingIdRange();
			//调用linkId通过routingIdRange关联link方法
			linkIdAttr();
	}
	
	//linkId通过routingIdRange关联link方法
	/**
	 * linkIdAttr()
	 */
	public static void linkIdAttr() {
		ArrayList<SimpleIntersection> simpleIntersections = simpleIntersection.getSimpleIntersection();
		ArrayList<Link> links = link.getLink1();
		ArrayList<NumRoutingListElements> featureRanges = routingIdRange.getFeatureRange();
		int linkId = 0;
		int startFeatureId,endFeatureId,dPosition = 0;
		
	    //取第46条
		System.out.println("simpleIntersection[46]:");
		System.out.println("dx:" + simpleIntersections.get(46).getPosition().getDx());
		System.out.println("dy:" + simpleIntersections.get(46).getPosition().getDy());
		System.out.println("numLinks:" + simpleIntersections.get(46).getNumLinks());
		for (int r = 0;r < simpleIntersections.get(46).getConnectedLinks().size();r++ ){
			
				System.out.println("connectedLinks[" + r + "]:");
				System.out.println("isExternalLinkReference:" + simpleIntersections.get(46).getConnectedLinks().get(r).getIsExternalLinkReference());
				if (simpleIntersections.get(46).getConnectedLinks().get(r).getIsExternalLinkReference()) {
					linkId = simpleIntersections.get(46).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getLinkId();
					System.out.println("extTileIdx:" + simpleIntersections.get(46).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getExtTileIdx());
					System.out.println("positiveLinkDirection:" + simpleIntersections.get(46).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getPositiveLinkDirection());
					System.out.println("LinkId:" + linkId + "\r\n");
					
				}else {
					linkId = simpleIntersections.get(46).getConnectedLinks().get(r).getLinkReferenceChoice().getInternalLinkReference().getLinkId();
					System.out.println("positiveLinkDirection:" + simpleIntersections.get(46).getConnectedLinks().get(r).getLinkReferenceChoice().getInternalLinkReference().getPositiveLinkDirection());
					System.out.println("LinkId:" + linkId+ "\r\n");
				}
		
		
/*		for (int n = 0; n < simpleIntersections.size(); n++) {
			System.out.println("simpleIntersection[" + n + "]:");
			System.out.println("dx:" + simpleIntersections.get(n).getPosition().getDx());
			System.out.println("dy:" + simpleIntersections.get(n).getPosition().getDy());
			System.out.println("numLinks:" + simpleIntersections.get(n).getNumLinks());
			for (int r = 0;r < simpleIntersections.get(n).getConnectedLinks().size();r++ ){
				
					System.out.println("connectedLinks[" + r + "]:");
					System.out.println("isExternalLinkReference:" + simpleIntersections.get(n).getConnectedLinks().get(r).getIsExternalLinkReference());
					if (simpleIntersections.get(n).getConnectedLinks().get(r).getIsExternalLinkReference()) {
						linkId = simpleIntersections.get(n).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getLinkId();
						System.out.println("extTileIdx:" + simpleIntersections.get(n).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getExtTileIdx());
						System.out.println("positiveLinkDirection:" + simpleIntersections.get(n).getConnectedLinks().get(r).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getPositiveLinkDirection());
						System.out.println("LinkId:" + linkId + "\r\n");
						
					}else {
						linkId = simpleIntersections.get(n).getConnectedLinks().get(r).getLinkReferenceChoice().getInternalLinkReference().getLinkId();
						System.out.println("positiveLinkDirection:" + simpleIntersections.get(n).getConnectedLinks().get(r).getLinkReferenceChoice().getInternalLinkReference().getPositiveLinkDirection());
						System.out.println("LinkId:" + linkId+ "\r\n");
						
					}*/
					int xPosition = 0;
					for (int t = 0; t < featureRanges.size(); t++) {
						startFeatureId = featureRanges.get(t).getStartFeatureId();
						endFeatureId = featureRanges.get(t).getEndFeatureId();
						
					if (endFeatureId < linkId) {
						dPosition = endFeatureId - startFeatureId + 1;
						xPosition = dPosition + xPosition;
					}else if ((startFeatureId <= linkId) || (linkId <= endFeatureId)) {
						dPosition = linkId - startFeatureId + 1;
						xPosition = dPosition + xPosition;
						break;
					}
					}
				xPosition  = xPosition - 1;
					if (xPosition < links.size()) {
						//System.out.println("linkId:"+linkId+"对应的位置:"+(xPosition-1));
						System.out.println("link:["+(xPosition)+"]");
						 System.out.println("length:" + links.get(xPosition).getLength().getLength1());
						if (links.get(xPosition).getAttrSource().getAttrsource1()) {
							
							System.out.println("attrSource: EXPLICIT (1)");
							System.out.println("priorityRoadClass:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getPriorityRoadClass().getPriorityRoadClass1());
							
							switch (links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1()) {
							case 0:
								System.out.println("linkType: " + "NO_SPECIAL (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 1:
								System.out.println("linkType: " + "RAMP (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 2:
								System.out.println("linkType: " + "ROUNDABOUT (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 3:
								System.out.println("linkType: " + "PARALLEL (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 4:
								System.out.println("linkType: " + "SERVICE_ROAD (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 5:
								System.out.println("linkType: " + "MAIN_ROAD (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 6:
								System.out.println("linkType: " + "SQUARE (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 8:
								System.out.println("linkType: " + "PEDESTRIAN_ZONE (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 9:
								System.out.println("linkType: " + "PEDESTRIAN (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 10:
								System.out.println("linkType: " + "ROUNDABOUT_INTERIOR (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 11:
								System.out.println("linkType: " + "SLIP_ROAD (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 12:
								System.out.println("linkType: " + "SPECIAL_TRAFFIC_FIGURE (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							case 13:
								System.out.println("linkType: " + "BOUNDARY (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
								break;
							default:
								break;
							}
							switch (links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection()) {
							case 0:
								System.out.println("travelDirection: " + "IN_NO_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
								break;
							case 1:
								System.out.println("travelDirection: " + "IN_POSITIVE_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
								break;
							case 2:
								System.out.println("travelDirection: " + "IN_NEGATIVE_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
								break;
							case 3:
								System.out.println("travelDirection: " + "IN_BOTH_DIRECTIONS (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
								break;
							default:
								break;
							}
							System.out.println("ferry:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getFerry());
							System.out.println("tunnel:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getTunnel());
							System.out.println("bridge:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getBridge());
							switch (links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll()) {
							case 0:
								System.out.println("toll: " + "IN_NO_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
								break;
							case 1:
								System.out.println("toll: " + "IN_POSITIVE_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
								break;
							case 2:
								System.out.println("toll: " + "IN_NEGATIVE_DIRECTION (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
								break;
							case 3:
								System.out.println("toll: " + "IN_BOTH_DIRECTIONS (" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
								break;
							default:
								break;
							}
							System.out.println("controlledAccess:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getControlledAccess());
							System.out.println("serviceArea:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getSharedAttr().getServiceArea());
							
							System.out.println("functionalRoadClass:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getRoutingAttr().getFunctionalRoadClass().getFunctionalRoadClass());
							System.out.println("urban:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getRoutingAttr().getUrban());
							System.out.println("complexIntersection:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getRoutingAttr().getComplexIntersection());
							System.out.println("pluralJunction:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getRoutingAttr().getPluralJunction());
							System.out.println("motorway:" + links.get(xPosition).getAttrInfo().getFixedAttributes().getRoutingAttr().getMotorway());
						}else{
							System.out.println("attrSource: INDEXED (0)");
							System.out.println("fixedRoadAttributeSetListIndex:" + links.get(xPosition).getAttrInfo().getFixedRoadAttributeSetListIndex().getFixedRoadAttributeSetListIndex());
						}
						System.out.println("averageSpeed:" + links.get(xPosition).getAverageSpeed().getAverageSpeed());
						System.out.println("startAngle:" + links.get(xPosition).getStartAngle().getStartAngle());
						System.out.println("endAngle:" + links.get(xPosition).getEndAngle().getEndAngle() + "\r\n");
					}else {
						System.out.println("");
					}
				     }
				}
		
	
	
	/**
	 * routingIdRange方法,返回RoutingIdRangeList
	 * @throws IOException
	 */
	public static RoutingIdRangeList routingIdRange() throws IOException{
		//创建一个mp用于接收返回值
		HashMap<String, Integer> mp;
	    //初始化LinkIdRangeListOffset指针位置
		HexFinder.initialize(header.getLinkIdRangeListOffset());
		//numFeatureRanges
		RoutingIdRangeList rIRL = new RoutingIdRangeList();
		NumRoutingListElements nRLE = new NumRoutingListElements();
		mp = HexFinder.dicedall(16,pointer, strB);
		pointer = mp.get("pointer");
		int numFeatureRanges = mp.get("value");
		rIRL.setNumFeatureRanges(numFeatureRanges);
//		System.out.println("\r\n" + "numFeatureRanges:" + rIRL.getNumFeatureRanges());
		
		ArrayList<NumRoutingListElements> featureranges = new ArrayList<NumRoutingListElements>();
		for (int p = 0; p < rIRL.getNumFeatureRanges(); p++) {
			NumRoutingListElements NRLE = new NumRoutingListElements();
			mp = HexFinder.dicedall(16,pointer, strB);
			pointer = mp.get("pointer");
			int startFeatureId = mp.get("value");
			NRLE.setStartFeatureId(startFeatureId);
			
			mp = HexFinder.dicedall(16,pointer, strB);
			pointer = mp.get("pointer");
			int endFeatureId = mp.get("value");
			NRLE.setEndFeatureId(endFeatureId);
			
			featureranges.add(NRLE);
		}
		
		routingIdRange.setFeatureRange(featureranges);
		//输出所有值
/*		System.out.println("RoutingIdRangeList:");
		for (int q = 0;q < featureranges.size();q++) {
			System.out.println("\n"+"featureRange[" + q + "]:");
		     System.out.println("startFeatureId:" + featureranges.get(q).getStartFeatureId());
		     System.out.println("EndFeatureId:" + featureranges.get(q).getEndFeatureId());
		    }*/
		return routingIdRange;
	}
	/**
	 * link方法,返回LinkList
	 * @throws IOException
	 */
	public static LinkList link() throws IOException{
		//创建一个mp用于接收返回值
		HashMap<String, Integer> mp;
	    //初始化LinksOffset指针位置
		HexFinder.initialize(header.getLinksOffset());
		//numLinks
		LinkList linkList = new LinkList();
		mp = HexFinder.dicedall(16,pointer, strB);
		pointer = mp.get("pointer");
		int numnumLinks = mp.get("value");
		linkList.setNumnumLinks(numnumLinks);
//		System.out.println("\n" + "numLinks:" + linkList.getNumnumLinks());
		
		ArrayList<Link> links = new ArrayList<Link>();
		for (int i = 0; i < linkList.getNumnumLinks(); i++) {
			//linkList.getNumnumLinks()
			Link lk = new Link();
			FeatureLength FL = new FeatureLength();
			StringBuilder stB = new StringBuilder();
			
			for (int j = 0; j < 32/BITS_PER_BYTE; j++) {
				mp = HexFinder.dicedall(1,pointer, strB);
				pointer = mp.get("pointer");
				int first = mp.get("value");
				for (int m = 0; m < BITS_PER_BYTE - 1; m++) {
					mp = HexFinder.dicedall(1,pointer, strB);
					pointer = mp.get("pointer");
					int seven = mp.get("value");
					if (first == 1) {
						stB = stB.append(seven);
					}else {
							stB = stB.append(seven);
					}
				}
				if (first != 1) {
					break;
				}
			}
			Long length = Long .valueOf(stB.toString(),2);
			FL.setLength1(length);
			lk.setLength(FL);
			
			AttributeSource aBS = new AttributeSource();              //选择   0   1
			mp = HexFinder.dicedall(1,pointer, strB);
			pointer = mp.get("pointer");
			int attrSource = mp.get("value");
			
			RoutingAttributeInfo rABI = new RoutingAttributeInfo();   //选择
			
			//attrsource == 0       INDEXED = 0         输出INDEXED(0)  
			if (attrSource == 0) {
			aBS.setAttrsource1(false);
			
            FixedRoadAttributeSetListIndex fRASLI = new FixedRoadAttributeSetListIndex();
            
            mp = HexFinder.dicedall(8,pointer, strB);
			pointer = mp.get("pointer");
			int fixedroadattributesetlistindex = mp.get("value");
			rABI.setFixedRoadAttributeSetListIndex(fRASLI);
			fRASLI.setFixedRoadAttributeSetListIndex(fixedroadattributesetlistindex);
			lk.setAttrSource(aBS);
			lk.setAttrInfo(rABI);
			
			}else {
				aBS.setAttrsource1(true);
				lk.setAttrSource(aBS);
				lk.setAttrInfo(rABI);
				
				FixedRoadAttributeSet fRABS = new FixedRoadAttributeSet();
				
				SharedRoadAttributes sRA = new SharedRoadAttributes();
				RoutingRoadAttributes rRA = new RoutingRoadAttributes();
				
				PriorityRoadClass pRC = new PriorityRoadClass();
				LinkType lT = new LinkType();
				Direction d = new Direction();
				
				FunctionalRoadClass fRC  = new FunctionalRoadClass();
				
				//SharedRoadAttributes
				mp = HexFinder.dicedall(4,pointer, strB);
				pointer = mp.get("pointer");
				int priorityroadclass = mp.get("value");
				rABI.setFixedAttributes(fRABS);
				sRA.setPriorityRoadClass(pRC);
				pRC.setPriorityRoadClass1(priorityroadclass);
				
				mp = HexFinder.dicedall(4,pointer, strB);     //13个选择
				pointer = mp.get("pointer");
				int linkType = mp.get("value");
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setLinkType(lT);
				lT.setLinkType1(linkType);  //13个选择输出
				
				mp = HexFinder.dicedall(2,pointer, strB);    //4个选择
				pointer = mp.get("pointer");
				int travelDirection = mp.get("value");
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setTravelDirection(d);
				d.setTravelDirection(travelDirection);
				
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean ferry;
				if(mp.get("value") == 1){
					ferry = true;
				}else{
					ferry = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setFerry(ferry);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean tunnel;
				if(mp.get("value") == 1){
					tunnel = true;
				}else{
					tunnel = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setTunnel(tunnel);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean bridge;
				if(mp.get("value") == 1){
					bridge = true;
				}else{
					bridge = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setBridge(bridge);
				
				mp = HexFinder.dicedall(2,pointer, strB);    //4个选择
				pointer = mp.get("pointer");
				int toll = mp.get("value");
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setToll(d);
				d.setToll(toll);
				
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean controlledAccess;
				if(mp.get("value") == 1){
					controlledAccess = true;
				}else{
					controlledAccess = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setControlledAccess(controlledAccess);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean serviceArea;
				if(mp.get("value") == 1){
					serviceArea = true;
				}else{
					serviceArea = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setSharedAttr(sRA);
				sRA.setServiceArea(serviceArea);
				
				//RoutingRoadAttributes
				mp = HexFinder.dicedall(3,pointer, strB);    
				pointer = mp.get("pointer");
				int functionalRoadClass = mp.get("value");
				rABI.setFixedAttributes(fRABS);
				fRABS.setRoutingAttr(rRA);
				rRA.setFunctionalRoadClass(fRC);
				fRC.setFunctionalRoadClass(functionalRoadClass);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean urban;
				if(mp.get("value") == 1){
					urban = true;
				}else{
					urban = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setRoutingAttr(rRA);
				rRA.setUrban(urban);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean complexIntersection;
				if(mp.get("value") == 1){
					complexIntersection = true;
				}else{
					complexIntersection = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setRoutingAttr(rRA);
				rRA.setComplexIntersection(complexIntersection);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean pluralJunction;
				if(mp.get("value") == 1){
					pluralJunction = true;
				}else{
					pluralJunction = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setRoutingAttr(rRA);
				rRA.setPluralJunction(pluralJunction);
				
				mp = HexFinder.dicedall(1,pointer, strB);    
				pointer = mp.get("pointer");
				boolean motorway;
				if(mp.get("value") == 1){
					motorway = true;
				}else{
					motorway = false;
				}
				rABI.setFixedAttributes(fRABS);
				fRABS.setRoutingAttr(rRA);
				rRA.setMotorway(motorway);
				
			}
			
			AverageSpeed aS = new AverageSpeed();
			LinkSector lS = new LinkSector();
			
			mp = HexFinder.dicedall(8,pointer, strB);
			pointer = mp.get("pointer");
			int averageSpeed = mp.get("value");
			lk.setAverageSpeed(aS);
			aS.setAverageSpeed(averageSpeed);
			
			mp = HexFinder.dicedall(6,pointer, strB);
			pointer = mp.get("pointer");
			int startangle = mp.get("value");
			lk.setStartAngle(lS);
			lS.setStartAngle(startangle);    
			
			mp = HexFinder.dicedall(6,pointer, strB);
			pointer = mp.get("pointer");
			int endangle = mp.get("value");
			lk.setEndAngle(lS);
			lS.setEndAngle(endangle);     
			
			links.add(lk);
		}
		link.setLink1(links);
		//输出所有值
/*		System.out.println("LinkList:");
	for (int k = 0; k < links.size();k++) {
		System.out.println("\n"+"link[" + k + "]:");
		     System.out.println("length:" + links.get(k).getLength().getLength1());
		      if (links.get(k).getAttrSource().getAttrsource1()) {
		    	  System.out.println("attrSource: EXPLICIT (1)");
		    	  System.out.println("priorityRoadClass:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getPriorityRoadClass().getPriorityRoadClass1());
		    	  
		    	  switch (links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1()) {
		    	  case 0:
		    		  System.out.println("linkType: " + "NO_SPECIAL (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 1:
		    		  System.out.println("linkType: " + "RAMP (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 2:
		    		  System.out.println("linkType: " + "ROUNDABOUT (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 3:
		    		  System.out.println("linkType: " + "PARALLEL (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 4:
		    		  System.out.println("linkType: " + "SERVICE_ROAD (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 5:
		    		  System.out.println("linkType: " + "MAIN_ROAD (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 6:
		    		  System.out.println("linkType: " + "SQUARE (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 8:
		    		  System.out.println("linkType: " + "PEDESTRIAN_ZONE (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 9:
		    		  System.out.println("linkType: " + "PEDESTRIAN (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 10:
		    		  System.out.println("linkType: " + "ROUNDABOUT_INTERIOR (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 11:
		    		  System.out.println("linkType: " + "SLIP_ROAD (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 12:
		    		  System.out.println("linkType: " + "SPECIAL_TRAFFIC_FIGURE (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  case 13:
		    		  System.out.println("linkType: " + "BOUNDARY (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getLinkType().getLinkType1() + ")");
		    		  break;
		    	  default:
		    		  break;
		    	  }
		    	  switch (links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection()) {
		    	  case 0:
		    		  System.out.println("travelDirection: " + "IN_NO_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
		    		  break;
		    	  case 1:
		    		  System.out.println("travelDirection: " + "IN_POSITIVE_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
		    		  break;
		    	  case 2:
		    		  System.out.println("travelDirection: " + "IN_NEGATIVE_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
		    		  break;
		    	  case 3:
		    		  System.out.println("travelDirection: " + "IN_BOTH_DIRECTIONS (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTravelDirection().getTravelDirection() + ")");
		    		  break;
		    	  default:
		    		  break;
		    	  }
		    	  System.out.println("ferry:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getFerry());
		    	  System.out.println("tunnel:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getTunnel());
		    	  System.out.println("bridge:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getBridge());
		    	  switch (links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll()) {
		    	  case 0:
		    		  System.out.println("toll: " + "IN_NO_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
		    		  break;
		    	  case 1:
		    		  System.out.println("toll: " + "IN_POSITIVE_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
		    		  break;
		    	  case 2:
		    		  System.out.println("toll: " + "IN_NEGATIVE_DIRECTION (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
		    		  break;
		    	  case 3:
		    		  System.out.println("toll: " + "IN_BOTH_DIRECTIONS (" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getToll().getToll() + ")");
		    		  break;
		    	  default:
		    		  break;
		    	  }
		    	  System.out.println("controlledAccess:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getControlledAccess());
		    	  System.out.println("serviceArea:" + links.get(k).getAttrInfo().getFixedAttributes().getSharedAttr().getServiceArea());
		    	  
		    	  System.out.println("functionalRoadClass:" + links.get(k).getAttrInfo().getFixedAttributes().getRoutingAttr().getFunctionalRoadClass().getFunctionalRoadClass());
		    	  System.out.println("urban:" + links.get(k).getAttrInfo().getFixedAttributes().getRoutingAttr().getUrban());
		    	  System.out.println("complexIntersection:" + links.get(k).getAttrInfo().getFixedAttributes().getRoutingAttr().getComplexIntersection());
		    	  System.out.println("pluralJunction:" + links.get(k).getAttrInfo().getFixedAttributes().getRoutingAttr().getPluralJunction());
		    	  System.out.println("motorway:" + links.get(k).getAttrInfo().getFixedAttributes().getRoutingAttr().getMotorway());
		      }else{
		    	  System.out.println("attrSource: INDEXED (0)");
			       System.out.println("fixedRoadAttributeSetListIndex:" + links.get(k).getAttrInfo().getFixedRoadAttributeSetListIndex().getFixedRoadAttributeSetListIndex());
		         }
		      System.out.println("averageSpeed:" + links.get(k).getAverageSpeed().getAverageSpeed());
		      System.out.println("startAngle:" + links.get(k).getStartAngle().getStartAngle());
		      System.out.println("endAngle:" + links.get(k).getEndAngle().getEndAngle() + "\r\n");
		     }*/
return link;
}
/**
* simpleIntersection方法,返回SimpleIntersectionList
* @throws IOException
*/
public static SimpleIntersectionList simpleIntersection() throws IOException{
	//创建一个mp用于接收返回值
	HashMap<String, Integer> mp;
	//初始化SimpleIntersectionOffset指针位置
	HexFinder.initialize(header.getSimpleIntersectionOffset());
	//numIntersections
	SimpleIntersectionList numIntersectionList = new SimpleIntersectionList();
	mp = HexFinder.dicedall(16,pointer, strB);
	pointer = mp.get("pointer");
	int numIntersection = mp.get("value");
	numIntersectionList.setNumIntersections(numIntersection);
//	System.out.println("numIntersections:" + numIntersectionList.getNumIntersections());
	
	ArrayList<SimpleIntersection> simpleIntersections =new ArrayList<SimpleIntersection>();
	for(int h = 0; h<simpleIntersection.getNumIntersections(); h++) 
	{   
		// 放到CoordXYOffset对象中
		CoordXYOffset coordXYOffset = new CoordXYOffset();
		SimpleIntersection sIntersection = new SimpleIntersection();
		
		mp = HexFinder.dicedall(14,pointer, strB);
		pointer = mp.get("pointer");
		int dx = mp.get("value");
		if (14 < 64 && (dx & (1L << (14-1))) != 0) {
			dx |= (-1L << 14);
		}
		
		mp = HexFinder.dicedall(14,pointer, strB);
		pointer = mp.get("pointer");
		int dy = mp.get("value");
		if (14 < 64 && (dy & (1L << (14-1))) != 0) {
			dy |= (-1L << 14);
		}
		
		coordXYOffset.setDx(dx);
		coordXYOffset.setDy(dy);

		mp = HexFinder.dicedall(8,pointer, strB);
		pointer = mp.get("pointer");
		int numLinks = mp.get("value");

		sIntersection.setNumLinks(numLinks);
		sIntersection.setPosition(coordXYOffset);

		ArrayList<IntOrExtDirectedLinkReference> connectedLinks = new ArrayList<IntOrExtDirectedLinkReference>();
		for(int g = 0; g<sIntersection.getNumLinks(); g++) 
		{   
			DirectedLinkReference dLR= new DirectedLinkReference();
			ExternalDirectedLinkReference eDLR = new ExternalDirectedLinkReference();
			IntOrExtDirectedLinkReference iEDLR = new IntOrExtDirectedLinkReference();
			LinkReferenceChoice choice = new LinkReferenceChoice();

			mp = HexFinder.dicedall(1,pointer, strB);
			pointer = mp.get("pointer");
			int isExternalLinkReference = mp.get("value");					

			//IsExternalLinkReference等于false时
			if(isExternalLinkReference==0){
				iEDLR.setIsExternalLinkReference(false);

				mp = HexFinder.dicedall(1,pointer, strB);
				pointer = mp.get("pointer");

				boolean positiveLinkDirection;	
				if(mp.get("value") == 1){
					positiveLinkDirection = true;
				}else{
					positiveLinkDirection = false;
				}
				dLR.setPositiveLinkDirection(positiveLinkDirection);
				mp = HexFinder.dicedall(15,pointer, strB);
				pointer = mp.get("pointer");
				int linkId = mp.get("value");
				
				dLR.setLinkId(linkId);
				choice.setInternalLinkReference(dLR);
				choice.setExternalLinkReference(eDLR);
				iEDLR.setLinkReferenceChoice(choice);
				connectedLinks.add(iEDLR);	
			}else{       //true
				iEDLR.setIsExternalLinkReference(true);
				
				mp = HexFinder.dicedall(8,pointer, strB);
				pointer = mp.get("pointer");
				int extTileIdx = mp.get("value");

				mp = HexFinder.dicedall(1,pointer, strB);
				pointer = mp.get("pointer");
				boolean positiveLinkDirection;
				if(mp.get("value") == 1){
					positiveLinkDirection = true;
				}else{
					positiveLinkDirection = false;
				}
				dLR.setPositiveLinkDirection(positiveLinkDirection);
				
				mp = HexFinder.dicedall(15,pointer, strB);
				pointer = mp.get("pointer");
				int linkId = mp.get("value");

				dLR.setLinkId(linkId);
				eDLR.setTileExternalLinkReference(dLR);
				eDLR.setExtTileIdx(extTileIdx);
				eDLR.setTileExternalLinkReference(dLR);
				choice.setInternalLinkReference(dLR);
				choice.setExternalLinkReference(eDLR);
				iEDLR.setLinkReferenceChoice(choice);
				connectedLinks.add(iEDLR);
			}
		}
		sIntersection.setConnectedLinks(connectedLinks);
		simpleIntersections.add(sIntersection);
	}
	simpleIntersection.setSimpleIntersection(simpleIntersections);
	//输出所有值
/*	System.out.println("SimpleIntersectionList:");
	for (int y = 0; y < simpleIntersections.size(); y++) {
		System.out.println("\n"+"simpleIntersection[" + y + "]:");
		System.out.println("dx:" + simpleIntersections.get(y).getPosition().getDx());
		System.out.println("dy:" + simpleIntersections.get(y).getPosition().getDy());
		System.out.println("numLinks:" + simpleIntersections.get(y).getNumLinks());
		for (int z = 0;z < simpleIntersections.get(y).getConnectedLinks().size();z++ ) {
			System.out.println("connectedLinks[" + z + "]:");
			System.out.println("isExternalLinkReference:" + simpleIntersections.get(y).getConnectedLinks().get(z).getIsExternalLinkReference());
			if (simpleIntersections.get(y).getConnectedLinks().get(z).getIsExternalLinkReference()) {
				System.out.println("extTileIdx:" + simpleIntersections.get(y).getConnectedLinks().get(z).getLinkReferenceChoice().getExternalLinkReference().getExtTileIdx());
				System.out.println("positiveLinkDirection:" + simpleIntersections.get(y).getConnectedLinks().get(z).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getPositiveLinkDirection());
				System.out.println("LinkId:" + simpleIntersections.get(y).getConnectedLinks().get(z).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getLinkId());
			}else {
				System.out.println("positiveLinkDirection:" + simpleIntersections.get(y).getConnectedLinks().get(z).getLinkReferenceChoice().getInternalLinkReference().getPositiveLinkDirection());
				System.out.println("LinkId:" + simpleIntersections.get(y).getConnectedLinks().get(z).getLinkReferenceChoice().getInternalLinkReference().getLinkId());
			}
		}
		
	}*/
	    
	    //取第几条
/*			    SimpleIntersection intersection = simpleIntersection.getSimpleIntersection().get(15);
	    System.out.println("dx:" + intersection.getPosition().getDx());
	    System.out.println("dy:" + intersection.getPosition().getDy());
	    System.out.println("NumLinks:" + intersection.getNumLinks());
	    ArrayList<IntOrExtDirectedLinkReference> connectedLinks = intersection.getConnectedLinks();
	    for (int x = 0; x < connectedLinks.size(); x++) {
	    	if (connectedLinks.get(x).getIsExternalLinkReference()) {
	    		   System.out.println("IsExternalLinkReference:" + connectedLinks.get(x).getIsExternalLinkReference());
			       System.out.println("extTileIdx:" + connectedLinks.get(x).getLinkReferenceChoice().getExternalLinkReference().getExtTileIdx());
			       System.out.println("positiveLinkDirection:" + connectedLinks.get(x).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getPositiveLinkDirection());
			       System.out.println("LinkId:" + connectedLinks.get(x).getLinkReferenceChoice().getExternalLinkReference().getTileExternalLinkReference().getLinkId());
			      }else {
			    	  System.out.println("IsExternalLinkReference:" + connectedLinks.get(x).getIsExternalLinkReference());
			    	  System.out.println("positiveLinkDirection:" + connectedLinks.get(x).getLinkReferenceChoice().getInternalLinkReference().getPositiveLinkDirection());
				      System.out.println("LinkId:" + connectedLinks.get(x).getLinkReferenceChoice().getInternalLinkReference().getLinkId());
			         }
		}
*/
	return simpleIntersection;
}
/**
 * routingTileHeader方法,给header赋值
 * @throws IOException
 */
public static void routingTileHeader() throws IOException{
	RandomAccessFile in=new RandomAccessFile("second.dat","r");
	rb = new Readblom(2);
	in.read(rb.buffer, 0, 2);
	RoutingContentMask routingcontentmask = new RoutingContentMask();
	routingcontentmask.setHasFixedRoadAttributeSetList(rb.readBool());
	routingcontentmask.setHasSimpleIntersectionList(rb.readBool()); 	
	routingcontentmask.setHasLinkList(rb.readBool()); 		
	routingcontentmask.setHasRouteUpLinkList(rb.readBool()); 		
	routingcontentmask.setHasRouteDownLinkList(rb.readBool()); 		
	routingcontentmask.setHasLinkToTileList(rb.readBool()); 		
	routingcontentmask.setHasLinkIdRangeList(rb.readBool()); 		
	routingcontentmask.setHasSimpleIntersectionIdRangeList(rb.readBool()); 		
	routingcontentmask.setHasAttributeMaps(rb.readBool()); 		
	routingcontentmask.setHasExternalTileIdList(rb.readBool());
	header.setContentMask(routingcontentmask);
	if(header.getContentMask().getHasFixedRoadAttributeSetList() == true) 
	{
		header.setFixedRoadAttributeSetListOffset(in.readInt());
	}
	if(header.getContentMask().getHasSimpleIntersectionList() == true) 
	{
		header.setSimpleIntersectionOffset(in.readInt());
	}
	if(header.getContentMask().getHasLinkList()== true) 
	{
		header.setLinksOffset(in.readInt());
	}
	if(header.getContentMask().getHasRouteUpLinkList()== true) 
	{
		header.setRouteUpLinksOffset(in.readInt());
	}
	if(header.getContentMask().getHasRouteDownLinkList()== true) 
	{
		header.setRouteDownLinksOffset(in.readInt());
	}
	if(header.getContentMask().getHasLinkToTileList()== true) 
	{
		header.setLink2TileListOffset(in.readInt());
	}
	if(header.getContentMask().getHasLinkIdRangeList()== true) 
	{
		header.setLinkIdRangeListOffset(in.readInt());
	}
	if(header.getContentMask().getHasSimpleIntersectionIdRangeList()== true) 
	{
		header.setSimplIntIdRangeListOffset(in.readInt());
	}
	if(header.getContentMask().getHasAttributeMaps()== true) 
	{
		header.setAttributeMapsOffset(in.readInt());
	}
	if(header.getContentMask().getHasExternalTileIdList()== true) 
	{
		header.setExternalTileIdListOffset(in.readInt());
	}
/*	System.out.println(
			+header.getFixedRoadAttributeSetListOffset() + "\r\n"
			+header.getSimpleIntersectionOffset() + "\r\n"
			+header.getLinksOffset() + "\r\n"
			+header.getRouteUpLinksOffset() + "\r\n"
			+header.getRouteDownLinksOffset() + "\r\n"
			+header.getLink2TileListOffset() + "\r\n"
			+header.getSimplIntIdRangeListOffset() + "\r\n"
			+header.getLinkIdRangeListOffset() + "\r\n"
			+header.getAttributeMapsOffset() + "\r\n"
			+header.getExternalTileIdListOffset() + "\r\n");*/
	
	in.seek(header.getSimpleIntersectionOffset());
	simpleIntersection.setNumIntersections(in.readShort());
}
}


 

class Readblom{
	protected int bytePosition;
	protected int bitOffset;
	protected static final byte BYTE_MOD_MASK = 0x7;
	protected static final int BITS_PER_BYTE = 0x8;
	protected static final int BITS_PER_LONG = 0x40;
	public byte[] buffer;
	Readblom(int b)
	{
		buffer = new byte[b];
	}
	public long getBitPosition()
    {
        return BITS_PER_BYTE * bytePosition + bitOffset;
    }
	//设置bit位置
    public void setBitPosition(final long bitPosition) throws IOException
    {
        bitOffset = (int)(bitPosition % 8);
        bytePosition = (int)(bitPosition / BITS_PER_BYTE);
    }
	private byte nextByte() throws IOException
    {
        if (bytePosition >= buffer.length)
            throw new IOException("ByteArrayBitStreamReader: Unable to read byte on offset position " +
                    (bytePosition + 1) + ". It's beyond end of the stream with length " + buffer.length + ".");
        return buffer[bytePosition++];
    }
    /**
     * Returns the next unsigned byte without resetting the bit offset.
     *
     * @return Read next byte.
     *
     * @throws IOException If the reading failed.
     */
    private int nextUnsignedByte() throws IOException
    {
        return nextByte() & 0xff;
    }
	public boolean readBool() throws IOException
	{
	    return readBits(1) == 1;
	}
	//有符号位
	 public long readSignedBits(final int numBits) throws IOException
    {
        long result = readBits(numBits);
        /*
         * Perform a sign extension if needed.
         * 1L << 64 in Java is not 0L, but 1L, so treat numBits == 64 as a special case
         * (numBits == 64 does not need sign extension anyway)
         */
        if (numBits < 64 && (result & (1L << (numBits - 1))) != 0)
        {
            result |= (-1L << numBits);
        }
        return result;
    }
	 public long readBits(final int numBits) throws IOException
    {
        int bitsToRead = bitOffset + numBits;
        final int nextBitOffset = bitsToRead & BYTE_MOD_MASK;
        long accum = 0L;
        while (bitsToRead > 0)
        {
            accum = (accum << BITS_PER_BYTE) | nextUnsignedByte();
            bitsToRead -= BITS_PER_BYTE;
        }
        bitOffset = nextBitOffset;
        if (nextBitOffset != 0)
        {
            bytePosition--;
        }
        /*
         * Shift away unwanted bits on the right and mask out unwanted bits on
         * the left.
         */
        return (accum >>> -bitsToRead) & (-1L >>> (BITS_PER_LONG - numBits));
    }
}

class RoutingContentMask{
	private boolean hasFixedRoadAttributeSetList; 	
	private boolean hasSimpleIntersectionList; 		
	private boolean hasLinkList; 		
	private boolean hasRouteUpLinkList; 		
	private boolean hasRouteDownLinkList; 		
	private boolean hasLinkToTileList; 		
	private boolean hasLinkIdRangeList; 		
	private boolean hasSimpleIntersectionIdRangeList; 		
	private boolean hasAttributeMaps; 		
	private boolean hasExternalTileIdList;
	public RoutingContentMask() {}
	public void setHasFixedRoadAttributeSetList(boolean hasFixedRoadAttributeSetList) {
		this.hasFixedRoadAttributeSetList = hasFixedRoadAttributeSetList;
	}
	public boolean getHasFixedRoadAttributeSetList() {
		return hasFixedRoadAttributeSetList;
	}
	public void setHasSimpleIntersectionList(boolean hasSimpleIntersectionList) {
		this.hasSimpleIntersectionList = hasSimpleIntersectionList;
	}
	public boolean getHasSimpleIntersectionList() {
		return hasSimpleIntersectionList;
	}
	public void setHasLinkList(boolean hasLinkList) {
		this.hasLinkList = hasLinkList;
	}
	public boolean getHasLinkList() {
		return hasLinkList;
	}
	public void setHasRouteUpLinkList(boolean hasRouteUpLinkList) {
		this.hasRouteUpLinkList = hasRouteUpLinkList;
	}
	public boolean getHasRouteUpLinkList() {
		return hasRouteUpLinkList;
	}
	public void setHasRouteDownLinkList(boolean hasRouteDownLinkList) {
		this.hasRouteDownLinkList = hasRouteDownLinkList;
	}
	public boolean getHasRouteDownLinkList() {
		return hasRouteDownLinkList;
	}
	public void setHasLinkToTileList(boolean hasLinkToTileList) {
		this.hasLinkToTileList = hasLinkToTileList;
	}
	public boolean getHasLinkToTileList() {
		return hasLinkToTileList;
	}
	public void setHasLinkIdRangeList(boolean hasLinkIdRangeList) {
		this.hasLinkIdRangeList = hasLinkIdRangeList;
	}
	public boolean getHasLinkIdRangeList() {
		return hasLinkIdRangeList;
	}
	public void setHasSimpleIntersectionIdRangeList(boolean hasSimpleIntersectionIdRangeList) {
		this.hasSimpleIntersectionIdRangeList = hasSimpleIntersectionIdRangeList;
	}
	public boolean getHasSimpleIntersectionIdRangeList() {
		return hasSimpleIntersectionIdRangeList;
	}
	public void setHasAttributeMaps(boolean hasAttributeMaps) {
		this.hasAttributeMaps = hasAttributeMaps;
	}
	public boolean getHasAttributeMaps() {
		return hasAttributeMaps;
	}
	public void setHasExternalTileIdList(boolean hasExternalTileIdList) {
		this.hasExternalTileIdList = hasExternalTileIdList;
	}
	public boolean getHasExternalTileIdList() {
		return hasExternalTileIdList;
	}
}

 class RoutingTileHeader {
		RoutingContentMask  contentMask;
		int fixedRoadAttributeSetListOffset;
		int simpleIntersectionOffset;
		int linksOffset;
		int routeUpLinksOffset;
		int routeDownLinksOffset;
		int link2TileListOffset;
		int linkIdRangeListOffset;
		int simplIntIdRangeListOffset;
		int attributeMapsOffset;
		int externalTileIdListOffset;
		public RoutingTileHeader() {}
		public RoutingContentMask getContentMask() {
			return contentMask;
		}
		public void setContentMask(RoutingContentMask contentMask) {
			this.contentMask = contentMask;
		}
		public int getFixedRoadAttributeSetListOffset() {
			return fixedRoadAttributeSetListOffset;
		}
		public void setFixedRoadAttributeSetListOffset(int fixedRoadAttributeSetListOffset) {
			this.fixedRoadAttributeSetListOffset = fixedRoadAttributeSetListOffset;
		}
		public int getSimpleIntersectionOffset() {
			return simpleIntersectionOffset;
		}
		public void setSimpleIntersectionOffset(int simpleIntersectionOffset) {
			this.simpleIntersectionOffset = simpleIntersectionOffset;
		}
		public int getLinksOffset() {
			return linksOffset;
		}
		public void setLinksOffset(int linksOffset) {
			this.linksOffset = linksOffset;
		}
		public int getRouteUpLinksOffset() {
			return routeUpLinksOffset;
		}
		public void setRouteUpLinksOffset(int routeUpLinksOffset) {
			this.routeUpLinksOffset = routeUpLinksOffset;
		}
		public int getRouteDownLinksOffset() {
			return routeDownLinksOffset;
		}
		public void setRouteDownLinksOffset(int routeDownLinksOffset) {
			this.routeDownLinksOffset = routeDownLinksOffset;
		}
		public int getLink2TileListOffset() {
			return link2TileListOffset;
		}
		public void setLink2TileListOffset(int link2TileListOffset) {
			this.link2TileListOffset = link2TileListOffset;
		}
		public int getLinkIdRangeListOffset() {
			return linkIdRangeListOffset;
		}
		public void setLinkIdRangeListOffset(int linkIdRangeListOffset) {
			this.linkIdRangeListOffset = linkIdRangeListOffset;
		}
		public int getSimplIntIdRangeListOffset() {
			return simplIntIdRangeListOffset;
		}
		public void setSimplIntIdRangeListOffset(int simplIntIdRangeListOffset) {
			this.simplIntIdRangeListOffset = simplIntIdRangeListOffset;
		}
		public int getAttributeMapsOffset() {
			return attributeMapsOffset;
		}
		public void setAttributeMapsOffset(int attributeMapsOffset) {
			this.attributeMapsOffset = attributeMapsOffset;
		}

		public int getExternalTileIdListOffset() {
			return externalTileIdListOffset;
		}
		public void setExternalTileIdListOffset(int externalTileIdListOffset) {
			this.externalTileIdListOffset = externalTileIdListOffset;
		}
	}
 class SimpleIntersectionList {
		private int numIntersections;
		private ArrayList<SimpleIntersection> simpleIntersection;//simpleIntersection[numIntersections]	
		public SimpleIntersectionList() {}
		public int getNumIntersections() {
			return numIntersections;
		}
		public void setNumIntersections(int numIntersections) {
			this.numIntersections = numIntersections;
		}
		public ArrayList<SimpleIntersection> getSimpleIntersection() {
			return simpleIntersection;
		}
		public void setSimpleIntersection(ArrayList<SimpleIntersection> simpleIntersection) {
			this.simpleIntersection = simpleIntersection;   //simpleIntersection.addAll(simpleIntersection);
		}
	}

 class SimpleIntersection{
		private CoordXYOffset position;
		private int numLinks;
		private ExternalDirectedLinkReference externalLinkReference;
		private ArrayList<IntOrExtDirectedLinkReference> connectedLinks;//connectedLinks[numLinks]
        public SimpleIntersection() {}
		public CoordXYOffset getPosition() {
			return position;
		}
		public void setPosition(CoordXYOffset position) {
			this.position = position;
		}
		public int getNumLinks() {
			return numLinks;
		}
		public void setNumLinks(int numLinks) {
			this.numLinks = numLinks;
		}
		public ArrayList<IntOrExtDirectedLinkReference> getConnectedLinks() {
			return connectedLinks;
		}
		public void setConnectedLinks(ArrayList<IntOrExtDirectedLinkReference> connectedLinks) {
			this.connectedLinks = connectedLinks;    //connectedLinks.addAll(connectedLinks);
		}
		public ExternalDirectedLinkReference getExternalLinkReference() {
			return externalLinkReference;
		}
		public void setExternalLinkReference(
				ExternalDirectedLinkReference externalLinkReference) {
			this.externalLinkReference = externalLinkReference;
		}
	}	

 class CoordXYOffset{
			private int numBits;
			private int dx;
			private int dy;
			public CoordXYOffset() {}
			public int getNumBits() {
				return numBits;
			}
			public void setNumBits(int numBits) {
				this.numBits = numBits;
			}
			public int getDx() {
				return dx;
			}
			public void setDx(int dx) {
				this.dx = dx;
			}
			public int getDy() {
				return dy;
			}
			public void setDy(int dy) {
				this.dy = dy;
			}
		}

 class IntOrExtDirectedLinkReference{
			private boolean isExternalLinkReference;
			private LinkReferenceChoice linkReferenceChoice;
	    public IntOrExtDirectedLinkReference() {}
		public boolean getIsExternalLinkReference() {
			return isExternalLinkReference;
		}
		public void setIsExternalLinkReference(boolean isExternalLinkReference) {
			this.isExternalLinkReference = isExternalLinkReference;
		}
		public LinkReferenceChoice getLinkReferenceChoice() {
			return linkReferenceChoice;
		}
		public void setLinkReferenceChoice(LinkReferenceChoice linkReferenceChoice) {
			this.linkReferenceChoice = linkReferenceChoice;
		}
		}

 class LinkReferenceChoice{
	    	private DirectedLinkReference internalLinkReference;
	    	private ExternalDirectedLinkReference externalLinkReference;
	    	public LinkReferenceChoice() {}
			public DirectedLinkReference getInternalLinkReference() {
				return internalLinkReference;
			}
			public void setInternalLinkReference(DirectedLinkReference internalLinkReference) {
				this.internalLinkReference = internalLinkReference;
			}
			public ExternalDirectedLinkReference getExternalLinkReference() {
				return externalLinkReference;
			}
			public void setExternalLinkReference(ExternalDirectedLinkReference externalLinkReference) {
				this.externalLinkReference = externalLinkReference;
			}
		}

class DirectedLinkReference{
	    		private boolean positiveLinkDirection;
	    		private int linkId;
	    		public DirectedLinkReference() {}
				public boolean getPositiveLinkDirection() {
					return positiveLinkDirection;
				}
				public void setPositiveLinkDirection(boolean positiveLinkDirection) {
					this.positiveLinkDirection = positiveLinkDirection;
				}
				public int getLinkId() {
					return linkId;
				}
				public void setLinkId(int linkId2) {
					this.linkId = linkId2;
				}
			}

class LinkId{
	    			private byte linkId;
					public LinkId() {}
					public byte getLinkId() {
		               return linkId;
					}
					public void setLinkId(byte linkId) {
						this.linkId = linkId;
					}
	    		}

class ExternalDirectedLinkReference{
	        	private int extTileIdx;
	        	private DirectedLinkReference tileExternalLinkReference;
	        	public ExternalDirectedLinkReference() {}
				public int getExtTileIdx() {
					return extTileIdx;
				}
				public void setExtTileIdx(int extTileIdx2) {
					this.extTileIdx = extTileIdx2;
				}
				public DirectedLinkReference getTileExternalLinkReference() {
					return tileExternalLinkReference;
				}
				public void setTileExternalLinkReference(DirectedLinkReference tileExternalLinkReference) {
					this.tileExternalLinkReference = tileExternalLinkReference;
				}
	        }		

class SizeOfExternalTileIdList{
	private int SizeOfExternalTileIdList;
	public SizeOfExternalTileIdList() {}
	public int getSizeOfExternalTileIdList() {
		return SizeOfExternalTileIdList;
	}
	public void setSizeOfExternalTileIdList(int SizeOfExternalTileIdList) {
		this.SizeOfExternalTileIdList = SizeOfExternalTileIdList;
	}
}

class LinkList{
	private int numnumLinks;                 //uint16  16位
	private ArrayList<Link> link1; //有问题      //集合
	public LinkList() {}
	public int getNumnumLinks() {
		return numnumLinks;
	}
	public void setNumnumLinks(int numnumLinks) {
		this.numnumLinks = numnumLinks;
	}
	public ArrayList<Link> getLink1() {
		return link1;
	}
	public void setLink1(ArrayList<Link> link1) {
		this.link1 = link1;
	}
}

class Link{
	private FeatureLength length;
	private AttributeSource attrSource;
	private RoutingAttributeInfo attrInfo;
	private AverageSpeed averageSpeed;
	private LinkSector startAngle;
	private LinkSector endAngle;
	public Link() {}
	public FeatureLength getLength() {
		return length;
	}
	public void setLength(FeatureLength length) {
		this.length = length;
	}
	public AttributeSource getAttrSource() {
		return attrSource;
	}
	public void setAttrSource(AttributeSource attrSource) {
		this.attrSource = attrSource;
	}
	public RoutingAttributeInfo getAttrInfo() {
		return attrInfo;
	}
	public void setAttrInfo(RoutingAttributeInfo attrInfo) {
		this.attrInfo = attrInfo;
	}
	public AverageSpeed getAverageSpeed() {
		return averageSpeed;
	}
	public void setAverageSpeed(AverageSpeed averageSpeed) {
		this.averageSpeed = averageSpeed;
	}
	public LinkSector getStartAngle() {
		return startAngle;
	}
	public void setStartAngle(LinkSector startAngle) {
		this.startAngle = startAngle;
	}
	public LinkSector getEndAngle() {
		return endAngle;
	}
	public void setEndAngle(LinkSector endAngle) {
		this.endAngle = endAngle;
	}
}
class FeatureLength{
	private long length;                      //varuint32   24位可变
	public FeatureLength() {}
	public long getLength1() {
		return length;
	}
	public void setLength1(long length) {
		this.length = length;
	}
}
class AttributeSource{
//	private int INDEXED;                   //1bit   INDEXED = 0
//	private int EXPLICIT;                  //1bit   EXPLICIT = 1
	private boolean attrsource;
	public AttributeSource() {}
	public boolean getAttrsource1() {
		return attrsource;
	}
	public void setAttrsource1(boolean attrsource) {
		this.attrsource = attrsource;
	}
	
//	public int getINDEXED() {
//		return INDEXED;
//	}
//	public void setINDEXED(int INDEXED) {
//		this.INDEXED = INDEXED;
//	}
//	public int getEXPLICIT() {
//		return EXPLICIT;
//	}
//	public void setEXPLICIT(int EXPLICIT) {
//		this.EXPLICIT = EXPLICIT;
//	}
}
class RoutingAttributeInfo{
	private FixedRoadAttributeSetListIndex fixedRoadAttributeSetListIndex;
	private FixedRoadAttributeSet fixedAttributes;
	public RoutingAttributeInfo() {}
	public FixedRoadAttributeSetListIndex getFixedRoadAttributeSetListIndex() {
		return fixedRoadAttributeSetListIndex;
	}
	public void setFixedRoadAttributeSetListIndex(FixedRoadAttributeSetListIndex fixedRoadAttributeSetListIndex) {
		this.fixedRoadAttributeSetListIndex = fixedRoadAttributeSetListIndex;
	}
	public FixedRoadAttributeSet getFixedAttributes() {
		return fixedAttributes;
	}
	public void setFixedAttributes(FixedRoadAttributeSet fixedAttributes) {
		this.fixedAttributes = fixedAttributes;
	}
}
class FixedRoadAttributeSetListIndex{          //1bit   INDEXED = 0时     
	private int fixedRoadAttributeSetListIndex;    //varuint16    8位
	public FixedRoadAttributeSetListIndex() {}
	public int getFixedRoadAttributeSetListIndex() {
		return fixedRoadAttributeSetListIndex;
	}
	public void setFixedRoadAttributeSetListIndex(int fixedRoadAttributeSetListIndex) {
		this.fixedRoadAttributeSetListIndex = fixedRoadAttributeSetListIndex;
	}
}
class FixedRoadAttributeSet{      //1bit   EXPLICIT = 1时
	private SharedRoadAttributes sharedAttr;
	private RoutingRoadAttributes routingAttr;
	public FixedRoadAttributeSet() {}
	public SharedRoadAttributes getSharedAttr() {
		return sharedAttr;
	}
	public void setSharedAttr(SharedRoadAttributes sharedAttr) {
		this.sharedAttr = sharedAttr;
	}
	public RoutingRoadAttributes getRoutingAttr() {
		return routingAttr;
	}
	public void setRoutingAttr(RoutingRoadAttributes routingAttr) {
		this.routingAttr = routingAttr;
	}
}
class SharedRoadAttributes{
	private PriorityRoadClass priorityRoadClass;
	private LinkType linkType;
	private Direction travelDirection;
	private boolean ferry;    //所有布尔:1bit
	private boolean tunnel;
	private boolean bridge;
	private Direction toll;
	private boolean controlledAccess;
	private boolean serviceArea;
	public SharedRoadAttributes() {}
	public PriorityRoadClass getPriorityRoadClass() {
		return priorityRoadClass;
	}
	public void setPriorityRoadClass(PriorityRoadClass priorityRoadClass) {
		this.priorityRoadClass = priorityRoadClass;
	}
	public LinkType getLinkType() {
		return linkType;
	}
	public void setLinkType(LinkType linkType) {
		this.linkType = linkType;
	}
	public Direction getTravelDirection() {
		return travelDirection;
	}
	public void setTravelDirection(Direction travelDirection) {
		this.travelDirection = travelDirection;
	}
	public boolean getFerry() {
		return ferry;
	}
	public void setFerry(boolean ferry) {
		this.ferry = ferry;
	}
	public boolean getTunnel() {
		return tunnel;
	}
	public void setTunnel(boolean tunnel) {
		this.tunnel = tunnel;
	}
	public boolean getBridge() {
		return bridge;
	}
	public void setBridge(boolean bridge) {
		this.bridge = bridge;
	}
	public Direction getToll() {
		return toll;
	}
	public void setToll(Direction toll) {
		this.toll = toll;
	}
	public boolean getControlledAccess() {
		return controlledAccess;
	}
	public void setControlledAccess(boolean controlledAccess) {
		this.controlledAccess = controlledAccess;
	}
	public boolean getServiceArea() {
		return serviceArea;
	}
	public void setServiceArea(boolean serviceArea) {
		this.serviceArea = serviceArea;
	}
}
class PriorityRoadClass{
	private int priorityRoadClass;         //4bit
	public PriorityRoadClass() {}
	public int getPriorityRoadClass1() {
		return priorityRoadClass;
	}
	public void setPriorityRoadClass1(int priorityroadclass) {
		this.priorityRoadClass = priorityroadclass;
	}
}
class LinkType{
	private int linkType;       //特殊:14中情况,0~D       4bit
	public LinkType() {}
	public int getLinkType1() {
		return linkType;
	}
	public void setLinkType1(int linkType) {
		this.linkType = linkType;
	}
}
class Direction{                    //特殊:四种情况:0~3 ,下面的两个不是都顺序输出的,两个东西   
	private int travelDirection;   //2bit
	private int toll;              //2bit
	public Direction() {}
	public int getTravelDirection() {
		return travelDirection;
	}
	public void setTravelDirection(int travelDirection) {
		this.travelDirection = travelDirection;
	}
	public int getToll() {
		return toll;
	}
	public void setToll(int toll) {
		this.toll = toll;
	}
}
class RoutingRoadAttributes {
	private FunctionalRoadClass functionalRoadClass;
	private boolean urban;
	private boolean complexIntersection;
	private boolean pluralJunction;
	private boolean motorway;
	public RoutingRoadAttributes() {}
	public FunctionalRoadClass getFunctionalRoadClass() {
		return functionalRoadClass;
	}
	public void setFunctionalRoadClass(FunctionalRoadClass functionalRoadClass) {
		this.functionalRoadClass = functionalRoadClass;
	}
	public boolean getUrban() {
		return urban;
	}
	public void setUrban(boolean urban) {
		this.urban = urban;
	}
	public boolean getComplexIntersection() {
		return complexIntersection;
	}
	public void setComplexIntersection(boolean complexIntersection) {
		this.complexIntersection = complexIntersection;
	}
	public boolean getPluralJunction() {
		return pluralJunction;
	}
	public void setPluralJunction(boolean pluralJunction) {
		this.pluralJunction = pluralJunction;
	}
	public boolean getMotorway() {
		return motorway;
	}
	public void setMotorway(boolean motorway) {
		this.motorway = motorway;
	}
}
class FunctionalRoadClass {
	private int functionalRoadClass;          //3bit
	public FunctionalRoadClass() {}
	public int getFunctionalRoadClass() {
		return functionalRoadClass;
	}
	public void setFunctionalRoadClass(int functionalRoadClass) {
		this.functionalRoadClass = functionalRoadClass;
	}
}
class AverageSpeed{
	private int averageSpeed;      //uint8   8位
	public AverageSpeed() {}
	public int getAverageSpeed() {
		return averageSpeed;
	}
	public void setAverageSpeed(int averageSpeed) {
		this.averageSpeed = averageSpeed;
	}
}
class LinkSector{            //下面的两个不是都顺序输出的,两个东西  
	private int startAngle;            //6bit
	private int endAngle;              //6bit
	public LinkSector() {}
	public int getStartAngle() {
		return startAngle;
	}
	public void setStartAngle(int startAngle) {
		this.startAngle = startAngle;
	}
	public int getEndAngle() {
		return endAngle;
	}
	public void setEndAngle(int endAngle) {
		this.endAngle = endAngle;
	}
}


class RoutingIdRangeList{
	private int numFeatureRanges;
	private ArrayList<NumRoutingListElements> featureRange;
	public RoutingIdRangeList() {}
	public int getNumFeatureRanges() {
		return numFeatureRanges;
	}
	public void setNumFeatureRanges(int numFeatureRanges) {
		this.numFeatureRanges = numFeatureRanges;
	}
	public ArrayList<NumRoutingListElements> getFeatureRange() {
		return featureRange;
	}
	public void setFeatureRange(ArrayList<NumRoutingListElements> featureRange) {
		this.featureRange = featureRange;
	}
}

class NumRoutingListElements{
	private int startFeatureId;
	private int endFeatureId;
	public int getStartFeatureId() {
		return startFeatureId;
	}
	public void setStartFeatureId(int startFeatureId) {
		this.startFeatureId = startFeatureId;
	}
	public int getEndFeatureId() {
		return endFeatureId;
	}
	public void setEndFeatureId(int endFeatureId) {
		this.endFeatureId = endFeatureId;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值