版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MapXtremeforJava開(kāi)發(fā) 專(zhuān)題一:怎樣在應(yīng)用中創(chuàng)建地 專(zhuān)題二:怎樣操作地圖---控制地圖顯 專(zhuān)題三:怎樣進(jìn)行空間特征值的搜 專(zhuān)題四:怎樣對(duì)空間特征值對(duì)象編 專(zhuān)題五:怎樣進(jìn)行專(zhuān)題分 專(zhuān)題七:怎樣實(shí)現(xiàn)GPS專(zhuān)題八:怎樣調(diào)用空間數(shù)據(jù)庫(kù)中的地 專(zhuān)題九:怎樣快速響應(yīng)多并發(fā)用戶數(shù)據(jù)庫(kù)數(shù)據(jù)請(qǐng) 專(zhuān)題十:怎樣將影像圖與矢量圖進(jìn)行疊 MapXtremeforJava開(kāi)發(fā)三種WebGIS模式。MXTJMapXtremeServlet、MapJ、Renderers、DataProvidersMapXtremeServlet1提供柵格地圖數(shù)據(jù)服務(wù),2提供矢量地圖數(shù)據(jù)服務(wù),3提供圖元文件數(shù)據(jù)服務(wù)(例:tab);MapJMapxtremeAPI:1(例:地et響應(yīng)的數(shù)據(jù)和;Renderer用來(lái)生成返回客戶端地圖數(shù)據(jù)的組件,有四種:LocalRenderer、MapXtremeImageRenderer、.Intra-ServletContainer positeRenderer。使用MapXtremeImageRender可以在產(chǎn)生地圖圖像,包含MapJ的應(yīng)用程序和一個(gè)MapXtremeServlet實(shí)例通訊,產(chǎn)生地圖圖像;LocalRender將地圖輸出為Java2DGraphics2D對(duì)象,所有的Render在客戶端產(chǎn)生,也即所謂地圖的矢量傳輸方式;使用IntraServletContainerRenderer不需socketconnection,從而MapXtremeSevlet將地圖直接傳回給客戶端;CompositeRenderer將地圖分為動(dòng)態(tài)與靜態(tài)圖層,當(dāng)需要更新地圖時(shí),可只更新動(dòng)態(tài)圖層,DataProviderLayer(圖層)對(duì)象的內(nèi)部對(duì)象,它不是直接由用戶創(chuàng)建的,但是它的描述是對(duì)圖層的DataProvider:TableDescHelper–描述數(shù)據(jù);DataProviderHelper–定義數(shù)據(jù)的源;ataProviderRef–描述獲取數(shù)據(jù)的方式。Map步驟: 創(chuàng)建MapJ 設(shè)圖尺 生成 myMap=new GeoSet(*.gst)MapDefinition(*.mdf)文件加載地圖數(shù)據(jù)。MapXtrememyMap.loadGeoset(geosetName,dataDir,geosetName:geoset(包括路徑dataDir:geoset中的tab地圖文件的位置 URLNULL 加載MapMapDefContainer,有兩種情況:MapDefContainermdc=newMapDefContainermdc=newMapDefContainermdc=newJDBCMapDefContainer(driver,url,use其中,driver,url,user,passwordOracleSpatialMapRefContainer,地圖定義保存在數(shù)據(jù)庫(kù)的表中:OraSoMapDefContainermdc=
newOraSoMapDefContainer("oracle.jdbc.driver.OracleDriver","jdbc:oracle:thin:@machinename:"username","password","tableName","Name",myMap.loadMapDefinition(mapDefContainer,name)name是地圖定義的名字,如:myMap.loadMapDefinition(mdc, myMap.setDeviceBounds(newDoubleRect(0,0,800, 生成生成需要一下幾步 StringmapxtremeServletUrl= 創(chuàng) poser poser.create(myMap,256,表示是256色背景為藍(lán)色的GIF圖 MapXtremeImageRendererrenderernew 生成toStream,toImage如果使用MapJ直接獲取地圖數(shù)據(jù)并生成,則使用LocalRender而不是MapXtremeImageRender。MapXtremeImageRenderLocalRender專(zhuān)題二:怎樣操作地圖---設(shè)圖視野zoom//Assumingthatthecurrentdistanceunitsarekilometers,thiscommandwillsetthe//mapzoomto500kilometers.設(shè)圖中設(shè)圖中心的方法是setCenter()//Pointscreenpoint=new//worldpoint=//設(shè)圖中設(shè)圖邊DoubleRectbounds=newDoubleRect(-180,-90,180,90);DoubleRectbounds=newDoubleRect(newDoublePoint(0,0),360,180);設(shè)圖投坐標(biāo)數(shù)據(jù)在server\mapinfow.prj文件中,包含上百種投影。PRJStringcsProj=newString("\"AzimuthalEquidistant(NorthPole)\",5,62,7,0,0,CoordSysts=CoordSys.createFromPRJ(csProj);也可以用createFromMapBasicMapBasic字符串來(lái)設(shè)置投影distUnit=LinearUnit.kilometer;DataProviderSearch有時(shí)可能做一些搜索,如搜索配送中心周?chē)牧闶鄣?。MapXtreme提供了豐富的搜索功能。搜索的結(jié)果可以轉(zhuǎn)換為被選中狀態(tài),從而顯示在地圖上。Search是Layer對(duì)象的方法,有:Vector//AssumemyLayerisaLayerTableInfomyTableInfo=myLayer.getTableInfo();VectorcolumnNames=newVector();intcolumnCount=myTableInfo.getColumnCount();Stringcol;for(intj=0;j<columnCount;{col=myTableInfo.getColumnName(j);}tion,PrimaryKey,rasterDataQueryParams類(lèi)來(lái)過(guò)濾這些信息,以提高程序的性QueryParamsqp=newQueryParams(bGeometry,bRendition,bPrimarykey,bLabelPoint,bRasterInfo,bLabelRendition,SearchType.entire);//findallFeaturesentirelywithinagivensearchregion,returnasingleAttributecolumn//andnoRenditioninformation.Vectorcols=newFeaturesearchFeature =mapj.getFeatureFactory().createRegion(points,rend,attribs,nulQueryParamsqueryParams=newQueryParams(true,false,true,true,true,true,SearchTFeatureSetfs=layer.searchWithinRegion(cols,searchFeature.getGeometry(), Search //AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthecolumns//tobereturned.AssumeqpistheQueryParamsobject.AssumemyLayerisaLayer//object.{fs=}catch(exception{}//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthedesired//columns tobereturned.AssumeqpistheQueryParamsobject.AssumemyLayer//isaLayerobject.DoublePointdblPt=newDoublePoint(-73.889444,42.765555);doubledRadius=10.03;{fs=myLayer.searchWithinRadius(columnNames,dblPt,dRadius,LinearUnit.}catch(exception{}==>privateboolean{//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthecolumns//tobe returned.AssumeqpistheQueryParamsobject.AssumemyLayerisaLayer//object.AssumevGeomisaVectorGeometryofTYPE_REGION{fs}catch(Exception{returnfalse;}return}==>//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthecolumns//tobereturned.AssumeqpistheQueryParamsobject.AssumemyLayerisaLayer//object.DoubleRectdRect=newDoubleRect(-74.092662,42.765555,-73.668898,42.856420);{fs}catch(exception{}//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthecolumns//tobereturned.AssumeqpistheQueryParamsobject.AssumemyLayerisaLayer//object.DoublePointdp=newDoublePoint(12.3456,-67.890);{fs=}catch(exception{}==>//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthecolumnsto//be returned.AssumeqpistheQueryParamsobject.AssumemyLayerisaLayer//object.Assumeattristheattributetosearchagainst.AssumecolNameisthecolumnto//searchagainst.{fs}catch(Exception{return}privatebooleanlayerSearchByPrimaryKey(){//AssumefsisaFeatureSetobject.AssumecolumnNamesisavectorofthe//columnstobereturned.AssumeqpistheQueryParamsobject.AssumemyLayer//isaLayerobject.AssumecolNameisthecolumntosearchagainst.Assumepkisa//PrimaryKeyfromaprevioussearch.PrimaryKey[]arraypk=newPrimaryKey[1];arraypk[0]=pk;{fs=}catch(Exception{returnfalse;}return}}eatureFactoryFeaturesearchFeatureSet。AnnotationAnnotationtMapJ,AnnotatinFeaturePrimaryKeyAnnotationFeatureFeatureFactoryFeatureMapJNumericCoordSys。JDBCMapXtremeJavarollback。addFeatureSet,F(xiàn)eaturesFeatureFeatureFeaturePrimaryKeyOracle8iSpatial,IUSwithSpatialWareDataBlade和DB2withSpatialwareExtender1)Oracle8iPrimaryKey1n;FeaturePrimaryKey,F(xiàn)eaturePrimaryKey2)IUSwithSpatialWareDataBladeIUSSW_MEMBERPrimaryKey;PrimaryKey1到n;使用addFeature和receFeature時(shí)都不用指定PrimaryKey,即使指定了,也被忽略addFeature時(shí)不會(huì)返回PrimaryKey。3)DB2withSpatialExtenderPrimaryKeyExtenderPrimaryKey1n;使用addFeature和receFeature時(shí)都不用指定PrimaryKey,即使指定了,也被忽略;PrimaryKey,PrimaryaddFeaturePrimaryKey投影進(jìn)行,TableDescHelperFeatureRendition或LabelRendition的字段,MapXtremeMapXtremeRendtionRenditionType.mapxtremeRenditionType.mapbasicFeature(addFeature)時(shí),如果Rendition字段的類(lèi)型是RenditionType.mapbasic,保存時(shí)該字段將是null若使用receFeature,MapXtremeJava RangedTheme:按數(shù)據(jù)將地圖分組調(diào)整顯 RangedThemeIndividualvalueThemeAddThemeBeanRenditionOverrideTheme,//AssumemyLayerisaLayer//AssumemyRendisaRenditionOverrideThememyOTheme=newOverrideTheme(myRend,"MyTheme");//AssumelayerasaLayerobjectVectorv=newVector();DoublePointdp=newDoublePoint(x,y);FeatureSetfs=null;//Selectafeatureatthespecifiedlocationfs=layer.searchAtPoint(v,dp,null);//CreateaSelectionThemeselTheme=new//CreateaSelectionobject,andaddtheselectedfeaturesSelectionsel=newSelection();//AssigntheSelectionobjecttotheSelectionTheme//AssignthedisystyleoftheSelectionThemeRenditionrend=RenditionImpl.getDefaultRendition();rend.setvalue(Rendition.FILL,Color.red);//AddtheSelectionThemetothelayer'slistofthemes顯示。MapXtremeLayerRenditionyellow=RenditionImpl.getDefaultRendition();Renditionred=RenditionImpl.getDefaultRendition();lyr=m_map.getLayers().getLayer("States.tab");StringcolName="Pop_1990";ColumnStatisticscolStats//SetnumberofbreaksfordataintnumBreaks=5;//Computethedistributionofdatawith5breaks//EqualVectorrBreaks= //Setuparedandayellowrenditionand//spreadthecolorsyellow.setvalue(Rendition.FILL,Color.yellow);yellow.setvalue(Rendition.STROKE_WIDTH,2);red.setvalue(Rendition.FILL,Color.red);red.setvalue(Rendition.STROKE_WIDTH,4);Vectorrends=LinearRenditionSpreader.spread(numBreaks,yellow,//CreateThemeRangedThemerTheme=newRangedTheme(colName,rBreaks,rends,"StatesbyPop_1990//GetThemeListclassobjectThemeList//AddthemetoLayersthemeListfetchColumnStatisticsColumnStatisticsBucketerColumnStatisticsisticsDISTRIBUTION_TYPE_EQUAL_COUNT(等個(gè)數(shù)DISTRIBUTION_TYPE_EQUAL_RANGES(等范圍DISTRIBUTION_TYPE_STANDARD_DEVIATION(標(biāo)準(zhǔn)差):以中間值為中心將范圍上標(biāo)準(zhǔn)差分布ditionVector。RangedThemeRendition,//SetuptheVectorrBreaks=newVector();rBreaks.addElement(newAttribute(1));rBreaks.addElement(newAttribute(5));rBreaks.addElement(new//SetuptherenditionsVectorrends=newVector();//CreatearangedthemeRangedThemerTheme=newRangedTheme(themeCol,rBreaks,rends,"Statesby//Assignthemetolayersaselement1//Drawthe//Create poser poser.create(myMap,256,//CreateaMapXtremeImageRendererrenderer=newMapXtremeImageRenderer("http://Renderthemap//Renderthemaptothefile//getareferencetothelayerwewillbeapplyingthemetolyr=lyrs.add(dpr,ttdh,"Territories");//createanewthemeIndividualvalueThemeiValThm=newIndividualvalueTheme("CoverageTerritory","SalesCoverageBreakdown");//createaRendition//assigncolortorenditionaddnrend.setvalue(Rendition.FILL,iValThm.add(newAttribute("SouthWest"),//assigncolortorenditionaddattributerend.setvalue(Rendition.FILL,iValThm.add(newAttribute("SouthEast"),//assigncolortorenditionaddattributerend.setvalue(Rendition.FILL,iValThm.add(newAttribute("Central"),//Addthethemetolayersthemelist//StorecolumnnameandtypeinHashtableht=newHashtable();//Createnewlegendpassingthemeandhashtable.ThesetThemeTitle.IndividualvalueThemeLegendiValThmLeg;iValThmLeg=newIndividualvalueThemeLegend(iValThm,ht);iValThmLeg.setTitle("CovergeTerritorylegend");//GenerategifimagefromlegendiValThmLeg.toFile("c:\\temp\\terrLeg.gif","image/gif");theme.setLegend。ThemerendsasaRenditioncolNameasarBreaksasabreakPointsRangedThemerTheme=newRangedTheme(colName,rBreaks,rends,"Statesby//CreateadefaultRangedThemeLegendrThmLeg//OR,Createathemelegendinstanceusingthemeandsetting//AddthemesettingstohashtableHashtableht=newHashtable();RangedThemeLegendrThmLeg=newRangedThemeLegend(rTheme,ht);//SetlegendtitlerThmLeg.setTitle("RangedThemelegend");//sendlegendtoimagefilerThmLeg.toFile("c:\\temp\\rangeLeg.gif","image/gif");LegendContainerBeanVisualMapJBean如果專(zhuān)題圖改變,LegendContainerBeannfo.legend.CatographicLegend//AssumemapJisalreadyLayerlandmarks=//createthelegendwithtitle"StateLandmarks"CartographicLegendlegend=newCartographicLegend("Staandmarks");//PerformasearchAll()onthelayertogetits//FeatureSet-needtomakesurewefetchthecolumn//wewanttolabelwithinthelegendVectorcolumns=newVector();FeatureSetfs=landmarks.searchAll(columns,//addtheFeatureSettothelegend,andspecifythat//wanttolabeleachfeature'srenditionwiththevalueinthe"Name"columnlegend.addFeatureSet(fs,"Name");//alwaysdisposeofFeatureSetonceyou'redonewithAddThemeBeanVisualMapJAddThemeBeansetVisualMapJ(VisualMapJ)來(lái)指定。BeanDataBindingDataProviderHelper,DataBindingDataProviderHelperLayersTABDataProviderHelpertabDPH=newJDBCDataProviderHelperjdbcDPH=newJDBCDataProviderHelper("jdbc:oracle:thin:@localhost:1521:sid",user,pass,"oracle.jdbc.driver.OracleDriver");DataBindingDataProviderHelperdbDPH=newDataBindingDataProviderHelper(tabDPH,jdbcDPStringtabCols=StringjdbcCols=TABTableDescHelpertabDesc=newJDBCTableDescHelperjdbcDesc=newJDBCTableDescHelper("STATES",null,DataBindingTableDescHelperdbDesc=newDataBindingTableDescHelper(tabDesc,jdbcDesc,tabCols,jdbcCols);DataProviderRefdpRef=newMapXtremeDataProviderRef(dbDPH,mapXtremeURL);Layerlyr=mapj.getLayers().add(dpRef,dbDesc,"DataBinding");sumcountaverage求平均 um求最大MapXtremeCompositeRender。通過(guò)它可以僅僅將某些需要改變的圖層重畫(huà)刷創(chuàng)建一個(gè)臨時(shí)圖層(Annotaion)CompositeRender車(chē)輛象GPS之類(lèi)的應(yīng)用,可以將地圖繪制一次,每次GPS數(shù)據(jù)更新時(shí),只重畫(huà)車(chē)輛的位置CompositeRender640x4802.7tryThemapjisoftypeMapJandhasloadedaThereqisoftypeTheresisoftypeThedpisoftype//Addannotationlayer-thislayerwillconsistofoneimagesymbolto"animAnnotationTableDescHelperatdh=newAnnotationTableDescHelper("Animation_Layer");AnnotationDataProviderHelperadph=newAnnotationDataProviderHelper();LocalDataProviderRefldpr=newLocalDataProviderRef(adph);//AddtheannotationLayeranimate_layer=mapj.getLayers().insert(ldpr,atdh,0,//CreatetherenditionfortheRenditionr=RenditionImpl.getDefaultRendition();r.setvalue(Rendition.SYMBOL_URL,"file:///C:/images/car.gif");//CreatetheFeatureFactoryff=//AnarraycontainingasingleintAttributeAttribute[]aAIntAttribute={newAttribute(33)};//createanewPrimaryKeyananintegerPrimaryKeypkey=newPrimaryKey(aAIntAttribute);Featuref=ff.createPoint(dp,r,aAIntAttribute,pkey);PrimaryKeypk=animate_layer.addFeature(f);//Create poser poser.create(mapj,256,CreatethecompositerendererRendertheimageStreamtheimagebacktotheCompositeRenderercompositeRenderer=newCompositeRenderer("pxtreme40/servlet/mapxtreme";,0);ServletOutputStreamsos=res.getOutputStream();//Setthisattributetofalsesothatthebottomimageisnotrenderednextti}catch(Exceptione)//Takeappropriateerrorhandling}在地圖中添加空間地圖圖層首先要定義LayerLayerDataProvider。LayerDataProvider,它不是直接由用戶創(chuàng)建的,但是它的描述確實(shí)定義一DataProviderTableDescHelper–DataProviderHelper–DataProviderRef–MapXtreme提供一系列DataProvider,可以如下類(lèi)型的數(shù)據(jù)MapInfotabformatOracle8iwithSpatialInformixUniversalServerSpatialWareDB2SpatialWareJDBCcompatibletablescontaininglongitudeandlatitudeGeoTIFFandMIGridShapefilesDataBindingAnnotationMapXtreme不同數(shù)據(jù)的示意圖 s如:MapInfoTable需要使用TABTableDescHelper,需要table名字參數(shù)。對(duì)于Oracle8i數(shù)據(jù)OraSoTableDescHelper,需要表名或SQL 的數(shù)據(jù)源,源就是.tab。Oracle8iOraSoDataProviderHelper Provider由MapXtremeServlet創(chuàng)建。所有數(shù)據(jù)的組件可以放在中間層MapXtremeServlet處,這樣客戶端就不必都安裝JDBC驅(qū)動(dòng)。這是一個(gè)典型的三次應(yīng)用:應(yīng)用,數(shù)據(jù)處理邏輯,數(shù)據(jù)。注意:何時(shí)數(shù)據(jù)rgetTableInfo,searchrenderLayers.addLayers.insertDataProviderHelpersDataSourceMapInfoTablesOracle8iwithSpatialOptionInformixUniversalServerSpatialWareDataBladeDB2SpatialWareExtenderJDBCcompatibletablescontaininglongitudeandlatitudecolumnsAnnotationLayersGeoTIFFRasterShapefilesDataBinding1ImageIO**Oracle8iOracle8iDataProvider//specifytheurltotheMapXtremeservletwhichremoyconnectsustothemap//engineStringmapXtremeURL= //CreatetheRemoteDataproviderneededtoaccessthe//Usingpooledconnections mended)//UsingDatabasespecificOraSoDataProviderHelperoraSoDPHelper=newOraSoDataProviderHelper("databasename",1000,"DBsid","tester","tester",DriverType.thin);//CreateaStringarraywiththename(s)ofthecolumn(s)touseasauniquekeyforrecordsintheTableNameString[]idColumn=//NowcreateaTableDesc//ThiscodeusestheConstructorrequiredwhenusingaOraSoTableDescHelperoraSoTDHelper=newOraSoTableDescHelper("STATES",false,idColumn,"S_GEOMETRY",null,RenditionType.none,null,RenditionType.none,CoordSys.longLatWGS84,//ThiscodeusestheConstructorrequiredwhenusingaQueryOraSoTableDescHelperoraSoTDHelper=newOraSoTableDescHelper("SelectS_MEMBER,S_GEOMETRY,POP_1990FromSTATESWhereSTATE='NY'",idColumn,"S_GEOMETRY",null,RenditionType.none,null,RenditionType.none,CoordSys.longLatWGS84,2);//CreatetheRemoteDataproviderneededtoaccesstheMapXtremeDataProviderRefmxtDPRef=newMapXtremeDataProviderRef(oraSoDPHelper,mapXtre//assignittoMapJ-notegetLayers()m_myMap.getLayers().add(mxtDP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 硫磺裝置施工方案(3篇)
- 職業(yè)衛(wèi)生行業(yè)分級(jí)管理制度(3篇)
- 裝飾工程資料采購(gòu)管理制度(3篇)
- 趣味南瓜活動(dòng)方案策劃(3篇)
- 院內(nèi)制劑物料管理制度(3篇)
- 齊魯石化7-1管理制度(3篇)
- 銀行內(nèi)部控制審計(jì)制度
- 醫(yī)院醫(yī)療質(zhì)量與安全管理委員會(huì)工作制度
- 醫(yī)院醫(yī)療服務(wù)投訴處理制度
- 醫(yī)院患者隱私保護(hù)制度
- 研學(xué)旅行指導(dǎo)手冊(cè)
- 大學(xué)生社會(huì)支持評(píng)定量表附有答案
- 植入式靜脈給藥裝置(輸液港)-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)2023
- GB/T 2988-2023高鋁磚
- 東風(fēng)7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊(cè)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- DFMEA編制作業(yè)指導(dǎo)書(shū)新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測(cè)技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
評(píng)論
0/150
提交評(píng)論