⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testnetworkquery.java.svn-base

📁 aresde 空间数据开发 例子
💻 SVN-BASE
字号:
package test;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.esri.arcgis.carto.IIdentify;
import com.esri.arcgis.carto.IIdentify2;
import com.esri.arcgis.carto.IIdentify2Proxy;
import com.esri.arcgis.carto.IIdentifyObject;
import com.esri.arcgis.carto.IIdentifyProxy;
import com.esri.arcgis.carto.ILayer;
import com.esri.arcgis.datasourcesGDB.SdeWorkspaceFactory;
import com.esri.arcgis.geodatabase.*;
import com.esri.arcgis.geometry.IGeometry;
import com.esri.arcgis.networkanalyst.INAClass;
import com.esri.arcgis.networkanalyst.INAClassFieldMap;
import com.esri.arcgis.networkanalyst.INAClassLoader;
import com.esri.arcgis.networkanalyst.INAContext;
import com.esri.arcgis.networkanalyst.INAContextEdit;
import com.esri.arcgis.networkanalyst.INALayer;
import com.esri.arcgis.networkanalyst.INARouteSolver;
import com.esri.arcgis.networkanalyst.INASolver;
import com.esri.arcgis.networkanalyst.INASolverSettings;
import com.esri.arcgis.networkanalyst.NAClassFieldMap;
import com.esri.arcgis.networkanalyst.NAClassLoader;
import com.esri.arcgis.networkanalyst.NALayer;
import com.esri.arcgis.networkanalyst.NARouteSolver;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.IArray;
import com.esri.arcgis.system.IStringArray;
import com.esri.arcgis.system.PropertySet;
import com.esri.arcgis.system.UID;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.geodatabase.esriNetworkElementType;

import junit.framework.TestCase;

public class TestNetworkQuery extends TestCase {
	private final Log log=LogFactory.getLog(this.getClass());
	
	private AoInitialize aoInit;
	
	private PropertySet propSet;
	
	private IFeatureWorkspace ifw;
	
	/*private IWorkspaceExtensionManager manager;
	private IWorkspaceExtension extension;
	private IDatasetContainer2 datasetContainer2;*/
	private INetworkDataset pNetDataset;
	/*private INAContext pNAContext;
	private INALayer pNALayer;
	private INAClass pStopsNAClass;
	private IFeatureClass pRoutesFC;*/
    
	private INetworkQuery pNetworkQuery;//用来生成NetworkElement
	private INetworkForwardStar pNetworkForwardStar;//用来生成Adjacency对象
	/*private INetworkForwardStarSetup pNetworkForwardStarSetup;
	private String sFromEdgeEIDText;
	private int lFromEdgeEID;
	private int lEdgeCount;
    int i;
    private INetworkEdge pFromEdge;
	private String sLastExteriorEdgeEIDText;
	private INetworkEdge pLastExteriorEdge;
	private esriNetworkEdgeDirection eDirection;*/
	private INetworkForwardStarAdjacencies pAdjacencies;
	private INetworkEdge pNetworkEdge;
	private INetworkJunction pNetworkJunction;
	private INetworkJunction m_pNetworkJunction;
	/*private INetworkTurn pNetworkTurn;
	 * */

	private double[] fromPosition=new double[]{0};
	private double[] toPosition=new double[]{1};
	private boolean[] isFiltered=new boolean[]{false};

	
	protected void setUp() throws Exception {
		super.setUp();
		EngineInitializer.initializeEngine();
		aoInit= new AoInitialize();
		aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
		propSet = new PropertySet();
		propSet.setProperty("SERVER", "192.168.1.220");
		propSet.setProperty("INSTANCE", "5151");
		propSet.setProperty("USER", "sde");
		propSet.setProperty("PASSWORD", "sde");
		propSet.setProperty("VERSION", "SDE.DEFAULT");
		SdeWorkspaceFactory swf=new SdeWorkspaceFactory();
		ifw=(IFeatureWorkspace)swf.open(propSet, 0);
		//manager=(IWorkspaceExtensionManager)ifw;
		
	}

	protected void tearDown() throws Exception {
		super.tearDown();
		aoInit.shutdown();
	}
	
	/*public void testIdentiry() throws Exception{
		FeatureClass ifc=new FeatureClass(ifw.openFeatureClass("Disconnector_Layer0919"));
		IQueryFilter q= new QueryFilter();
		//查询条件
		q.setWhereClause("SVGID=101001322");
		IFeatureCursor cursor=new FeatureCursor(ifc.search(q,false));
		IFeature f=cursor.nextFeature();
		if(f!=null){
			//IIdentify idf=new IIdentifyProxy();
			//IIdentify idf=(IIdentify)f.getExtent();
			//log.info(f.getOID());
			IGeometry geo=f.getExtent();
			NALayer idf=new NALayer();
			IArray array=idf.identify(geo);
			//log.info("length=="+array.getCount());
			for(int i=0;i<array.getCount();i++){
				log.info(array.getElement(i));
			}
		}
	}*/
	
	public void testGetNetworkDataset() throws Exception{
		IEnumDataset edst=ifw.openFeatureDataset("ZJ_WZ_OHB1011").getSubsets();
		/*UID uid = new UID();    
		uid.setValue("esriGeoDatabase.NetworkDatasetWorkspaceExtension");
		extension=manager.findExtension(uid);
		
	    datasetContainer2=new IDatasetContainer2Proxy(extension);*/
	    //datasetContainer2.getDatasetByName(com.esri.arcgis.geodatabase.esriDatasetType.esriDTNetworkDataset, "ZJ_WZ_OHB_NET0921");
	    //pNetDataset =new INetworkDatasetProxy(ifw.openFeatureDataset("").getSubsets());
		
	    int i=0;
	    
	    //找出NetworkDataset对象
		for(IDataset ds=edst.next();ds!=null;ds=edst.next(),i++){
			if(ds.getType()==com.esri.arcgis.geodatabase.esriDatasetType.esriDTNetworkDataset){
				pNetDataset=new NetworkDataset(ds);
			}
		}
		
		/*createRouteAnalysisLayer("name of NAContext",pNetDataset);
		//log.info(pNetDataset);
		pNAContext=pNALayer.getContext();
		pStopsNAClass = (INAClass)pNAContext.getNAClasses().getItemByName("Stops");
	    pRoutesFC = (IFeatureClass)pNAContext.getNAClasses().getItemByName("Routes");
	     
	    INAClassFieldMap pNAClassFieldMap = new NAClassFieldMap();
	    pNAClassFieldMap.setMappedField("objectid", "objectid");
	    
	    INAClassLoader pNALoader = new NAClassLoader();
	    pNALoader.setLocatorByRef(pNAContext.getLocator());
	    pNALoader.setNAClassByRef(pStopsNAClass);
	    pNALoader.setFieldMapByRef(pNAClassFieldMap);*/
		
		//创建INetworkQuery对象用来生成NetworkElement
		
		
		pNetworkQuery=(INetworkQuery)pNetDataset;
		
		//创建空的INetworkJunction
		m_pNetworkJunction=(INetworkJunction)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETJunction);
		//pFromEdge=(INetworkEdge)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETEdge);
		//pLastExteriorEdge=(INetworkEdge)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETEdge);
		
		//根据图层名称和ObjectID查出NetworkElement
		IEnumNetworkElement  e=pNetworkQuery.getElementsByOID(pNetDataset.getSourceByName("Breaker_Layer1011").getID(), 1);
		
		//把INetworkJunction传入,根据输入的ElementID 得到查询的Junction
		pNetworkQuery.queryJunction(e.next().getEID(), m_pNetworkJunction);
		
		//pNetworkQuery.queryEdge(150, com.esri.arcgis.geodatabase.esriNetworkEdgeDirection.esriNEDAlongDigitized, pFromEdge);
		
		//创建INetworkForwardStar用来作网络分析
		pNetworkForwardStar=pNetworkQuery.createForwardStar();
		//pNetworkForwardStarSetup=new INetworkForwardStarSetupProxy(pNetworkForwardStar);
		
		//创建空的INetworkForwardStarAdjacencies对象
		pAdjacencies=pNetworkQuery.createForwardStarAdjacencies();
		
		//创建空的INetworkEdge和空的INetworkJunction
		pNetworkEdge=(INetworkEdge)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETEdge);
		pNetworkJunction=(INetworkJunction)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETJunction);
		//pNetworkTurn=(INetworkTurn)pNetworkQuery.createNetworkElement(esriNetworkElementType.esriNETTurn);
		
		//pNetworkForwardStar.queryAdjacencies(m_pNetworkJunction, pFromEdge, pLastExteriorEdge, pAdjacencies);
		
		//把指定的Junction和Adjacency作为参数传入queryAdjacencies方法中,得到Junction的邻近边
		pNetworkForwardStar.queryAdjacencies(m_pNetworkJunction, null, null, pAdjacencies);
		
		
		for(i=0;i<pAdjacencies.getCount();i++){
			//把空的边对象传入,查询取得邻近边
			pAdjacencies.queryEdge(i, pNetworkEdge, fromPosition,toPosition );
			
			//把空的Junction对象传入,查询取得指定Junction对面的Junciton
			pAdjacencies.queryToJunction(i, pNetworkJunction, isFiltered);
			log.info("NetWorkEdge eid :"+pNetworkEdge.getEID()+" Junction eid :"+pNetworkJunction.getEID());
			
			//传入Junction对象,查询取得边上的两个Junction
			pNetworkEdge.queryJunctions(pNetworkJunction, m_pNetworkJunction);
			log.info("edge is "+pNetworkEdge.getEID()+" from : "+pNetworkJunction.getEID()+" to : "+m_pNetworkJunction.getEID());
			log.info("fromPosition : "+fromPosition[0]+" toPosition : "+toPosition[0]);
			log.info("====================================");
		}
		
		/*pNetworkQuery.queryEdge(151, com.esri.arcgis.geodatabase.esriNetworkEdgeDirection.esriNEDAlongDigitized, pNetworkEdge);
		pNetworkEdge.queryJunctions(pNetworkJunction, m_pNetworkJunction);
		log.info("edge is "+pNetworkEdge.getEID()+" from : "+pNetworkJunction.getEID()+" to : "+m_pNetworkJunction.getEID());*/
	}
	
	/*private void createRouteAnalysisLayer(String name,INetworkDataset pNetDataset) throws Exception{
		  INARouteSolver pNARouteSolver = new NARouteSolver();
	      INASolverSettings pNASolverSettings = (INASolverSettings)pNARouteSolver ;
	      INASolver pNASolver = (INASolver)pNARouteSolver ;
	      
	      //Set some properties on the the route solver interface
	      pNARouteSolver.setFindBestSequence(true);
	      pNARouteSolver.setPreserveFirstStop(true);
	      pNARouteSolver.setPreserveLastStop(false);
	      pNARouteSolver.setUseTimeWindows(false);
	     // pNARouteSolver.OutputLines = esriNAOutputLineType.esriNAOutputLineTrueShapeWithMeasure;
	      pNARouteSolver.setOutputLines(com.esri.arcgis.networkanalyst.esriNAOutputLineType.esriNAOutputLineTrueShapeWithMeasure);
	      
	      //Set some properties on the general INASolverSettings interface
	      IStringArray pRestrictions = pNASolverSettings.getRestrictionAttributeNames();
	      pRestrictions.add("Oneway");
	      pNASolverSettings.setRestrictionAttributeNamesByRef(pRestrictions);
	    
	      //Get the NetworkDataset's Data Element
	      IDatasetComponent pDatasetComponent = (IDatasetComponent)pNetDataset ;
	      IDENetworkDataset pDENetworkDataset = (IDENetworkDataset)pDatasetComponent.getDataElement();
	      
	      //Create the NAContext and bind to it
	      pNAContext = pNASolver.createContext(pDENetworkDataset, name);
	      INAContextEdit pNAContextEdit = (INAContextEdit)pNAContext;
	      pNAContextEdit.bind(pNetDataset, new GPMessages());
	      
	      //Create the NALayer
	      pNALayer = pNASolver.createLayer(pNAContext);
	      ((ILayer)pNALayer).setName(name);
	}*/
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -