أكثر

الحصول برمجيًا على خصائص مصدر الطبقة DataType مع ArcObjects؟

الحصول برمجيًا على خصائص مصدر الطبقة DataType مع ArcObjects؟


أحاول الوصول إلى خاصية DataType للطبقة في جدول المحتويات في ArcMap. تتم إضافة الطبقة من خدمة ويب كطبقة IMapServerRESTLayer. يتم سرد خاصية نوع البيانات معطبقة -> خصائص -> مصدركما في لقطة الشاشة التالية.

تحتوي طبقة الخريطة على نوع طبقة IComposite. إنها خريطة أساس.

الأشياء التي جربتها.

لا يمكن اعتباره طبقة IFeatureLayer. لقد ألقيت نظرة على مخطط نموذج كائن كارتو ، ولا يمكنني العثور على خاصية DataLayer على أي شيء باستثناء IMobileLayerInfo. و ServiceDataType مشابه على IImageServerLayer. حاولت إنشاء واجهة يلقي نحو هذه الكائنات لكنها فشلت.

تم النظر في استخدام أوراق IComProperty ... وتمكنت من إنشاء نسخة غير مأهولة ولكن أعتقد أن هذا ليس هو السبيل للذهاب.

أنا أبرمج في VB.Net (لكن يمكنني قراءة C #) في ArcGIS 10.2 باستخدام VS2010

أيه أفكار؟


هذا هو الكود الذي كنت أستخدمه لاختبار استرداد الطبقة واختبارها. هذه هي طريقة النقر لزر أمر داخل ArcMap Addin. إنه جزء من شريط أدوات أكبر. هناك تعليقات على نتائج أجزاء مختلفة من الكود.

تجاوزات محمية Sub OnClick () Const csProceedureName As String = "cmdListBaseMap_OnClick" MsgBox ("In" & csProceedureName & vbNewLine & My ThisAddIn.Name & vbNewLine & "Version" & My ThisAddIn.Version & vbNewLine. & "التاريخ ThisAddIn.Date) جرب تطبيق Dim كـ IApplication Dim pMxDoc كـ IMxDocument Dim pMap كـ IMap خافت عرض كـ IActiveView Dim resturl كـ String 'resturl = "http://services.thelist.tas.gov.au/arcgis/rest/services/Basemaps /Topographic/ImageServer/؟f=lyr&v=9.3 "'v1' يعمل resturl =" http://services.thelist.tas.gov.au/arcgis/rest/services/Basemaps/Topographic/ImageServer/؟f=lyr " 'v2' Works 'resturl = "http://services.thelist.tas.gov.au/arcgis/services/Basemaps/Topographic/ImageServer" لا يعمل' v3 '، لا يترك اتصالاً' حدثت مشكلة في الحصول على واجهة العمل. 'بالإضافة إلى كارتو ، يلزم تضمين ESRI.ArcGIS.DataSourceRaster Dim RESTLayer كـ IMapServerRESTLayer RESTLayer = New MapServerRESTLayer Dim pLayer كـ ILayer Dim pFLayer As IFeatureLayer Dim pGenProperties As ILayerGeneralProperties Mouse_cursor As ILayerCursor. ArcMap.Application pMxDoc = pApp.Document pMap = pMxDoc. au / arcgis / rest / services / Basemaps / Topographic / ImageServer /؟ f = json "طلب خافت كـ HttpWebRequest = DirectCast (HttpWebRequest.Create (request_json_url)، HttpWebRequest) استجابة باهتة كـ HttpWebResponse = DirectCast (request.GetRequest.Create (request_json_url)، HttpWebRequest) ("إجراء الاختبار" & response.StatusCode.ToString & "" & response.StatusDescription & "" & HttpStatusCode.OK.ToString) If response.StatusCode = HttpStatusCode.OK ثم الاتصال والاستجابة se OK 'MsgBox ("رمز الحالة" & response.StatusCode & vbNewLine & "وصف الحالة" والاستجابة. .Encoding = System.Text.Encoding.GetEncoding (response. للتحقق من الاتصال ، فإن محاولة المصبوب تقوم بمعالجة استثناء "Dim wc As WebClient = New WebClient 'Dim response_client As String' response_client = wc.DownloadString (request_json_url) 'MsgBox (response_client)' احصل على خريطة الأساس RESTLayer.Connect (resturl) RESTLayer.TransparentBackground ( صحيح) 'هذا المصبوب يعمل pLayer = TryCast (RESTLayer ، ILayer) إذا كان pLayer لا شيء ثم MsgBox ("Cast from MapServerRESTLayer إلى Ilayer فشل") آخر MsgBox ("Cast from MapServerRESTLayer إلى Ilayer OK") End If' Dim pDataLayer As IDataLayer " هذا المصبوب يعمل 'pDataLa yer = TryCast (RESTLayer ، IDataLayer) 'If pDataLayer Is Nothing ثم' MsgBox ("Cast from MapServerRESTLayer إلى IDataLayer فشل") 'Else' MsgBox ("Cast from MapServerRESTLayer إلى IDataLayer OK -" & pDataLayer.DataSource.NameString & " ) فشل إرسال 'الاسم فارغًا': لذلك لا يوجد مسار إلى IIMageserver 'Dim pServerLayer As IImageServerLayer' pServerLayer = TryCast (pDataLayer ، IImageServerLayer) 'إذا لم يكن pServerLayer شيئًا إذًا' MsgBox ("Cast from MapServerRESTLayer IImage) آخر 'MsgBox ("Cast from MapServerRESTLayer إلى IDataLayer إلى IImageServerLayer OK" & pServerLayer.ServiceInfo.ServiceDataType.ToString)' End If 'End If "فشل هذا المصبوب' Dim pServerLayer As IImageServerLayer 'pServerLayer = Is Nothing then 'MsgBox ("Cast from MapServerRESTLayer to IImageServerLayer فشل")' Else 'MsgBox ("Cast from MapServerRESTLayer to IImageServerLayer OK" & pServerLayer.ServiceInfo.ServiceDataType.ToStr ing) 'End If "فشل هذا المصبوب أيضًا' Dim pServerLayerA As IImageServerLayer 'pServerLayerA = TryCast (pLayer ، IImageServerLayer)' إذا كان pServerLayerA لا شيء إذًا 'MsgBox (" Cast from ILayer to IImageServerLayer فشل ")' Else ' ILayer to IImageServerLayer OK "& pServerLayerA.ServiceInfo.ServiceDataType.ToString) 'End If' فشل هذا التسلسل المصبوب في أول cast 'Dim pMapServerLayer As IMapServerLayer' pMapServerLayer = TryCast (RESTLayer، IMapServerLayer) ' من MapServerRESTLayer إلى IMapServerLayer فشل ") 'Else' MsgBox (" Cast from MapServerRESTLayer إلى IMapServerLayer OK ") 'Dim pImageServerLayerC As IImageServerLayer' pImageServerLayerC = TryCast (pLayer، IImageServer) فشل IImageServerLayer ") 'Else' MsgBox (" * Cast from IMapServerLayer إلى IImageServerLayer OK "& pImageServerLayerC.ServiceInfo.ServiceDataType.ToString) 'End If' En d إذا 'cast failed' Dim ImageServiceInfo As IImageServiceInfo 'ImageServiceInfo = TryCast (pLayer ، ImageServiceInfo)' إذا لم يكن ImageServiceInfo شيئًا إذًا 'MsgBox ("فشل إرسال من ILayer إلى IImageServiceInfo")' Else 'من MsgBayer ("IImageServiceInfo) & vbNewLine & _ '"نوع بيانات الخدمة" & ImageServiceInfo.ServiceDataType & vbNewLine & _' "نوع مصدر الخدمة" & ImageServiceInfo.ServiceSourceType & vbNewLine & _ '"خصائص الخدمة الافتراضية" & ImageServiceInfo.DefaultServiceProperties' End) إرجاع الوصف "هذا يؤدي إلى إرجاع سلسلة مع" "خريطة قاعدة تسمانيا الطبوغرافية" ، "خدمة الويب LIST" للخدمات والشروط ، راجع عنوان URL للخدمات والتشكيلات pdf "pGenProperties = TryCast (pLayer ، ILayerGeneralProperties) 'إذا لم تكن pGenProperties شيئًا إذًا' MsgBox ("لا توجد خصائص عامة") 'Else' MsgBox ("Properties -" & pGenProperties.LayerDescription & "-") 'End If "هذا المصبوب يعمل' Dim pCompositeLayer As ICompositeLayer2 'pCompositeLayer = Tr yCast (pLayer ، ICompositeLayer2) 'إذا كان pCompositeLayer لا شيء إذًا' MsgBox ("Cast from ILayer to ICompositeLayer فشل") 'Else' MsgBox ("Cast from ILayer to ICompositeLayer OK" & pCompositeLayer.Count.ToString) 'End If "هذا cast يعمل أيضًا 'Dim pCompositeLayerA كـ ICompositeLayer2' pCompositeLayerA = TryCast (RESTLayer ، ICompositeLayer2) 'إذا كان pCompositeLayerA لا شيء إذًا' MsgBox ("فشل Cast from ReST إلى ICompositeLayer") 'Else' MsgBox ("Cast from REST إلى IComayer. Count.ToString) 'End If' أضف طبقة لتعيين pMap.AddLayer (pLayer) pView.Refresh () 'كلا الإصدارين من الطبقة المستوردة هما ILayer و IDataLayer و ICompositeLayer MsgBox ("player" & pLayer.Name & "من النوع & LayerType (pLayer)) MsgBox ("RESTLayer" & pLayer.Name & "من النوع" & LayerType (pLayer)) pMxDoc.ActiveView.Refresh () MsgBox ("طبقة الخريطة الأساسية" & pLayer.Name & "كان مضاف ") Else MsgBox (" ERROR ("& csProceedureName &") "& response.StatusCode & vbNewLine & response.StatusDescri ption) End If Mouse_cursor.SetCursor (0) Catch ex كاستثناء MsgBox ("Error" & ex.Message) End حاول End Sub Protected Overrides Sub OnUpdate () End Sub Public Function LayerType (ByVal pLayer As ILayer) كطبقة إرجاع سلسلة النوع & "&" IACImageLayer "End If TypeOf pLayer Is IACFeatureLayer ثم LayerType = LayerType &" "&" IACFeatureLayer "End If إذا كانت TypeOf pLayer هي IACFeatureLayer ثم LayerType = LayerType &" "&" IACFeatureLayer "End If Is TypeOf payer ثم LayerType = LayerType & "" & "IACLayer" End If If TypeOf pLayer Is IAnnotationLayer ثم LayerType = LayerType & "" & "IAnnotationLayer" End If إذا كانت TypeOf pLayer IAnnotationSublayer ثم LayerType = LayerType & "" & "IAnnotationLayer" نوع من pLayer هو ICadastralFabricLayer ثم LayerType = LayerType & "" & "ICadastralFabricLayer" End If إذا كان TypeOf pLayer هو ICadLayer ثم LayerType = LayerType & "" & "ICadLayer" إذا كانت الطبقة TypeOf هي ICompositeGraphicsLayer ثم LayerType & "LayerType &" End If إذا كانت TypeOf pLayer هي ICompositeLayer ثم LayerType = LayerType & "" & "ICompositeLayer" End If إذا كانت TypeOf pLayer هي ICoverageAnnotationLayer ثم LayerType = LayerType & "&" ICoverageAnnotationLayer "End If TypeOf pLayer =" LayerType = LayerType & "&" ICoverageAnnotationLayer " & "IDataLayer" End If إذا كانت TypeOf pLayer هي IDimensionLayer ثم LayerType = LayerType & "" & "IDimensionLayer" End If If TypeOf pLayer Is IFDOGraphicsLayer ثم LayerType = LayerType & "" & "IFDOGraphicsLayer" End If TypeOf pLayer = IFDOGraphicsLayer " LayerType & "" & "IFeatureLayer" End إذا كانت TypeOf pLayer هي IGdbRasterCatalogLayer ثم LayerType = LayerType & "" & "IGdbRasterCatalogLayer" End If TypeOf pL ayer هو IGeoFeatureLayer ثم LayerType = LayerType & "" & "IGeoFeatureLayer" End If If TypeOf pLayer Is IGraphicsLayer ثم LayerType = LayerType & "" & "IGraphicsLayer" End If إذا كانت طبقة TypeOf هي IGroupLayer ثم LayerType = LayerType & "" & " End If إذا كانت TypeOf pLayer هي IIMSMapLayer ثم LayerType = LayerType & "" & "IIMSMapLayer" End If إذا كانت TypeOf pLayer هي IIMSSubLayer ثم LayerType = LayerType & "" & "IIMSSubLayer" إذا كانت طبقة TypeOf هي IImageServerTayer ثم & "IImageServerLayer" End If TypeOf pLayer هو IImageServerLayer2 ثم LayerType = LayerType & "&" IImageServerLayer2 "End If TypeOf pLayer هو IImageServerLayer3 ثم LayerType = LayerType &" "&" IImageServer LayerType & "" & "IMapServerLayer" End If إذا كانت TypeOf pLayer هي IMapServerSublayer ثم LayerType = LayerType & "" & "IMapServerSublayer" End إذا كانت طبقة TypeOf هي طبقة الشبكة ثم LayerType = LayerType & "" & "INetworkLayer" End إذا كانت TypeOf pLayer هي IRasterCatalogLayer ثم LayerType = LayerType & "" & "IRasterCatalogLayer" End If إذا كانت TypeOf pLayer هي IRasterLayer ثم LayerType = LayerType & "" & "IRasterLayer" End If إذا كانت TypeOf pLayer ITporaryLayer ثم LayerType = LayerType & "" & "IT إذا كانت TypeOf pLayer هي ITopologyLayer ، فإن LayerType = LayerType & "" & "ITopologyLayer" End If إذا كانت TypeOf pLayer هي IWMSGroupLayer ثم LayerType = LayerType & "" & "IWMSGroupLayer" End If TypeOf pLayer Is IWMSLayer ثم LayerType & " IWMSLayer "End If إذا كانت TypeOf pLayer هي IWMSMapLayer ثم LayerType = LayerType &" "&" IWMSMapLayer "End If 'Else' LayerType =" UnKnown "'End If End Function

يمكنني التحقق من عنوان URL في اللقطة الخاصة بك والقول إن الطبقة التي تحاول العمل بها هي طبقة ImageServer.

http://services.thelist.tas.gov.au/arcgis/rest/services/Basemaps/Topographic/ImageServer

لا يمكنك الوصول إلى طبقة خادم الصور كطبقة معالم.

يمكنك فقط الوصول إلى طبقات خادم الخريطة التي تم تمكين "الوصول إلى المعالم" عليها ، كطبقة معالم. (على سبيل المثال ، قم بإرسالها إلى IFeatureLayer)


شاهد الفيديو: Layers Creation in ArcGIS P1 انشاء الطبقات ببرنامج الارك جي اي اس ج1