Mai mult

ArcObjects .NET - Cum se închide / se eliberează FeatureClass, Workspace, Factory

ArcObjects .NET - Cum se închide / se eliberează FeatureClass, Workspace, Factory


Am un proces de lungă durată. Vreau să previn scurgeri de resurse sau conexiuni de baze de date necinstite.

La intervale de timp pe parcursul procesului, vreau să fac acest lucru:

  1. obțineți o fabrică de spații de lucru ArcSDE (Oracle)
  2. deschideți un spațiu de lucru din fabrică (moment în care obțin o conexiune deschisă la baza de date)
  3. obțineți o clasă de caracteristici sau un tabel existent pe spațiul de lucru,
  4. interogați clasa de caracteristici sau tabelul, buclați cursorul peste afacerea mea
  5. apoi eliberați / închideți tot așa încât:

    • Conexiunea bazei de date și blocarea tabelelor din perspectiva ArcSDE / Oracle (așa cum este dezvăluit de ceva de genul „sdemon -o info -I users” sau o interogare a tabelului sde.table_locks) este închisă / lansată.
    • procesul este rezistent la repornirea ArcSDE / Oracle (adică nu las ceva suspendat care nu va funcționa mai târziu după repornirea nocturnă)
    • Orice referință RCW, COM și memorie sunt eliberate.

Practic, datorită naturii de lungă durată a procesului, Vreau să fiu sigur că nu am scurgeri de resurse sau conexiuni necinstite, iar procesul meu poate supraviețui repornirii ArcSDE / Oracle.

Am văzut discuții precum:

Și asta, din care citez

Fiecare fabrică de spații de lucru menține un grup de spații de lucru active conectate în prezent, la care se referă aplicația. Când se apelează oricare dintre metodele Open * listate anterior, fabrica spațiului de lucru verifică dacă un spațiu de lucru a fost deschis anterior cu un set de proprietăți potrivite. Dacă da, se returnează o referință la instanța existentă.

Toate acestea îmi sugerează că eu ar trebui să release (de exemplu, clasa ComReleaser sau echivalentul Marshal.ReleaseComObject () loop), probabil în această ordine:

  • cursor
  • featureclasă / masă
  • spațiu de lucru
  • fabrica de spații de lucru

Apoi, există discuții de genul acesta în care oamenii fac toate astea și poate chiar stropesc în System.GC.Collect () și conexiunea lor la baza de date încă trăiește.

Oh, guru, care este ultimul drog pe acest subiect?


Ați acoperit deja multe aspecte în postarea dvs. Cu toate acestea, pentru a vă extinde întrebarea, urmați întotdeauna acest model:

if (obj! = null) ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject (obj); obj = nul;

Apoi sunațiSystem.GC.Collect ()pentru a forța colectorul de gunoi să elimine orice referințe la SGBD.

Ordinea de lansare trebuie să fie Cursori, Caracteristici (IFeature), FeatureClasses, Workspaces și alte ArcObjects instanțiate.

Aplicația ArcGIS Desktop și ArcEngine sunt STA (aplicație cu fir unic). Nu este nici sigur, nici sfătuit să utilizați ArcObjects pe fire (Workers); Se poate folosi serializarea și deserializarea obiectelor pentru a realiza acest lucru. Pentru mai multe detalii, aruncați o privire aici.


Recuperarea fabricii din clasa COM pentru componentă cu CLSID nu a reușit din cauza următoarei erori: 80040154

Am dezvoltat un serviciu Windows folosind C # .NET pentru a genera un raport PDF. Pentru a genera fișier PDF folosesc o terță parte dll. Aplicația rulează pe platforma mea Windows XP. Când am implementat serviciul în versiunea Windows Server 2008 pe 64 de biți, am primit această eroare:

Preluarea fabricii din clasa COM pentru componentă cu CLSID <46521B1F-0A5B-4871-A4C2-FD5C9276F4C6> nu a reușit din cauza următoarei erori: 80040154.

Am înregistrat DLL folosind comanda regsvr32. Pot vedea acest CLSID în registru. Dar problema persistă.

Care ar putea fi problema?


ArcObjects .NET - Cum se închide / se lansează FeatureClass, Workspace, Factory - Sisteme de informații geografice

ArcObject .Net cu VS 2013

Vă rugăm să luați acest depozit ca o notă pentru a vă ghida prin configurarea, depanarea și dezvoltarea AO.

Lecția 1: Configurare mediu și depanare

OK, să începem primul nostru proiect AO în VS2013! În bara de meniu: FILE - & gt New Project, apoi deschideți structura arborelui din panoul din stânga din dialogul de deschidere, găsiți Visual C # - & gt ArcGIS - & gt Desktop Add-ins - & gt ArcMap Add-in.

În Asistentul de completare ArGIS, asigurați-vă că bifați opțiunea „Buton” din Tipurile de completare. Aceasta va crea un șablon al unui buton de control pentru ArcMap. Ar trebui să puteți găsi un fișier cs cu numele „Button1.cs”. Vă rugăm să înlocuiți acest fișier cu activat aici. Înainte de a construi butonul de control, deschideți Soultion Explorer al VS 2013, faceți clic dreapta pe numele proiectului și alegeți proprietăți. Verificați dublu 2 locuri:

  1. Cadrul țintă din secțiunea Aplicație ar trebui să fie „.NET Framework 4”
  2. În secțiunea Depanare, asigurați-vă că „Porniți programul extern” este setat ca program ArcMap

Încă sub Solution Explorer, faceți clic dreapta pe Referințe și alegeți „Adăugați referințe ArcGIS”. Avem nevoie de următoarele două referințe pentru a construi această soluție. Acestea nu sunt incluse în acest șablon implicit:

Acum sunteți gata să construiți soluția! Înainte de a face acest lucru, mai avem ceva de menaj pe ArcMap. Accesați folderul de instalare ArcMap, de obicei se află la: C: Program Files (x86) ArcGIS Desktop10.3 bin, găsiți un fișier numit "ArcMap.exe.config". Deschideți-l cu privilegiu de administrator. Este un fișier XML și căutați în următoarea secțiune aflată în partea de sus a fișierului:

În mod implicit, ArcMap este configurat să ruleze împotriva .Net Framework Runtime 2.0, care este un conflict cu butonul de control pe care urmează să îl construim în VS 2013. Comentează această linie și decomentează linia de mai sus pentru a activa .Net Framework Runtime 4.0 pentru ArcMap . OK, acum ar trebui să îl puteți construi fără nicio problemă. Pentru a ne asigura că suntem pe aceeași pagină pentru următoarea secțiune, vă rugăm să verificați fișierul „config.esriaddinx”. Puteți găsi acest fișier în Solution Explorer. Iată ce am (am eliminat secțiunile fără legătură)

Ne oferă un rezumat bun asupra instrumentului pe care tocmai l-am construit. Numele său este „ArcMapAddin1” și ținta este împotriva ArcMap 10.3 care rulează împotriva .Net Framework Common Lauguage Runtime 4.0. Acest buton de control a primit titlul „Butonul meu” și a fost clasificat la „Controale de completare”. Țineți cont de acestea, veți avea nevoie de ele mai târziu.

Dacă facem clic pe butonul „Start” cu săgeată verde în VS2013, ar trebui să puteți vedea că ArcMap începe. VS2013 va face toate lucrurile murdare pentru noi: invoca ArcMap 10.3 și atașează depanatorul la procesul său, încarcă toate simbolurile necesare din diferite asamblări pentru a facilita depanarea. Suntem apoi gata să depanăm!

Puteți pune un punct de întrerupere pe orice linie de sursă în Button1.cs, dar nu se întâmplă nimic, nu? Acest lucru se datorează faptului că acest control este o componentă UI și necesită utilizatorului să facă clic pe acesta pentru a invoca orice acțiune. Deci, unde este butonul nostru? Nu este pe interfața de utilizare! Ei bine, este foarte incomod și ESRI poate face o treabă mai bună adăugând automat butonul pe bara de instrumente în timpul depanării.

Oricum, va trebui să facem această mana. Va trebui să accesați Customize - & gt Add-In Manager, ar trebui să puteți vedea butonul nostru sub „Completele mele”, datorită ESRI! Numele ar trebui să se potrivească cu numele din config.esriaddinx, fișierul XML pe care vă rog să-l acordați atenție.

Apoi, faceți clic pe butonul „Personalizați”, în fila Bare de instrumente, puteți crea o nouă bară de instrumente pentru a ne menține activitatea. Am creat unul numit „Monkeybar”, îl puteți numi oricum, asigurați-vă că nu le va duplica pe cele existente în ArcMap. Comutați la fila Comenzi, panoul din stânga listează toate categoriile disponibile, vă amintiți ce v-am spus să vă amintiți? Numele categoriei este „Controale de completare”! Dacă faceți clic pe el, în partea dreaptă, ar trebui să puteți vedea „Butonul meu” ca comandă.

Acum puteți trage „Butonul meu” pe noua dvs. bară de instrumente! Următorul pas va fi adăugarea unor straturi pe hartă. Cel mai rapid mod de a face acest lucru este prin adăugarea unei hărți de bază care va aduce și sistemul de coordonate. Am ales ESRI World Topo. Are un tip de proiecție web Mercator. Puteți găsi fișierul meu mxd aici

Acum, dacă faceți clic pe buton (în mod implicit, este cu o pictogramă rotundă albastră), ar trebui să puteți vedea patru puncte rotunde roșii care apar pe cele patru colțuri ale hărții. Este posibil să fie nevoie să măriți pe deplin pentru a le vedea. Dacă puneți un punct de întrerupere la linia 59 a Button1.cs și faceți clic pe butonul nostru din ArcMap, execuția va fi suspendată și puteți face debug pas cu pas pe sursa Button1.cs din VS2013.

Este posibil să observați că majoritatea logicilor Button1.cs se află în afara funcției OnClick. Ce se întâmplă dacă doriți să depanați codul, să zicem, la linia 33? Ei bine, acea funcție se numește „controlorul implicit al clasei” și este invocată o singură dată când se face clic pe acest buton pentru prima dată. Pentru a depana codurile de acolo, va trebui să încheiem sesiunea de depanare curentă făcând clic pe butonul pătrat roșu din VS 2013, apoi să punem un nou punct de întrerupere la linia 33 și să o luăm de la capăt.

BTW, îmi poate spune cineva ce înseamnă linia 36? Pentru ce este secțiunea din partea dreaptă a semnului + =? Dacă nu știți, este timpul să treceți peste C # înainte de a trece la lecțiile viitoare.

Lecția 2: Faceți munca grea în afara ArcMap

Când Arcpy a fost lansat, unul dintre lucrurile interesante este că GISers are voie să efectueze munca de prelucrare a datelor fără a avea deschiderea ArcMap. AO vă permite să faceți acest lucru încă din prima zi, trebuie doar un pic mai mult efort de programare :)

În această sesiune, vom dezvolta o aplicație Windows pentru linia de comandă care poate rula fără implicarea ArcMap (Acest lucru nu este complet adevărat: dacă nu aveți licența ArcEngine, trebuie să aveți în continuare ArcMap instalat pe sistem pentru a putea rula pentru a obține accesul la licență). Oricum, haideți să închidem ochii, iar ArcMap pretențios este în afara radarului aici.

Pentru a face un caz distractiv, am decis să mă joc cu câteva date reale din baza de date pentru restaurarea Great Lakes. Prin interfața Map, puteți descărca toate proiectele GLRD în format csv. Vom lua această descărcare ca sursă de date. Fiecare rând al acestui fișier conține o înregistrare de proiect cu lat / lon, pe care o putem converti într-o clasă de caracteristici punct. Dacă sunteți GISer, probabil că ați făcut acest lucru de sute de ori, vă puteți întreba: care este partea distractivă a acestui lucru? În regulă, să adăugăm ceva distractiv: ce se întâmplă dacă vreau doar să extrag proiectul pentru statul Michigan? Ei bine, dacă mai aveți probleme să găsiți locul pentru descărcarea acestui fișier CSV, vă rugăm să faceți clic aici.

Să revenim la VS2013. FILE - & gt Project, în panoul din stânga din interiorul ferestrei Proiect nou: instalat - & gt Templates - & gt Visual C # - & gt ArcGIS, dacă faceți clic pe „Extinderea ArcObjects”, panoul central va afișa toate șabloanele disponibile, vă rugăm să alegeți „Console Application ( Desktop) ". Ar trebui să vedeți „Expertul de proiect ArcGIS” care apare, pe prima pagină, vom păstra totul ca implicit și vom face clic pe „Următorul”. Apoi, va trebui să alegeți tipul de licență pentru produsele dvs. ESRI, astfel încât programul să știe ce componente pot fi încorporate în programul dvs. Am ales „Avansat”, apoi fac clic pe Terminare pentru a încărca șablonul.

Dacă deschideți „Solution Explorer”, ar trebui să vedeți două fișiere CS create de ESRI. Vă rugăm să înlocuiți „Program.cs” cu aceasta. Din nou, înainte de a construi programul, va trebui să adăugați câteva referințe suplimentare. Vă reamintiți primul pas din „Expertul de proiect ArcGIS”? Te-am convins să nu treci, de fapt ai putea încărca referințe suplimentare acolo.

1.ESRI.ArcGIS.Version 2.ESRI.ArcGIS.Geodatabase 3.ESRI.ArcGIS.Geometry

Acum, ar trebui să puteți construi programul. Acest instrument ar trebui să ruleze sub linia de comandă cu două argumente:

C: DesktopConsoleApplication1.exe glrd.csv michigan

Primul argument este calea către fișierul CSV pe care tocmai l-ați descărcat, al doilea este numele statului. Dacă nu reușiți să alimentați aceste două argumente, programul se va termina imediat. Apoi, s-ar putea să întrebați: cum aș putea configura acest lucru insdie VS2013? În Solution Explorer, faceți clic dreapta pe proiect, apoi accesați „proprietăți”, în Debug, introduceți argumentele în „Argumente linie de comandă”. Procedând astfel, de fiecare dată când depanați programul, lucrurile pe care le puneți acolo vor fi alimentate.

Aceasta este o aplicație „independentă” și ne vom concentra asupra codului. Există două sarcini realizate în cod:

  1. Analizați un fișier CSV Excel utilizând interogarea SQL
  2. Creați un fișier Geodatabase și completați-l cu geometrie punct și atribute

Prima sarcină este necesară dacă trebuie să filtrăm mai întâi conținutul. Pentru cazul pe care l-am creat, am dori să aflăm doar proiectele într-un singur stat al Marilor Lacuri. Am realizat acest lucru la Linia 33 utilizând OleDbCommand împotriva Excel. Microsoft oferă o abordare foarte îngrijită pentru a manipula datele Excel folosind instrucțiunile SQL. Îl recomand cu tărie lucrărilor de programare.

Dacă găsim un număr pozitiv de proiecte pentru un stat, putem continua să le plasăm într-o geodatabase. Vă rugăm să acordați atenție fluxului acestui proces:

  1. Obțineți fabrica care poate crea geodatabase bazată pe fișiere, consultați linia 135.
  2. Creați o nouă clasă de caracteristici la linia 147.
  3. Buclați înregistrările proiectului, creați o caracteristică nouă și apoi introduceți-le în clasa de caracteristici prin FeatureBuffer și FeatureCursor, care sunt recomandate pentru inserarea în bloc. Vedeți linia 156. Odată ce bucla este terminată, spălați curosr pentru a scrie toate înregistrările înapoi pe disc.

În timpul creării clasei de caracteristici, va trebui să definiți:

Aceasta este o procedură destul de standard. Sunt surprins că ESRI nu are un fragment sau un eșantion de cod pentru acest lucru. Găsesc acest lucru doar în contul ESRI github. Rețineți că eșantionul utilizează „esriDataSourcesFile.TextFileWorkspaceFactory”, care a eliberat programatorul de a gestiona direct fișierul csv. Cu toate acestea, libertatea vine întotdeauna din înțelegerea sistemului. Cu abordarea pe care am introdus-o, aveți acum mai multă flexibilitate pentru a face față fișierului Excel.

Înainte de a încheia, să revenim la șablonul implicit oferit de ESRI pentru noi:

Acestea sunt rutinele pentru inițializarea componentelor ESRI, inclusiv licenese, apoi închideți totul la sfârșit. Codul dvs. care implică lucruri ESRI ar trebui să fie scris între ele.

Înainte de a renunța, ați putea arunca o privire asupra semnăturii funcției ParseCSV, ce înseamnă List & ltdynamic & gt? Dacă citiți codul cu atenție, care este tipul de lucruri pe care le aruncăm în Listă la rândul 38? Din nou, dacă nu aveți idee, cunoștințele dvs. C # trebuie actualizate!

OK, am terminat cu toții. Până data viitoare, să vă fie forța!

Lecția 3: ArcObjects sau ArcPy, To be or Not to be

În primul rând, nu intenționez să creez un război sfânt aici. Amândoi sunt minunați! Vreau doar să ilustrez diferența dintre AO și AP într-un caz particular. Sperăm că, indiferent că sunteți un suporter AO sau AP, acest lucru vă poate fi de ajutor pentru a alege instrumentul potrivit pentru sarcina potrivită.

Să descriem mai întâi sarcina: dacă sunteți familiarizat cu Graph ca structură de date în contextul informaticii, este posibil să știți că este o structură fundamentală pentru a efectua orice fel de operațiuni, cum ar fi urmărirea rețelei, cea mai scurtă cale, fluxul maxim etc. Având în vedere un set de date preprocesat NHD Plus pentru Great Lakes în format de geodatabase de fișiere, am dori să creăm graficul în forma sa de listă adiacentă. Examinând cu atenție geodatabase, am constatat că există două clase de caracteristici care sunt deosebit de utile pentru această sarcină: NHD_Flowline și Hydro_Net_Junctions. După cum știți, NHD Plus este un set de date care a fost procesat și construit cu o rețea Stream folosind tehnologia ESRI. Cu toate acestea, geodatabase ESRI este proprietară, deci nu putem profita de datele existente pentru a construi lista noastră de adiacență (de fapt, exagerez puțin aici, deoarece ESRI oferă o bibliotecă open source C ++ pentru manipularea geodatabase bazată pe fișiere).

Folosind aceste două clase de caracteristici, ne-am putea realiza munca folosind ArcPy într-un mod destul de simplu. Iată codul. Este posibil să observați că scriptul a folosit fișierul shp în loc de geodatabase. Nu am mințit, am o versiune folosind Geodatabase aici. Dacă lucrați pentru angajatorul meu, ar trebui să îl puteți vedea. Dacă configurați acest script pe desktop cu ArcMap 10.3 instalat și NHD Plus pentru Great Lakes gata (anunțați-mă dacă aveți nevoie de acest „NHDPlusV21_GL_04.gdb” utilizat în test), este posibil să vă găsească până la 6 până la 12 ore pentru finalizare. Pun pariu că ai observa și că blocajul este aici și aici.

Putem face unele îmbunătățiri acolo? Din nefericire, nu putem face multe, întrucât ESRI a expus doar funcționalități limitate la ArcPy, în principal Geoprocesare folosind orice se află în caseta de instrumente a ArcMap. Cu alte cuvinte, toate scripturile ArcPy fac un singur lucru: o combinație a oricărui număr de instrumente oferite de ESRI în ArcMap. Aveți o capacitate de 64 de biți, dar nu aveți prea mult ajutor pentru acest caz, care este mai probabil să fie legat de CPU.

Să aruncăm moneda și să verificăm cealaltă față: ArcObjects .Net, acest rău succesor al ArcObject pentru Visual Basic oferă o învelitoare subțire pe partea superioară a COM-urilor ArcObjects și ar trebui să poată accesa fiecare aspect al tehnologiilor ESRI, dacă aveți licență corespunzătoare achiziționată. Pentru a avea un fair-play, vom rămâne cu aceeași metodologie pe care o ia ArcPy. Credem că am putea avea un script C # mai performant folosind AO pe baza faptului că AO oferă o granularitate mai fină decât AP în ceea ce privește programarea. Spargând aceste două blocaje și mergând un strat mai adânc în interiorul AO, putem face diferența.

În primul rând, să explicăm mai întâi partea plictisitoare: Iată două POCO-uri pentru a reprezenta nodul și succesorii acestuia:

Vertexul ca nod este utilizat pentru a urmări ID-ul nodului, numărul fluxurilor primite și cel mai important: nodurile din aval stocate într-o listă. Clasa DownstreamNode conține ID nod, ID flux flux și cel mai important: datele despre viteză dintr-o listă (gândirea noastră inițială este să folosim aceste viteze pentru a calcula timpul de deplasare de-a lungul fluxurilor).

În scriptul C #, trebuie să deschidem geodatabase bazată pe fișiere și să obținem referințe la clasele de caracteristici pe care am dori să le examinăm:

Deoarece acum avem clase de caracteristici în mână, suntem pregătiți să abordăm interogările spațiale, care în mod obișnuit se realizează în ArcPy prin trei linii de cod:

A treia linie „arcpy.SelectLayerByLocation_management” este cheia. Deoarece va trebui să parcurgem fiecare punct de joncțiune împotriva stratului NHD_Flowline (un punct împotriva tuturor polilinilor), bănuim că „SelectLayerByLocation_management” poate fi ineficient din cauza proiectării. „SelectLayerByLocation_management” este probabil programat astfel:

  1. Construiți un index spațial pe NHD_Flowline
  2. Căutați indexul folosind punctul dat și găsiți toți candidații care se află pe un subarborescență de polilinii
  3. Scanarea liniară a tuturor candidaților în funcție de un anumit punct folosind operatori geometrici pentru a exclude fals pozitiv
  4. Returnează setul de rezultate

Este posibil ca primul pas, indexul, să fie reconstruit de fiecare dată când invocăm „arcpy.SelectLayerByLocation_management”, care este o risipă. Ce se întâmplă dacă îl construim o dată și folosim același index pentru toate punctele? Mi s-a spus că interogarea spațială AO trebuie făcută folosind:

Nu sunt sigur cum a fost implementat, dar arată într-adevăr aproape de „arcpy.SelectLayerByLocation_management”. Deci, decid să merg pe un alt drum: „IFeatureIndex” și „IIndexQuery2”, ceea ce pare promițător oferindu-ne un control mai ridicat al scării. Iată codul meu:

Creăm o co-clasă FeatureIndex și îi cerem să creeze indexul spațial împotriva clasei de caracteristici date (se pare că FeatureIndex creează de fapt index pe sistemul de fișiere, am crezut că ar putea profita de indexul din geodatabase.) Și apoi îl aruncăm în IIndexQuery2, care are o metodă numită: Caracteristici intersectate. Dacă avem dreptate, acest lucru va efectua pașii de mai sus de la 2 la 4.

Putem pune cu ușurință coduri împreună ca o aplicație pentru consolă ESRI folosind C #, bine dacă ați urmat tutorialele mele anterioare. Un lucru care merită menționat este calcularea lungimii geodezice a unei polilinii cu coordonate lon / lat. În ArcPy, din nou, are nevoie doar de o singură linie de cod:

Poate credeți că ar trebui să fie atât de simplu. Ei bine, ține-ți gândul, vezi cum s-a făcut acest lucru în AO, dat fiind că polyLine este o IPolină:

Ne pare rău, nu mă întrebați cum poate funcționa aici o instanță implicită LinearUnitClass. Este destul de dezordonat. Mi-am ținut implusul de a-mi pune propriul cod Haversine acolo, pentru că am încredere că ESRI are o soluție mai bună lângă Polul Nord / Sud. Trebuie să crezi! :) Din nou, un guru AO mi-a spus că această lungime geodezică pe polilinie trebuie făcută la nivel de segmente folosind o metodă diferită. Nu am săpat atât de mult: de fapt, mi-am făcut codul C # un pic dezordonat, chiar am încercat să folosesc Linq, dar Linq al lui C # este pal comparativ cu înțelegerea listei Python. Pentru că știu: C # pe CLR împotriva COM pe platforma Windows va fi cu siguranță mai rapid decât Python, ca să nu mai vorbim că ArcPy se află pe partea superioară a ambalajului de ambalaj.

Dacă ați putea compila codul cu succes, nu vă grăbiți să-l rulați, să faceți o ceașcă de cafea și să aveți cartea preferată în mâini, ultimul script ArcPy a durat ore! Ei bine, pe laptopul meu, am avut timp să beau o ceașcă de cafea și am citit câteva știri online, cu toate acestea, în mod surprinzător, această versiune AO ​​a fost finalizată în 15 minute! Matematica mea este proastă, îmi poate spune cineva de câte ori aceasta este mai rapidă decât versiunea AP?

Din nou, nu vreau să dovedesc că AO este mai bun decât AP sau să te conving să treci la AO. Aș dori să ofer tuturor oportunitatea de a vă actualiza baza de cunoștințe și de a gândi în afara casetei! Este posibil să pierdeți sensul performanței în timp ce vă bucurați de mai puține linii de cod ArcPy. Îmi place ArcPy, chiar îmi place, dar în multe scenarii, simt că aș purta un T-shrit pentru un adolescent. Deci, sfatul meu este: dacă vă pasă de performanță sau simțiți că ArcPy a fost prea lent pentru dvs., puteți lua în considerare utilizarea ArcObject, care de obicei nu vă va dezamăgi, cel puțin nu de data aceasta pentru cazul nostru de testare. :)

Știu, știu, ar trebui să discutăm despre ArcObject, nu despre ArcPy. Cu toate acestea, anterior, pe „ArcObject .Net cu VS 2013”. (în regulă, nu suntem un serial TV :), am fost șocat de câștigul de performanță prin trecerea de la ArcPy la ArcObject. M-am gândit că ar merita să facem o investigație despre ArcPy, implementarea și capacitatea sa. Dacă nu intenționați să învățați ArcPy, vă rugăm să ignorați acest capitol.

ArcPy a fost introdus pentru prima dată în 2010 cu versiunea ArcGIS 10 (ei bine, este într-adevăr doar 9.4, dar denumirea lui 10 a făcut să pară mai nou.). De fapt, au existat „arcgisscripting” înapoi la ArcGIS 9.2, acesta suporta nu numai Python, ci și alte limbaje de scriptare, precum VBScript, Perl. Cu toate acestea, la scurt timp după ce Microsoft a oprit suportul pentru VB, VBScript, Jscript, ESRI a decis să renunțe la toate scripturile, cu excepția Python. Acesta a fost menit să ofere abilitatea de scriptare numai pentru sarcinile de geoprocesare. Cutia de instrumente pentru Geoprocesare a fost lansată în ArcMap 9.2. A fost conceput pentru a simplifica anumite lucrări de prelucrare a datelor:

  1. Cutie de instrumente de analiză
  2. Cutie de instrumente pentru cartografiere
  3. Cutie de instrumente de conversie
  4. Cutie de instrumente de gestionare a datelor
  5. Cutie de instrumente de editare
  6. Cutie de instrumente pentru geocodare
  7. Casetă de instrumente de referință liniară
  8. Cutie de instrumente Multidimension
  9. Casetă de instrumente Statistică spațială

În ArcPy, fiecare funcție de geoprocesare din ArcMap este definită ca o funcție din modulele ArcPy. Puteți genera carcasa contextuală a unei clase de caracteristici punct prin următoarele două linii de cod:

Funcția „MinimumBoundingGeometry_management” este echivalentă cu instrumentul „Minimum Bounding Geometry”, care poate fi găsit ArcMap- & gt Toolbox - & gt Data Management. ArcPy automatizează pur și simplu acest instrument, permițând utilizatorului să trimită parametrii acestui instrument într-un mod programatic. După o a doua privire, este posibil să observați că toate funcțiile respectă convenția de numire samae:

toolname + '_' + alias casetă de instrumente

Dacă nu sunteți sigur aliasul unei anumite cutii de instrumente, faceți clic dreapta pe caseta de instrumente, apoi pe proprietate.

Potrivit blogului ESRI, iată scopul ArcPy:

„ArcPy este un pachet de site-uri care se bazează pe (și este succesorul) modulului de succes arcgisscripting. Scopul său este de a crea piatra de temelie pentru o modalitate utilă și productivă de a efectua analiza datelor geografice, conversia datelor, gestionarea datelor și automatizarea hărților cu Python. "

În prima ediție a ArcPy, altul decât geoprocesarea, oferă și alte câteva modele: Cartografiere (arcpy.mapping), Analiză spațială (arcpy.sa) și Analist geostatistic (arcpy.ga). În 10.1, au fost introduse accesul la date (arcpy.da) și Time (arcpy.time). Include și alte biblioteci / utilități.

După cum știm cu toții, toată personalizarea producției ESRI se poate face prin ArcObject, iar ArcObject a fost dezvoltat pe baza Microsoft COM împotriva sistemului Windows. De exemplu, mijloacele de a exclude instrumentele de geoprocesare sunt prin coclasa GPDispatch (definiția coclasă). Permite utilizatorului să trimită arugments prin șir și să consume orice rezultat returnează interfața. Prin urmare, ESRI îl numește „obiect cu granulație grosieră”, vezi aici. Cu toate acestea, ArcPy își implementează funcționalitățile de geoprocesare deasupra acestei interfețe. După cum indică unele dintre documentele ESRI, ArcPy este și un model cu granulație mai grosieră.

„Arcpy.mapping a fost creat pentru analistul GIS profesionist (precum și pentru dezvoltatori). În mod tradițional, scenariile enumerate mai sus trebuiau realizate folosind ArcObjects și de multe ori s-a dovedit a fi un mediu de programare foarte dificil de învățat pentru profesionistul GIS mediu. Arcpy.mapping este un model de obiect cu granulație cursă, ceea ce înseamnă că funcțiile sunt proiectate astfel încât o singură funcție arcpy.mapping să poată înlocui multe linii de cod ArcObjects. "

Prin urmare, puteți face mai ușor ceva uimitor prin ArcPy în doar câteva linii de cod:

Codurile de mai sus vor reda toate caracteristicile din mxd, utilizând configurația definită în mxd, într-un fișier pdf.

Poate doriți să întrebați: ar trebui să considerăm ArcPy ca un înlocuitor al ArcObject? Totuși, conform ESRI:

„Arcpy.mapping nu este un înlocuitor pentru ArcObjects, ci mai degrabă o alternativă pentru diferitele scenarii pe care le acceptă. ArcObjects este încă necesară pentru dezvoltarea mai fină și personalizarea aplicației, în timp ce arcpy.mapping este destinat automatizării conținutului documentelor și stratului de hărți existente fişier."

Poate doriți să știți: dacă ArcPy poate apela direct ArcObject? Raspunsul este nu. Dar, sunt sigur, ArcPy comunică cumva cu ArcObject în mod indirect, implicit. Ca întotdeauna, „curiozitatea a ucis pisica”. Voi deschide capota ArcPy puțin și voi vedea ce este acolo. Pe desktop-ul meu, ArcPy a fost instalat la:

C: Program Files (x86) ArcGIS Desktop10.2 arcpy arcpy

Acolo, veți găsi o structură clasică de pachete de module Python. Există un subfolder acolo numit „arcobjects”, ești convins? Sunt sigur că nu ești. Deci, să deschidem câteva fișiere py. Clasa „MapDocument” este definită în _mapping.py. Declarația clasei este ca:

Dacă sunteți familiarizați cu C # sau Java, ați putea considera „mixins” ca o interfață. Nu există un constructor explicit definit în MapDocument, prin urmare, în conformitate cu Metoda de rezoluție a metodelor Python (MRO, adâncime mai întâi înainte de algoritmul 2.3 și C3 după aceea, ați putea examina comportamentul MRO de către class.mro ()), constructorii claselor sale de bază va fi invocat:

Se pare că MapDocumentMethods invocă clasa sa de bază init direct dacă super () își returnează de fapt clasa de bază. Cu toate acestea, deoarece avem de-a face cu moștenirea multiplă aici, super (MapDocumentMethods, self).init(mxd) invocă de fapt constructorul celei de-a doua clase de bază a MapDocument: "_BaseArcObject". Dacă doriți să înțelegeți mai multe despre comportamentele fanteziste ale super, faceți clic aici. Să aruncăm o privire asupra _BaseArcObject:

Are un constructor care este capabil să ia argumente de intrare cu lungime variabilă. De asemenea, definește o variabilă de membru static, „_arc_object”. Funcția „gp._gp.CreateObject” este de fapt definită în spațiul de nume „geoprocesare”, amintiți-vă că am menționat că geoprocesarea este primul modul introdus pentru ArcPy? Pentru GP, este o instanță a clasei Geoprocesor:

Acum am ajuns la originea: ArcPy comunică cu ArcObject prin „arcgisscripting”, care este predecesorul ArcPy. Nu veți găsi arcgisscripting în dosarul ArcPy, acesta de fapt se află la „C: Program Files (x86) ArcGIS Desktop10.2 bin”, cu numele „arcgisscripting.pyd”, care este de fapt un DLL.

Așa cum am discutat în capitolul anterior și în acest capitol, din cauza interoperabilității cu COM, ar trebui să vă așteptați la o pierdere de performanță dacă utilizați ArcPy nu ArcObject. Cât de mult puteți pierde în funcție de sarcini. Iată un punct de referință pe care l-am respectat pe Internet împotriva ArcGIS 9.3. @dbGLC mi-a reamintit că această grafică a fost preluată dintr-o presnetare care discuta despre posibilitatea invocării AO COM direct folosind Python folosind unele pachete Python COM, cum ar fi tipurile de tipuri. Firul original de discuție este aici. S-ar putea să găsiți o mulțime de idei strălucitoare acolo.

Din nou, acest capitol este menit să vă ajute să înțelegeți ce a făcut din ArcPy. Atât ArcObject, cât și ArcPy sunt instrumente excelente pentru diferite scenarii. Dacă doriți să aflați mai multe despre ArcPy, vă recomand aici repos-urile ESRI pe github. Spuneți-mi dacă puteți găsi vreo funcție scumpă de geoprocesare numită într-o buclă uriașă. :)

Lecția 5: Diagrama modelului de obiecte ArcObjects (OMD)

Dacă sunteți un dezvoltator experimentat AO, indiferent dacă preferați VBA, VB, VB.Net, C #, Java sau C ++ (ordonat în funcție de popularitate :), trebuie să luați aceste diagrame uneori pentru a căuta scopul cel puțin. Ei bine, dacă ești un începător AO, la fel ca mine, s-ar putea să simți că am fost exagerat. Nu te voi învinovăți, așa că am crezut și eu. Cu toate acestea, odată ce începeți să implementați o funcție prin AO în mod serios, aceste diagrame ar fi arma voastră finală, mai ales după câteva căutări pe Google care pierdeau timp. Nu glumesc, am glumit întotdeauna cu colegii mei: un dezvoltator senior este cineva care ar putea rezolva un puzzle tehnic la care nu răspund motoarele de căutare. Din păcate, ArcObjects intră în această categorie mai mult decât alte tehnologii! Două motive: 1. AO are un grup de utilizatori relativ mic 2. ESRI a făcut o treabă foarte proastă pentru a menține documentația API a dezvoltatorului. Plătesc 1.500 de dolari pe an pentru abonamentul EDN, dar mă simt în continuare neajutorat mai des decât mă așteptam.

Oamenii învață întotdeauna din propriile lecții (ei bine, cineva cade în același râu de mai multe ori). După o experiență frustrantă de cuplu cu documente Google și EDN, mi-am amintit brusc de vremea când eram tânăr: am văzut acei guru AO în picioare și rumegând în fața unei tabele imense cu o diagramă lungă de câteva picioare cuie pe ea. Mi-am amintit că diagrama la care priveau se numește AO Object Model Diagram, alias OMD (Oh My Darling)! Stai puțin, unde sunt dragii mei? Pe desktopul meu, acestea se află în:

C: Program Files (x86) ArcGIS DeveloperKit10.4 Diagrams

Există 68 de pdf-uri în acest folder, ei bine, au fost mult mai puține pentru versiunea anterioară AO. Dacă sunteți un amator la fel ca mine, aș dori să vă recomand mai întâi să citiți GeoDatabaseObjectModel.pdf. Conține majoritatea lucrurilor de care este posibil să aveți nevoie pentru a începe programarea AO. Să aruncăm o privire împreună!

În primul rând, trebuie să înțelegeți că ESRI este un adept sincer al UML. Toate simbolurile ciudate pe care le puteți vedea sunt de fapt derivate din diagramele de clasă UML cu o invenție ESRI. Iată o referință bună pentru diagrama de clasă UML. Dacă nu doriți să petreceți 3 minute pentru a trece peste aceste concepte și sybmols assoicated, ESRI are un UML 101 pe fiecare diagramă.

ESRI și-a făcut invenția. Ce sunt interfața de intrare și de ieșire? Chiar și după ce am luat clasa UML pentru un semaster complet, nu există nici o idee despre ce naiba ar putea fi! Nu vă faceți griji, ESRI oferă explicații în seria „Learning ArcObjects”, care este disponibilă online și offline pentru fiecare versiune. Iată capitolul: Citirea OMD-urilor. Acum este posibil să știți că interfața de intrare este interfața pe care o implementează clasa specificată, interfața de ieșire este de fapt registrul de evenimente, ESRI o numește evantă de evenimente. Este un truc vechi de școală pentru înregistrarea managerului de evenimente. Dacă sunteți la fel de naivi ca mine, îl puteți considera pur și simplu ca Eveniment în contextul .Net.

Amintiți-vă că am menționat anterior că acei guru au imprimat ORM la fel de mare ca o hartă la scară mică folosind plotter? De ce? Dacă deschideți GeoDatabaseObjectModel.pdf, aceasta este ceea ce puteți vedea bine, cu excepția cazului în care aveți un televizor LED extrem de mare ca ecran:

Acum, știi de ce este necesar un plotter, nu-i așa :)

Dacă știți interfața care vă interesează, este întotdeauna convenabil să căutați direct OMD-ul corespunzător. În caz contrar, simți că joci un joc de ascuns.

OK, să jucăm jocul de la ascuns. Iată afacerea: aș dori să deschid un fișier bazat pe GeoDatabase și să obțin informații despre clasele de caracteristici din acesta. Dacă sunteți programator, este posibil să știți că deschiderea unui fișier de pe disc folosește de obicei unele funcții precum „deschide” sau „deschide fișier” etc. Deoarece suntem OOP, există o clasă pe care o putem aplica. Înainte de a vă scufunda în oceanul dragilor mei, vă apuc de brațe și vă spun: așteptați un minut, încă un lucru pe care trebuie să-l menționez: trei reguli suriviale pentru a juca cu Dragii Mei (OMD)

Eu. În timpul urmăririi interfeței, de fiecare dată când se ajunge la o interfață care implementează IUnknown, știți că acesta este sfârșitul. Observați că folosesc „interfața” workd, nu clasa? AO este construit deasupra standardului Microsoft COM. Se spune în mod fundamental că fiecare apel de funcție ar trebui să fie efectuat împotriva unei instanțe de un fel de interfață. Prin protocol, fiecare interfață definită sub domeniul COM trebuie să implementeze interfața IUnknown. Nu vă faceți griji ce este în IUnknown, păstrați-l necunoscut nu este o idee rea. Tot ce trebuie să știți este că este o fundătură odată ce vedem o interfață în OMD care implementează direct IUnknown. Am atins cel mai înalt nivel al ierarhiei OMD.

WorkspaceFactory este o clasă care implementează IWorkspaceFactory, care este o interfață de intrare și implementează IUnknown. Acest lucru ne spune că IWorkspaceFactory este o interfață de nivel superior.

II. Accesarea funcțiilor definite într-o interfață se face întotdeauna prin instanțe de un anumit tip de clasă. Acest tip de clasă este fie o clasă Coclass, fie o clasă „instantanabilă”, care este un tip de clasă a cărei instanță poate fi recuperată numai prin alte clase. Acest lucru ar putea însemna recuperarea fie din fabrică, singlton sau upcasting. Să folosim în continuare WorkspaceFactory ca exemplu.

În .Net, WorkspaceFactory pe OMD sunt implementate ca două unități: interfața "WorkspaceFactory" și clasa "WorkspaceFactoryClass", care implementează interfața "WorkspaceFactory" împreună cu alte interfețe pe care WorkspaeFactory ar trebui să le facă în conformitate cu OMD. „WorkspaceFactory” este o interfață goală care funcționează probabil ca un substituent. De ce? Nu știu. Dacă știți, vă rog să mă anunțați :)

Din decompilare, putem spune că constructorul WorkspaceFactoryClass are modificatorul de acces „intern”, ceea ce înseamnă că poate fi accesat doar în interiorul ansamblului. „extern” înseamnă că acest constructor este implementat în altă parte. Atributul MethodImpl asociat cu constructorul este atribuit cu MethodImplOptions.InternalCall, care indică „apelul este intern, adică apelează o metodă care este implementată în timpul de rulare al limbajului comun”. Toate acestea ne asigură că nu putem crea o instanță a WorkspaceFactoryClass în codul nostru. Prin urmare, WorkspaceFactoryClass se califică pentru a fi un clasa „instantanabilă”.

Pe OMD, clasa Abstract, clasa instantanee și clasa de cocă pot fi identificate cu ușurință prin forma dreptunghiului. Clasa abstractă este un dreptunghi umbrit 2D, clasa instantanee este un dreptunghi 3D fără umbră, clasa este un dreptunghi umbrit 3D.

III. Deoarece aceste clase implementează de obicei mai multe interfețe. Este foarte tipic să vedeți în codul AO, pentru a accesa o metodă declarată în interfața D, care este implementată în clasa C, trebuie să obțineți mai întâi o instanță din clasa A, apoi să o aruncați pe o interfață B folosind „ca”. Deoarece clasa C implementează atât interfața B, cât și interfața D, acum aruncați tot ce aveți în mână de la B la D.

Acum puteți să vă scufundați! Singurul indiciu pe care îl avem este că se pare că toate seturile de date sunt accesate prin modelul de proiectare Abstract Factory. Deoarece am dori să deschidem un fișier bazat pe GDB, găsesc FileGDBWorkspaceFactory în DataSourcesGDBObjectModel.pdf

Are un dreptunghi 3d umbrit, așa că am putea inițializa o instanță a FileGDBWorkspaceFactory direct sau a crea așa ceva prin reflector. Are o interfață de intrare: IWorkspaceFactory și această interfață este descrisă în GeoDatabaseObjectModel.pdf. Vedeți imaginea anterioară, are o funcție numită "OpenFromFile ()", care este metoda pe care o așteptăm. Această metodă returnează o interfață IWorkspace, consultați diagrama de mai jos:

Observați că implementează IFeatureWorkspace, deoarece căutăm mijloacele pentru a accesa informațiile clasei de caracteristici, acest lucru pare interesant. OK, are două metode: OpenFeatureClass și OpenFeatureDataset, prima este pentru a accesa o clasă de caracteristici dacă numele alias al clasei de caracteristici este cunoscut în față, cea de-a doua, pe de altă parte, este pentru buclarea claselor de caracteristici într-o clasă de featre set de date dacă numele claselor de caracteristici sunt necunoscute, dar numele setului de date al clasei de caracteristici este dat.

Examinând delcararea FeatureDataset, interfața IFeatureClassContainer definește modul de accesare a IFeatureClass prin index, care este exact funcțiile pe care sperăm să le parcurgem prin toate clasele de caracteristici dintr-un fișier GDB. Mai jos este codul pentru a demonstra acest proces. Aceasta este o copie directă din proiectul meu care necesită dezvoltarea unui SOE.

Ei bine, sper că acest exemplu este suficient de simplu pentru a vă oferi o idee despre cum să utilizați OMD. Sincer să fiu, nu sunt sigur dacă am făcut o treabă bună aici. Deci, dacă nu am făcut-o, vă rog să-mi spuneți. :)

Lecția 6: Extensia obiectului ArcGIS Server (SOE) și instrumentul de geoprocesare ##

Nu am șansa să actualizez această serie de ceva vreme. Am copiat / lipit câteva note pe care le-am făcut pentru proiectul nostru aici. Din experiența mea personală, aceste două abordări de dezvoltare pe server sunt ambele utile, deși SOE pare să fie mai popular și mai capabil, instrumentul de Geoprocesare oferă o posibilitate dezvoltatorilor care migrează de la Arcpy. În plus, instrumentul de geoprocesare are un flux de lucru natural construit deja pentru gestionarea sarcinilor de geoprocesare care ar putea dura mult timp. Dacă îmi ceri oponența, trebuie să spun „Luca, folosește forța!”.

### Extensie obiect server (SOE) ###

####Introducere Dezvoltarea extensiilor de obiecte server (SOE) este modul standard oferit de ESRI pentru a personaliza comportamentul serverului ArcGIS. Desigur, SOE este și COM.

Cea mai bună referință pentru această caracteristică, dacă aveți SDK instalat, se află în fișierul de ajutor:

ArcObjects SDK pentru ArcGIS 10.4 - & gt ArcObjects Help pentru dezvoltatorii .NET - & gt Dezvoltarea cu ArcGIS - & gt Extinderea ArcGIS pentru Server - & gt Dezvoltarea extensiilor de obiect server

Nota de aici NU vă va ghida să dezvoltați un SOE. În schimb, urmărim procedura de depanare corespunzătoare, construirea și implementarea SOE pe desktop și server ArcGIS.

Ei bine, nu vă simțiți dezamăgiți dacă veniți aici și vă așteptați să aflați cum să codați SOE. În urma documentului listat în SDK helper, ar trebui să îl puteți face. Sau, dacă aveți nevoie de o comandă rapidă cu un eșantion complet, vă recomandăm să încercați acest github ESRI.

#### Depanare Fără ArcGIS Server, depanarea SOE trebuie făcută la nivelul testului de unitate. Dacă nu doriți să separați logica SOE din fișierul cod implicit al șablonului SOE, încercați un cadru de machetă, cum ar fi moq. Cu toate acestea, dezvoltatorul ESRI nu a făcut ca clasele lor să fie „prietenoase pentru mockup”, de exemplu, clasa ServerLogger este definită ca o clasă sigilată, care împiedică moștenirea majorității cadrului de mockup și înlocuirea acestuia cu mock.

Dacă aveți capacitate de depanare pe ArcGIS Server, iată câteva sfaturi:

  1. Asigurați-vă că deschideți proiectul SOE utilizând contul de administrator
  2. Când vă atașați la procesele ArcGIS Server, asigurați-vă că selectați toate ArcSOC.exe cu tipul de (A reușit)

Nu am reușit să depanez codul din Init, Shutdown și Construct. SOE rulează în containerul ArcSOC. Deoarece aceste 3 funcții sunt invocate în timpul construcției și închiderii SOE, este greu de spus la ce proces mă pot atașa.

#### Implementarea implementării SOE urmează o procedură în doi pași, presupunând că tipul SOE este MapServer și serviciul este REST.

  1. Dacă construiți proiectul SOE în VS, va fi creat un fișier „soe” ca arhivă. În Managerul ArcGIS Server, accesați Site - & gt Extensions - & gt Add Extension, încărcați acest fișier „soe”, iar ArcGIS Server va avea grijă de orice pentru dvs., cum ar fi înregistrarea COM.
  2. Pregătiți datele hărții în ArcMap și publicați-le ca servicii de hărți cu opțiunea „etapizare”, ceea ce înseamnă „Nu încărcați, pregătiți doar datele”. Aceasta va crea un fișier sd la „C: Users hellocomrade AppData Local ESRI Desktop10.4 Staging”. În ArcGIS Server Manager, Servicii - & gt Publish Service, alimentați expertul cu fișierul sd și sub Capabilități, asigurați-vă că verificați SOE pe care îl încărcați la pasul 1. Dacă totul merge bine, serviciul de hartă va fi pornit cu SOE-ul dvs.
  3. Accesați „http: // localhost: 6080 / arcgis / rest / services /” și selectați serviciul de hartă definit la pasul 2, derulați în jos până la partea de jos a paginii, ar trebui să apară „Extensii acceptate”.

####Introducere Dezvoltarea funcției personalizate de Geoprocesare este lansată o "nouă" caracteristică ESRI prin ArcPy? De fapt, înapoi la 9.3, această caracteristică a fost furnizată ArcObject .Net. Cu toate acestea, documentația a fost „ascunsă” în carte și ESRI părea timid să introducă această caracteristică dezvoltatorului AO. Chiar nu puteți găsi un șablon în integrarea Visual Studio pentru această caracteristică prin AO .Net SDK. Va trebui să rezolvați totul de la zero

Cea mai bună referință pentru această caracteristică, dacă aveți SDK instalat, se află în fișierul de ajutor:

ArcObjects SDK pentru ArcGIS 10.4 - & gt Ajutor ArcObjects pentru dezvoltatorii .NET - & gt Dezvoltarea cu ArcGIS - & gt Învățare ArcObjects - & gt Extinderea ArcObjects - & gt Instrumente funcționale de procesare personalizată

Sper că acum înțelegeți de ce am spus că ESRI este timid în această privință. Vedeți structura copacului?

Memo-ul de aici NU vă va ghida să creați un astfel de instrument. În schimb, urmărim procedura pentru construirea și implementarea corectă a acestui instrument în ArcMap și pe serverul ArcGIS.

Ei bine, nu vă simțiți dezamăgiți dacă veniți aici și vă așteptați să aflați cum să codificați un astfel de instrument. În urma documentului listat în SDK helper, ar trebui să îl puteți face. Sau, dacă aveți nevoie de o comandă rapidă cu un eșantion complet, care lipsește în documentul de asistență SDK, vă recomandăm să încercați acest github ESRI.

O notă secundară: atunci când implementați IGPFunction2, IsLicensed poate reveni pur și simplu fără condiție dacă sunteți sigur că acest instrument nu va fi distribuit către terțe părți care ar putea să nu cunoască tipul de licență, în special extensiile, este necesar. De ce? dacă intenționați să utilizați acest instrument pe desktop, motor și server, va trebui să le verificați într-un if. altfel dacă. altfel, dacă ați uitat și este licențiat returnează fals, instrumentul dvs. nu va funcționa. De ce pur și simplu reveniți adevărat de la isLicensed fără a verifica și lăsați software-ul de găzduire (instrumentul nostru este doar un dll) să spună utilizatorului dacă instrumentul poate fi executat aruncând o excepție în timpul rulării? :) Nu este elegant însă.

#### Înregistrare Având în vedere o bază de cod sursă pregătită pentru compilare ca COM gestionat în VS 2013, primul lucru pe care l-aș face este să fac clic dreapta pe numele proiectului - & gt properties - & gt Build, bifați „Register for COM interop”. Acest lucru va face ca tipul din interiorul ansamblului să fie vizibil pentru clientul COM prin intermediul utilitarului: RegAsm.exe. Verificând acest lucru, compilatorul C # va genera fișier tlb și va utiliza fișier tlb pentru a finaliza înregistrarea. Acest pas chiar îl face NU sună ca necesar pentru seria ArcGIS 10. ESRI a decis să înregistreze atât COM nativ, cât și COM gestionat, fără a utiliza înregistrarea sistemului prin propriul instrument "ESRIRegAsm.exeCe naiba? Nici ESRI nu mai are încredere în registrul de sistem MS, trist.

"Informații suplimentare despre produs trebuie furnizate la înregistrare utilizând un utilitar Esri numit ESRIRegAsm.exe. ESRIRegAsm.exe înlocuiește utilitarul standard Microsoft RegAsm.exe."

Dacă aveți un proiect de bibliotecă de clase ArcGIS creat prin șablonul ArcGIS, înregistrarea se va face automat ca un eveniment post build. De aceea, programul de completare ArcMap poate apărea întotdeauna automat în ArcMap. Cu toate acestea, acest lucru nu este adevărat pentru cazul nostru, deoarece dezvoltăm o funcție GP care nu este susținută atât de bine de ESRI în ceea ce privește integrarea VS.

Dar este OK. ESRI nu este atât de rău. Răsfoind pur și simplu dosarul pentru dll-ul compilat, faceți clic dreapta pe el, în meniul contextual, vedeți „Înregistrați-vă”? Asta o va face! Lumea este perfectă? Nu! Când apare acel dialog pentru înregistrare, puteți vedea produsul precum „Desktop” sau „Motor” sau ambele afișate. Apoi va trebui să alegeți unul pentru înregistrare.

Dar întregul scop al unui instrument GP este acela că acesta poate funcționa ca un serviciu GP pe serverul ArcGIS. Unde este înregistrarea serverului meu ArcGIS? Se pare că există două ESRIRegAsm.exe! Una pentru linia ESRI pe 32 de biți, cealaltă este pentru linia Server pe 64 de biți.

32 biți: C: Program Files (x86) Common Files ArcGIS bin

64 biți: C: Program Files Common Files ArcGIS bin

Dacă doriți să vă înregistrați instrumentul pentru server, utilizați al doilea binar în linia de comandă. (Asigurați-vă că deschideți cmd folosind privilegiul de administrator linia de comandă coz nu va cere permisiunea de confirmare a administratorului, așa cum ar putea face alte software, așa că veți primi o eroare „Nu se poate scrie pe disc”). Iată ce am făcut:

„C: Program Files Common Files ArcGIS bin esriregasm.exe” c: temp GPNetTrace.dll

Am ignorat intenționat opțiunea / p: așa că fereastra pop-up îmi va cere să aleg produsul la care aș dori să mă înregistrez. Un lucru pe care poate doriți să-l știți este: odată ce înregistrarea este terminată și produsul este pornit, să spunem ArcGIS Server, acest dll la locul înregistrat, pentru cazul nostru este sub C: Temp, va fi blocat de proces. Nu îl veți putea actualiza. Deci, fă NU Înregistrați dll în folderul bin sau obj pentru un proiect VS, VS linker nu va mai putea crea dll pentru dvs.

Mai întâi, trebuie să adăugați acest instrument pe ArcMap ca o cutie de instrumente. În fereastra de catalog. Crearea unei noi casete de instrumente sub „Caseta mea de instrumente” și apoi faceți clic dreapta pe caseta de instrumente nou creată, Add- & gtTool, aceasta va afișa o listă cu toate casetele de instrumente înregistrate, inclusiv cea pe care tocmai am înregistrat-o. Cum să găsim instrumentul nostru? Ei bine, depinde de instrumentul în sine.

A doua funcție "GetFunctionNames" este o metodă definită în interfața "IGPFunctionFactory", aceasta este necesară, astfel încât software-ul ESRI să poată extrage numele instrumentului din implementarea acestei interfețe. Numele care apare în lista de instrumente ca root va fi „name.Category”, care este „NetworkNavigation”, iar numele suplimentar al instrumentului va fi name.DisplayName, care este „Network Trace”, intern, acest instrument este urmărit după nume .Name, care este „TraceNetwork”. Acum, ar trebui să puteți găsi și adăuga instrumentul pe ArcMap.

În regulă, preliminariile sunt terminate. Să depanăm! Deoarece instrumentul nostru a fost compilat ca un DLL, trebuie să atașăm depanatorul la orice binar care execută de fapt codul din biblioteca noastră. Sub VS, Debug- & gtAttach to Process. Pentru a face acest lucru, doriți să vă asigurați că deschideți VS utilizând un cont de administrator.

Presupunând că reușești să obții o prelucrare pe fundal pe 64 de biți cu codul tău, asta înseamnă că ai

în codul tău. Dacă eșuează corect la Execute, zvonul este că dll-ul dvs. nu a fost înregistrat corect pe 64 de biți ESRIRegAsm.exe. Nu pot face ca această parte să funcționeze pe desktopul meu, dar s-ar putea să ai noroc. Dacă da, va trebui să atașați depanatorul cu procesul numit „RuntimeLocalSerer.exe”. De fapt, există două procese cu același nume. Unul rulează pentru CLR gestionat, celălalt este pentru COM nativ. Cred că ar trebui să atașați cu unul gestionat (Verificați coloana Tip în tabelul „Procese disponibile”. Acestea fiind spuse, le puteți atașa pe ambele apăsând Ctrl pe tastatură în timp ce dați clic pe numele procesului.

Spuneți că procesarea pe fundal pe 64 de biți nu funcționează bine cu dvs. Apoi, va trebui să îl dezactivați în ArcMap. Geoprocesare - & gt Opțiuni de geoprocesare - & gt Procesare fundal - & gt Activare, debifați caseta „Activare” pentru a dezactiva procesarea în fundal. Acum, puteți atașa pur și simplu depanatorul cu procesul ArcMap.


Spații de lucru cu mai multe rădăcini

Spațiile de lucru cu mai multe rădăcini sunt o capacitate avansată a codului VS, care vă permite să configurați mai multe foldere distincte pentru a face parte din spațiul de lucru. În loc să deschideți un folder ca spațiu de lucru, veți deschide un fișier JSON & ltname & gt.code-workspace care listează folderele spațiului de lucru. De exemplu:

Un spațiu de lucru multi-root deschis în VS Code

Notă: Diferența vizuală dintre deschiderea unui dosar și deschiderea unui fișier .code-workspace poate fi subtilă. Pentru a vă oferi un indiciu că un fișier .code-workspace a fost deschis, unele zone ale interfeței cu utilizatorul (de exemplu, rădăcina File Explorer) arată un plus (Spațiu de lucru) sufix lângă nume.

Spații de lucru multi-rădăcină fără titlu

Este ușor să adăugați sau să eliminați dosare în spațiul dvs. de lucru. Puteți începe deschizând un folder în VS Code și apoi adăugați mai multe foldere după cum doriți. Dacă nu ați deschis deja un fișier .code-spațiu de lucru, prima dată când adăugați un al doilea folder într-un spațiu de lucru, VS Code va crea automat un spațiu de lucru „fără titlu”. În fundal, VS Code păstrează automat un fișier untitled.code-workspace pentru dvs. care conține toate folderele și setările spațiului de lucru din sesiunea dvs. curentă. Spațiul de lucru va rămâne „fără titlu” până când decideți să îl salvați pe disc.

Un spațiu de lucru multi-rădăcină fără titlu deschis în VS Code

Notă: Într-adevăr, nu există nicio diferență între un spațiu de lucru fără titlu și un spațiu de lucru salvat, în afară de faptul că un spațiu de lucru fără titlu este creat automat pentru dvs. pentru confortul dvs. și se va restabili întotdeauna până când îl salvați. Ștergem automat spațiile de lucru fără titlu (după ce vă solicităm confirmarea) atunci când închideți o fereastră în care este deschis un spațiu de lucru fără titlu.


Receptor 4.12 pentru Windows

Notă: Citrix vă recomandă să descărcați cea mai recentă versiune a aplicației Citrix Workspace. Versiunea 1904 sau o versiune ulterioară conține remedieri critice de securitate. Pentru mai multe informații, consultați articolul Centrului de cunoștințe CTX251986

Compatibil cu
Windows 10, 8.1, 7, 2008R2, PC subțire, precum și Windows Server 2016, 2012 și 2012R2.

Sume de verificare ADB1AFF0625F6EE0C9745F6F8C523398CF3F4732EB3D2CA5966E97AE6D57536F

Remediați pentru a activa actualizarea automată a receptorului

Acțiune necesară pentru continuarea actualizărilor automate pe receptor.
Un nou certificat de securitate a fost lansat recent pentru a îmbunătăți și mai mult securitatea Citrix Receiver. Cu toate acestea, acest certificat dezactivează funcționalitatea de actualizare automată a receptorului. Este important ca tu descărcați și instalați instrumentul de actualizare automată Receiver lansat recent pentru a restabili funcționalitatea de actualizare a receptorului.

Vă rugăm să consultați documentația produsului pentru lista completă de caracteristici.

Acces de înaltă performanță la aplicațiile și desktop-urile virtuale Windows, acces oriunde de pe desktopul dvs., meniul Start, Receiver UI sau acces web cu Chrome, Internet Explorer sau Firefox.

Citrix Receiver poate fi utilizat pe PC-uri, tablete și clienți subțiri conectați la domeniu și non-domeniu. Oferă utilizarea de înaltă performanță a aplicațiilor virtualizate Skype for Business, a liniei de afaceri și a aplicațiilor de inginerie HDX 3D Pro, multimedia, acces la aplicații locale.

Limbi disponibile
Engleză, franceză, germană, japoneză, coreeană, rusă, chineză simplificată, spaniolă și chineză tradițională.

Scripturi pentru implementarea Citrix Receiver pentru Windows

Acest fișier ZIP conține exemple de scripturi pentru a implementa și configura Citrix Receiver. Este o descărcare opțională, oferită ca atare de Citrix pentru a servi ca exemplu. Înainte de utilizare, administratorii IT trebuie să personalizeze scripturile pentru a se potrivi mediului lor. Scripturile de dezinstalare și instalare pot fi utilizate conform indicațiilor din ghidul de actualizare pentru Citrix Receiver pentru Windows (CTX135933).

Șabloane Citrix ADMX / ADML pentru Editorul de politici de grup

Acest fișier ZIP conține fișiere ADMX și ADML pentru a implementa și configura Citrix Receiver utilizând editorul de obiecte de politică de grup. Este o descărcare opțională, pentru a fi utilizată de administratorii IT și nu destinată utilizării utilizatorilor finali. Șabloanele administrative (fișiere ADMX și ADML) pot fi utilizate așa cum se menționează în ghidul de actualizare pentru Citrix Receiver pentru Windows (CTX135933).


8 modalități noi de a împuternici lucrătorii Firstline și de a transforma modul în care lucrează cu Microsoft 365

Companiile aflate în fruntea transformării digitale recunosc cât de critic este să permită tuturor oamenilor lor tehnologia și instrumentele potrivite. De aceea, în industrii precum comerțul cu amănuntul, ospitalitatea și industria prelucrătoare, există o mișcare în desfășurare pentru a împuternici digital forța de muncă Firstline - cei peste 2 miliarde de oameni din întreaga lume care lucrează în servicii sau roluri orientate spre sarcini.

Cu Microsoft 365, cloud-ul de productivitate din lume, suntem într-o poziție unică de a ajuta companiile de toate dimensiunile și din toate industriile să ofere angajaților lor instrumentele și expertiza de care au nevoie pentru a face cea mai bună muncă, fără a sacrifica securitatea organizației sau a clienților lor. ' date. Pentru a oferi lucrătorilor Firstline instrumentele de care au nevoie, companiile trebuie să abordeze experiența unică a utilizatorului, securitatea și conformitatea și managementul IT.

Microsoft 365 pentru lucrătorii Firstline

Microsoft 365 combină cele mai bune aplicații intuitive de productivitate din clasă cu servicii cloud inteligente pentru a vă oferi forța de muncă Firstline.

Este inspirat să vedem cum liderii din industrie, precum IKEA și Mattress Firm, conduc niveluri mai ridicate de implicare a angajaților și îmbunătățesc experiența clienților, punând instrumente precum Microsoft Teams în mâinile forței lor de muncă Firstline. IKEA conectează toată lumea din organizație cu funcții familiare precum chat și apeluri video și digitalizează procesele de primă linie, cum ar fi gestionarea schimbărilor, pentru a economisi timp și costuri.

Acest videoclip a fost creat de Microsoft, cu acordul Ingka Group.

Mattress Firm oferă lucrătorilor Firstline acces în timp real la informațiile, resursele și expertiza de care au nevoie pentru a încânta clienții și a oferi o experiență de cumpărături mai bună.

Înaintea târgului de la Federația Națională de Vânzare cu amănuntul (NRF) de săptămâna viitoare, suntem încântați să introducem noi capabilități pentru Firstline Workers care vin la Microsoft 365. Iată o privire asupra a ceea ce va urma în curând:

Noi instrumente care facilitează comunicarea și gestionarea sarcinilor pentru lucrătorii Firstline

  1. Walkie Talkie în echipe—Această nouă experiență push-to-talk permite comunicarea vocală clară, instantanee și sigură prin cloud, transformând smartphone-urile și tabletele deținute de angajați sau companii într-un walkie-talkie. Funcționalitatea, integrată nativ în echipe, reduce numărul de dispozitive pe care angajații trebuie să le transporte și reduce costurile pentru IT. Spre deosebire de dispozitivele analogice cu rețele nesigure, clienții nu mai trebuie să-și facă griji cu privire la interconectare sau cu ascultarea din exterior. Și întrucât Walkie Talkie funcționează prin Wi-Fi sau date celulare, acesta poate fi utilizat în locații geografice. Capacitatea va fi disponibilă în aplicația mobilă Teams și se va integra cu noul Samsung Galaxy XCover Pro, un dispozitiv creat pentru lucrătorii de pe prima linie a oricărei industrii. Walkie Talkie va fi disponibil în previzualizare privată în Teams în prima jumătate a acestui an.

Experiență intuitivă push-to-talk pentru a conecta membrii echipei între departamente și locații.

  1. Sarcini de direcționare, publicare și raportareCu Tasks in Teams, acum clienții pot conduce la executarea consecventă a operațiunilor de magazin la scară largă în toate locațiile unei organizații. Conducerea corporativă și regională poate trimite liste de sarcini direcționate către locațiile relevante, cum ar fi anumite magazine de vânzare cu amănuntul, și le poate urmări progresul prin rapoarte automate în timp real. Managerii au instrumente pentru a direcționa cu ușurință activitățile în magazinele lor, iar lucrătorii Firstline au o listă simplă cu prioritate disponibilă prin intermediul dispozitivului personal sau al companiei, care le arată exact ce trebuie să facă în continuare. Sarcinile de direcționare, publicare și raportare vin în echipă în prima jumătate a acestui an.

Sediul central al companiei poate viza, atribui și urmări sarcini între locații. Muncitorii din prima linie pot vizualiza sarcinile care le sunt atribuite și din magazin.

  1. Integrări de management al forței de muncă—Clienții care utilizează sisteme de gestionare a forței de muncă terță parte - precum Kronos și JDA - pentru programare și timp și prezență pot începe acum să se integreze direct cu Shifts prin intermediul API-urilor Shift Graph și SDK. Scenariile acceptate includ gestionarea schimburilor, programelor, grupurilor de programare, cererilor de swap, cererilor de întrerupere și cererilor de schimb deschis. Conectorul JDA pentru Shifts este deschis și disponibil pe GitHub. Conectorul Kronos pentru Shifts va fi disponibil și pe GitHub la sfârșitul acestui trimestru.

Funcții îmbunătățite de gestionare a identității și accesului care facilitează pentru profesioniștii IT să mențină lucrătorii Firstline productivi și siguri

  1. Conectare prin SMS—Cu conectare prin SMS, Firstline Workers se pot conecta la contul lor Azure Active Directory (Azure AD) utilizând coduri SMS unice - reducând necesitatea de a reține numele de utilizator și parolele pentru toate aplicațiile Microsoft 365 și personalizate. Odată înscris, utilizatorul este solicitat să introducă numărul său de telefon, care generează un text SMS cu o parolă unică. Conectarea prin SMS este o experiență de conectare unică (SSO), care permite lucrătorilor Firstline să acceseze fără probleme toate aplicațiile pe care sunt autorizați să le utilizeze. Această nouă metodă de conectare poate fi activată pentru anumite grupuri și configurată la nivel de utilizator în portalul Personalul meu - contribuind la reducerea sarcinii IT.

Coduri SMS unice pe dispozitive mobile pentru a simplifica experiența de conectare pentru lucrătorii Firstline.

  1. Deconectare dispozitiv comun—Mulți lucrători Firstline folosesc o singură tabletă sau dispozitiv mobil care este partajat între schimburi. Acest lucru poate reprezenta provocări unice de securitate pentru organizație atunci când diferiți angajați care au acces la diferite tipuri de date folosesc același dispozitiv pe parcursul unei zile. Prin deconectarea partajată a dispozitivului, Firstline Workers va putea să se deconecteze de la toate aplicațiile Microsoft 365 și personalizate și sesiunile de browser cu un singur clic la sfârșitul schimbului - împiedicând accesul la datele lor, precum și orice acces la datele clienților. către următorul utilizator al dispozitivului respectiv.

Cu un singur clic, Firstline Workers se poate deconecta de la un dispozitiv Android partajat și se poate deconecta de la toate aplicațiile și sesiunile de browser pentru a împiedica partajarea datelor sensibile cu alt utilizator al dispozitivului.

  1. Comenzi de acces off-shift pentru aplicația Teams—Administratorii IT pot acum configura echipe pentru a limita accesul angajaților la aplicație pe dispozitivul lor personal în afara programului de lucru. Această caracteristică vă asigură că angajații nu lucrează involuntar în timp ce nu sunt în schimb și îi ajută pe angajatori să se conformeze reglementărilor muncii. Această funcție va începe să fie lansată pentru clienți în acest trimestru.

Afișați un mesaj și / sau dezactivați accesul la aplicația Teams când Firstline Workers sunt în afara turei.

  1. Gestionarea delegată a utilizatorilor— Managerii Firstline pot aproba resetările parolelor și pot permite angajaților să își folosească numerele de telefon pentru conectare prin SMS, totul printr-un singur portal personalizabil activat de IT pentru Managerii Firstline. Gestionarea delegată a utilizatorilor le poate oferi administratorilor Firstline acces la portalul Personalul meu, astfel încât să poată debloca problemele legate de personal - reducând povara gestionării identității în IT și menținând angajații conectați la aplicațiile de care au nevoie la locul de muncă.

Prin portalul Personalul meu, gestionarea delegată a utilizatorilor permite unui manager Firstline să gestioneze acreditările echipei lor și să asiste la resetarea parolelor.

  1. Provizionare de intrare de la SAP SuccessFactors la Azure AD—Serviciul de aprovizionare a utilizatorilor Azure AD se integrează acum cu SAP SuccessFactors, făcând mai ușor ca niciodată introducerea și gestionarea identităților lucrătorilor Firstline la scară, în orice aplicație care utilizează Azure AD. Această caracteristică - în previzualizare publică - se bazează pe capacitatea de a furniza utilizatorilor Azure AD din Workday, un alt sistem popular de gestionare a capitalului uman (HCM), deja disponibil în general. Integrarea cu aceste sisteme de înregistrare ajută IT-ul să mărească angajații Firstline & # 8217 la integrare și productivitate încă din prima zi.

Cu serviciul de aprovizionare a utilizatorilor Azure AD acum integrat cu SAP SuccessFactors, precum și cu Workday, este mai ușor ca oricând să introduceți la scară identitățile utilizatorilor Firstline Workers. Afișat aici, puteți începe ciclul de aprovizionare și puteți utiliza bara de progres și jurnalele de aprovizionare pentru a urmări procesul de aprovizionare.

Toate aceste funcții sunt așteptate să se desfășoare în prima jumătate a acestui an, cu excepția cazului în care se menționează.

Împuternicirea lucrătorilor din prima linie să obțină un avantaj competitiv

Noi cercetări în parteneriat cu Harvard Business Review Analytic Services evidențiază potențialul neexploatat al lucrătorilor Firstline în comerțul cu amănuntul.

Privind înainte

Acesta este doar următorul pas în călătoria noastră de a împuternici fiecare persoană și fiecare organizație de pe planetă să realizeze mai mult. Ne propunem să construim instrumente și experiențe pentru locul de muncă modern și pentru lucrătorii de la toate nivelurile organizației. Vom continua să dezvoltăm și să aducem pe piață capabilitățile și experiențele lucrătorilor din prima linie create în acest scop, în parteneriat cu clienții și liderii noștri din industrie. Și vom continua să inovăm și să construim caracteristici care simplifică munca, reunesc oamenii și ajută organizațiile mari și mici să realizeze mai mult. Vino să ne vezi săptămâna viitoare la NRF 2020 în standul # 4501.


ArcObjects .NET - Cum se închide / se lansează FeatureClass, Workspace, Factory - Sisteme de informații geografice

  • Deutsch
  • Engleză
  • Español
  • Français
  • Italiano
  • 日本語
  • 한국어
  • Português
  • Русский
  • 简体 中文
  • ceh
  • Lustrui

Inovare și gestionare sincronizată a programelor în colaborare, pentru programe noi

Integrarea tehnologiilor mecanice, software și a sistemelor electronice pentru sistemele de vehicule

Produse de larg consum și vânzare cu amănuntul

Inovație de produs prin gestionarea eficientă a formulărilor integrate, a ambalajului și a proceselor de fabricație

Dezvoltarea de noi produse utilizează datele pentru a îmbunătăți calitatea și profitabilitatea și pentru a reduce timpul de introducere pe piață și costurile

Colaborare în lanțul de aprovizionare în proiectarea, construcția, întreținerea și retragerea activelor critice pentru misiune

Mașini industriale și echipamente grele

Integrarea planificării proceselor de fabricație cu proiectarea și ingineria pentru complexitatea actuală a mașinilor

Vizibilitate, conformitate și răspundere pentru industriile financiare și de asigurări

Inovație în domeniul construcțiilor navale pentru a reduce durabil costul dezvoltării viitoarelor flote

Siemens PLM Software, un lider în domeniul mass-media și software de telecomunicații, oferă soluții digitale pentru tehnologie de ultimă generație care susține produse complexe pe o piață în schimbare rapidă.

Dispozitive medicale și produse farmaceutice

„Inovație de produs personalizată” prin digitalizare pentru a satisface cerințele pieței și a reduce costurile

Timp mai rapid pe piață, mai puține erori pentru dezvoltarea de software

Eliminați barierele și creșteți în timp ce vă mențineți linia de jos. Democratizăm cei mai robusti gemeni digitali pentru întreprinderile mici și mijlocii.


484 gânduri despre & ldquoWorkspace Environment Management (WEM) 2106 & rdquo

Am o problemă cu curățarea profilurilor wem. Se pare că profilurile au căi prea lungi și instrumentul de curățare eșuează cu eroare & # 8220 în timpul scanării profilurilor! & # 8221. Dacă scanez un singur profil și elimin fișierele cu cele mai lungi căi, totul funcționează bine. Există o soluție pentru asta? Rulăm 1912 ltsr cu2.

Sakari, eu am sunat aici pentru că am întâlnit asta foarte mult. Google Chrome este renumit pentru acești copaci de sub-dosare cu adevărat adânci pentru datele sale (cu șiruri lungi de caractere aleatorii pentru un singur nume de folder). Cred că sursa problemei este cartarea unităților și contextul aplicației. Dacă profilul utilizatorului este pe o unitate de rețea precum y :, mapat la servername something UPM_Profiles atunci când o altă aplicație (cum ar fi WEM) încearcă să acceseze acele foldere direct prin calea UNC, lungimea este extinsă cu 40 sau mai mult personaje. Nu știu cum să o rezolv, dar am crezut că ar fi util să știu cum au fost create aceste căi (care sunt prea lungi pentru a exista).

Am făcut upgrade la WEM 2012 și la următorul folder
& # 8220C: Program Files (x86) Norskale Norskale Infrastructure Services DBSync & # 8221 nu mai există. Ai idee dacă acesta este un comportament normal?

Cred că au eliminat acest folder când au eliminat vechea tehnologie de sincronizare a cache-ului agentului.

Hei Carl, ai văzut probleme în care dezactivezi splashscreen-ul WEM, dar acesta nu funcționează, afișează totuși splash screen la conectare?


Parametrii necesari

Facilităţi

Utilizați acest parametru pentru a specifica una sau mai multe locații care servesc drept facilități. Acest serviciu identifică cele mai bune facilități sau facilități pentru deservirea punctelor de cerere.

  • url - Specificați o cerere de interogare REST către orice caracteristică ArcGIS Server, hartă sau serviciu de geoprocesare care returnează un set de caracteristici JSON. Această proprietate este opțională. Cu toate acestea, trebuie specificate caracteristicile sau adresa URL.
  • caracteristici - Specificați o serie de caracteristici. Această proprietate este opțională. Cu toate acestea, trebuie specificate caracteristicile sau proprietatea URL.

    geometrie — Specificați geometria punctului de intrare conținând proprietățile x și y împreună cu o proprietate spatialReference. Dacă proprietatea spatialReference este definită pentru întregul JSON, nu este necesar să se definească această proprietate pentru fiecare geometrie. Acest lucru reduce dimensiunea intrării JSON dacă intrarea are multe caracteristici și îmbunătățește performanța. Această proprietate nu este necesară dacă coordonatele se află în aceeași referință spațială ca setul de date de rețea. Dacă coordonatele se află într-o referință spațială diferită, trebuie să specificați ID-ul cunoscut al referinței spațiale (WKID). Consultați sistemul de coordonate geografice și sistemul de coordonate proiectat pentru a căuta valorile WKID.

Ca o bună practică, se recomandă să specificați în mod explicit spatialReference și să o specificați pentru întregul JSON în loc de fiecare geometrie individuală.

Atribute pentru facilități

Când definiți facilitățile, puteți seta proprietăți pentru fiecare - cum ar fi numele sau tipul acesteia - utilizând următoarele atribute:

Numele facilității. Numele este inclus în numele liniilor de alocare a ieșirii, dacă instalația face parte din soluție.

  • 0 (candidat) - Un instrument care poate face parte din soluție.
  • 1 (Obligatoriu) - O facilitate care trebuie să facă parte din soluție.
  • 2 (Concurent) - O instalație rivală care potențial elimină cererea de la facilitățile dvs. Facilitățile concurenților sunt specifice pentru maximizarea cotei de piață și a cotelor țintă tipurile de probleme, acestea fiind ignorate în alte tipuri de probleme.

Ponderarea relativă a facilității, care este utilizată pentru a evalua atractivitatea, dorința sau părtinirea unei facilități în comparație cu alta.

De exemplu, o valoare de 2,0 poate surprinde preferința clienților care preferă, într-un raport de 2 la 1, cumpărăturile într-o unitate față de o altă facilitate. Factorii care pot afecta greutatea instalației includ suprafața pătrată, cartierul și vechimea clădirii. Valorile ponderale, altele decât una, sunt onorate doar de cota de piață maximizată și de tipurile de probleme ale cotei de piață țintă, fiind ignorate în alte tipuri de probleme.

Valoarea impedanței la care să se oprească căutarea punctelor de cerere dintr-o instalație dată. Punctul de cerere nu poate fi alocat unei facilități care depășește valoarea indicată aici.

Acest atribut vă permite să specificați o valoare diferită pentru fiecare punct de cerere. De exemplu, puteți constata că oamenii din zonele rurale sunt dispuși să călătorească până la 10 mile pentru a ajunge la o instalație, în timp ce urbanii sunt dispuși să călătorească doar până la 2 mile. Puteți modela acest comportament setând valoarea Cutoff pentru toate punctele de cerere din zonele rurale la 10 și setând valoarea Cutoff a punctelor de cerere din zonele urbane la 2.

Câmpul Capacitate este specific tipului de maximizare a capacității de acoperire capacitată, celelalte tipuri de probleme ignorând acest câmp.

Capacitatea specifică câtă cerere ponderată este capabilă să furnizeze instalația. Cererea în exces nu va fi alocată unei instalații chiar dacă cererea respectivă se încadrează în limita de măsurare implicită a facilității.

Orice valoare alocată câmpului Capacitate suprascrie parametrul Capacitate implicită (Default_Capacity în Python) pentru facilitatea dată.

Specificați direcția la care un vehicul poate ajunge și pleca de la instalație.

Unul din numerele întregi enumerate în coloana Valoare codificată din tabelul următor trebuie specificat ca valoare a acestui atribut. Valorile din coloana Setări sunt numele descriptive pentru valorile atributelor CurbApproach pe care le-ați putut vedea când utilizați software-ul de extensie ArcGIS Network Analyst.

Vehiculul se poate apropia și pleca de la instalație în ambele direcții, deci este permisă o întoarcere în U la instalație. Această setare poate fi aleasă dacă este posibil și de dorit ca vehiculul dvs. să se întoarcă la instalație. Această decizie poate depinde de lățimea drumului și de cantitatea de trafic sau de dacă instalația are o parcare în care vehiculele pot trage și se pot întoarce.

Toate combinațiile de sosire și plecare sunt permise cu abordarea pe ambele părți ale bordurii vehiculului.

Când vehiculul se apropie și iese din instalație, instalația trebuie să fie pe partea dreaptă a vehiculului. Întoarcerea în U este interzisă. Acesta este de obicei utilizat pentru vehicule precum autobuzele care trebuie să sosească cu stația de autobuz pe partea dreaptă.

Se arată combinația de sosire și plecare permisă pentru partea dreaptă a bordului vehiculului.

Când vehiculul se apropie și iese din instalație, instalația trebuie să se afle în partea stângă a vehiculului. Întoarcerea în U este interzisă. Acesta este de obicei utilizat pentru vehicule precum autobuzele care trebuie să sosească cu stația de autobuz pe partea stângă.

Se arată combinația de sosire și plecare permisă pentru partea stângă a bordului vehiculului.

Când vehiculul se apropie de instalație, instalația poate fi de ambele părți ale vehiculului, totuși, atunci când pleacă, vehiculul trebuie să continue în aceeași direcție în care a ajuns. Este interzisă o întoarcere.

Sunt afișate combinațiile permise de sosire și plecare pentru abordarea cu bordură fără U-Turn.

Atributul CurbApproach este conceput pentru a funcționa cu ambele tipuri de standarde naționale de conducere: trafic pe partea dreaptă (Statele Unite) și trafic pe partea stângă (Regatul Unit). În primul rând, luați în considerare un incident din partea stângă a unui vehicul. Este întotdeauna pe partea stângă, indiferent dacă vehiculul circulă pe jumătatea stângă sau dreaptă a drumului. Ceea ce se poate schimba cu standardele naționale de conducere este decizia dvs. de a aborda un incident dintr-una din cele două direcții, adică se termină în partea dreaptă sau stângă a vehiculului. De exemplu, dacă doriți să ajungeți la un incident și să nu aveți o bandă de circulație între vehicul și incident, alegeți 1 (partea dreaptă a vehiculului) în Statele Unite și 2 (partea stângă a vehiculului) în Regatul Unit.

Cu traficul pe partea dreaptă, abordarea bordurii care lasă vehiculul cel mai apropiat de instalație este partea dreaptă a vehiculului. Cu traficul din stânga, abordarea bordurii care lasă vehiculul cel mai aproape de instalație este partea stângă a vehiculului.

Direcția în care se mișcă un punct. Unitățile sunt grade și sunt măsurate în sensul acelor de ceasornic din nordul adevărat. Acest câmp este utilizat împreună cu câmpul BearingTol.

Datele purtătoare sunt de obicei trimise automat de pe un dispozitiv mobil echipat cu un receptor GPS. Încercați să includeți date despre rulmenți dacă încărcați o locație de intrare care se deplasează, cum ar fi un pieton sau un vehicul.

Folosirea acestui câmp tinde să împiedice adăugarea de locații la marginile greșite, care poate apărea atunci când un vehicul se află în apropierea unei intersecții sau a unui pasaj, de exemplu. Rulmentul ajută, de asemenea, instrumentul să determine pe ce parte a străzii este punctul.

Valoarea toleranței rulmentului creează o gamă de valori acceptabile ale lagărului atunci când localizați punctele mobile pe o margine utilizând câmpul rulment. Dacă valoarea câmpului Rulment se află în intervalul valorilor acceptabile care sunt generate de toleranța rulmentului pe o margine, punctul poate fi adăugat ca locație de rețea acolo, în caz contrar, se evaluează cel mai apropiat punct de pe marginea următoare.

Unitățile sunt în grade, iar valoarea implicită este 30. Valorile trebuie să fie mai mari de 0 și mai mici de 180. O valoare de 30 înseamnă că atunci când Network Analyst încearcă să adauge o locație de rețea pe o margine, un interval de valori acceptabile ale rulmentului este a generat 15 grade de ambele părți ale marginii (stânga și dreapta) și în ambele direcții digitalizate ale marginii.

Acest câmp este utilizat numai în procesul de rezolvare dacă câmpurile Bearing și BearingTol au și valori, totuși, introducerea unei valori de câmp NavLatency este opțională, chiar și atunci când valorile sunt prezente în Bearing și BearingTol. NavLatency indică cât cost se așteaptă să treacă din momentul în care informațiile GPS sunt trimise de la un vehicul în mișcare la un server și din momentul în care ruta procesată este primită de dispozitivul de navigație al vehiculului.

Unitățile NavLatency sunt aceleași cu unitățile atributului impedanță.

Exemple de sintaxă pentru facilități

Sintaxă pentru specificarea facilităților care utilizează o structură JSON pentru caracteristici

Sintaxă pentru specificarea facilităților care utilizează o adresă URL care returnează un răspuns JSON

Exemple pentru facilități

Exemplul 1: specificarea facilităților în aceeași referință spațială ca setul de date de rețea utilizând o structură JSON. Exemplul arată, de asemenea, cum să specificați unele atribute pentru incidente.

Exemplul 2: specificarea facilităților în referința spațială Web Mercator utilizând o structură JSON

Exemplul 3: specificarea facilităților folosind o adresă URL

Adresa URL face o interogare pentru câteva caracteristici dintr-un serviciu de hărți. De asemenea, poate fi specificată o adresă URL de interogare a unui serviciu de funcții.

Cerere_puncte

Utilizați acest parametru pentru a specifica unul sau mai multe puncte de cerere. Serviciul identifică cele mai bune facilități bazate în mare parte pe modul în care facilitățile deservesc punctele de cerere specificate.

  • url - Specificați o cerere de interogare REST către orice caracteristică ArcGIS Server, hartă sau serviciu de geoprocesare care returnează un set de caracteristici JSON. Această proprietate este opțională. Cu toate acestea, trebuie specificate caracteristicile sau adresa URL.
  • caracteristici - Specificați o serie de caracteristici. Această proprietate este opțională. Cu toate acestea, trebuie specificate caracteristicile sau proprietatea URL.

    geometrie — Specificați geometria punctului de intrare conținând proprietățile x și y împreună cu o proprietate spatialReference. Dacă proprietatea spatialReference este definită pentru întregul JSON, nu este necesar să se definească această proprietate pentru fiecare geometrie. Acest lucru reduce dimensiunea intrării JSON dacă intrarea are multe caracteristici și îmbunătățește performanța. Această proprietate nu este necesară dacă coordonatele se află în aceeași referință spațială ca setul de date de rețea. Dacă coordonatele se află într-o referință spațială diferită, trebuie să specificați ID-ul cunoscut al referinței spațiale (WKID). Consultați sistemul de coordonate geografice și sistemul de coordonate proiectat pentru a căuta valorile WKID.

Ca o bună practică, se recomandă să specificați în mod explicit spatialReference și să o specificați pentru întregul JSON în loc de fiecare geometrie individuală.

Atribute pentru demand_puncte

Când specificați punctele de cerere, puteți seta proprietăți pentru fiecare - cum ar fi numele sau greutatea acestuia - utilizând următoarele atribute:

Numele punctului de cerere. Numele este inclus în numele liniei sau liniilor de alocare a ieșirii, dacă punctul de cerere face parte din soluție.

Numele grupului căruia îi aparține punctul de cerere. Acest câmp este ignorat pentru tipurile de probleme Maximizați capacitatea capacitară, cota de piață țintă și Maximizați cota de piață.

Dacă punctele de cerere împărtășesc un nume de grup, solverul alocă toți membrii grupului la aceeași facilitate. (Dacă constrângerile, cum ar fi distanța limită, împiedică oricare dintre punctele de cerere din grup să ajungă la aceeași facilitate, niciunul dintre punctele de cerere nu este alocat.)

Ponderarea relativă a punctului de cerere. O valoare de 2,0 înseamnă că punctul de cerere este de două ori mai important decât unul cu o pondere de 1,0. Dacă punctele de cerere reprezintă gospodăriile, de exemplu, greutatea poate indica numărul de persoane din fiecare gospodărie.

Valoarea impedanței la care să se oprească căutarea punctelor de cerere dintr-o instalație dată. Punctul de cerere nu poate fi alocat unei facilități care depășește valoarea indicată aici.

Acest atribut vă permite să specificați o valoare limită pentru fiecare punct de cerere. De exemplu, puteți constata că oamenii din zonele rurale sunt dispuși să călătorească până la 10 mile pentru a ajunge la o instalație, în timp ce cei din zonele urbane sunt dispuși să călătorească doar până la 2 mile. Puteți modela acest comportament setând valoarea Cutoff pentru toate punctele de cerere din zonele rurale la 10 și setând valoarea Cutoff a punctelor de cerere din zonele urbane la 2.

Unitățile pentru această valoare de atribut sunt specificate de parametrul măsurare_unități.

O valoare pentru acest atribut înlocuiește setul implicit pentru analiză utilizând parametrul default_measurement_cutoff.Valoarea implicită este Null, ceea ce duce la utilizarea valorii implicite setate de parametrul default_measurement_cutoff pentru toate punctele de cerere.

Înlocuiți valoarea implicită setată pentru analiză de parametrul măsurare_transformație_model.

Înlocuiți valoarea implicită setată pentru analiză de parametrul măsurare_transformație_model.

Specificați direcția în care un vehicul poate ajunge sau pleca de la punctul de cerere. Unul din numerele întregi enumerate în coloana Valoare codificată din tabelul următor trebuie specificat ca valoare a acestui atribut. Valorile din coloana Setare sunt numele descriptive pentru valorile atributului CurbApproach pe care le-ați putut vedea atunci când utilizați software-ul de extensie ArcGIS Network Analyst.

Vehiculul se poate apropia și pleca de la punctul de cerere în ambele direcții.

Toate combinațiile de sosire și plecare sunt permise cu abordarea pe ambele părți ale bordurii vehiculului.

Când vehiculul se apropie sau pleacă de la punctul de cerere, punctul de cerere trebuie să fie în partea dreaptă a vehiculului. Acesta este de obicei utilizat pentru vehicule precum autobuzele care trebuie să sosească cu stația de autobuz pe partea dreaptă.

Se arată combinația de sosire și plecare permisă pentru partea dreaptă a bordului vehiculului.

Când vehiculul se apropie sau pleacă de punctul de cerere, punctul de cerere trebuie să fie în partea stângă a vehiculului. Aceasta este de obicei utilizată pentru vehicule precum autobuzele care trebuie să sosească cu stația de autobuz pe partea stângă.

Se arată combinația de sosire și plecare permisă pentru partea stângă a bordului vehiculului.

Când vehiculul se apropie de punctul de cerere, punctul de cerere poate fi de ambele părți ale vehiculului, totuși, atunci când acesta pleacă, vehiculul trebuie să continue în aceeași direcție în care a ajuns. Este interzisă o întoarcere în U.

Sunt afișate combinațiile permise de sosire și plecare pentru abordarea cu bordură fără U-Turn.

Atributul CurbApproach este conceput pentru a funcționa cu ambele tipuri de standarde naționale de conducere: trafic pe partea dreaptă (Statele Unite) și trafic pe partea stângă (Regatul Unit). În primul rând, luați în considerare un punct de cerere din partea stângă a unui vehicul. Este întotdeauna pe partea stângă, indiferent dacă vehiculul circulă pe jumătatea stângă sau dreaptă a drumului. Ceea ce se poate schimba cu standardele naționale de conducere este decizia dvs. de a aborda un punct de cerere dintr-una din cele două direcții, adică deci ajunge în partea dreaptă sau stângă a vehiculului. De exemplu, dacă doriți să ajungeți la un punct de cerere și să nu aveți o bandă de circulație între vehicul și punctul de cerere, alegeți 1 (Partea dreaptă a vehiculului) în Statele Unite și 2 (Partea stângă a vehiculului) în Statele Unite Regatul.

Cu traficul pe partea dreaptă, abordarea bordurii care lasă vehiculul cel mai aproape de punctul de cerere este partea dreaptă a vehiculului. Cu traficul din stânga, abordarea bordurii care lasă vehiculul cel mai aproape de punctul de cerere este partea stângă a vehiculului.

Direcția în care se mișcă un punct. Unitățile sunt grade și sunt măsurate în sensul acelor de ceasornic din nordul adevărat. Acest câmp este utilizat împreună cu câmpul BearingTol.

Datele purtătoare sunt de obicei trimise automat de pe un dispozitiv mobil echipat cu un receptor GPS. Încercați să includeți date despre rulmenți dacă încărcați o locație de intrare care se deplasează, cum ar fi un pieton sau un vehicul.

Folosirea acestui câmp tinde să împiedice adăugarea de locații la marginile greșite, care poate apărea atunci când un vehicul se află în apropierea unei intersecții sau a unui pasaj, de exemplu. Rulmentul ajută, de asemenea, instrumentul să determine pe ce parte a străzii este punctul.

Valoarea toleranței rulmentului creează o gamă de valori acceptabile ale lagărului atunci când localizați punctele mobile pe o margine utilizând câmpul rulment. Dacă valoarea câmpului Rulment se află în intervalul valorilor acceptabile care sunt generate de toleranța rulmentului pe o margine, punctul poate fi adăugat ca locație de rețea acolo, în caz contrar, se evaluează cel mai apropiat punct de pe marginea următoare.

Unitățile sunt în grade, iar valoarea implicită este 30. Valorile trebuie să fie mai mari de 0 și mai mici de 180. O valoare de 30 înseamnă că atunci când Network Analyst încearcă să adauge o locație de rețea pe o margine, un interval de valori acceptabile ale rulmentului este a generat 15 grade de ambele părți ale marginii (stânga și dreapta) și în ambele direcții digitalizate ale marginii.

Acest câmp este utilizat numai în procesul de rezolvare dacă câmpurile Bearing și BearingTol au și valori, totuși, introducerea unei valori de câmp NavLatency este opțională, chiar și atunci când valorile sunt prezente în Bearing și BearingTol. NavLatency indică cât cost se așteaptă să treacă din momentul în care informațiile GPS sunt trimise de la un vehicul în mișcare la un server și din momentul în care ruta procesată este primită de dispozitivul de navigație al vehiculului.

Unitățile NavLatency sunt aceleași cu unitățile atributului impedanță.

Exemple de sintaxă pentru demand_points

Sintaxă pentru specificarea punctelor de cerere utilizând o structură JSON pentru caracteristici

Sintaxă pentru specificarea punctelor de cerere utilizând o adresă URL care returnează un răspuns JSON

Exemple pentru demand_puncte

Exemplul 1: specificarea punctelor de cerere în referința spațială a setului de date de rețea utilizând o structură JSON. Exemplul arată, de asemenea, cum să specificați unele atribute pentru punctele de cerere.

Exemplul 2: specificarea punctelor de cerere în referința spațială Web Mercator utilizând o structură JSON

Exemplul 3: specificarea punctelor de cerere folosind o adresă URL

Adresa URL face o interogare pentru câteva caracteristici dintr-un serviciu de hărți. De asemenea, poate fi specificată o adresă URL de interogare a unui serviciu de funcții.

Jeton

Utilizați acest parametru pentru a specifica un token care oferă identitatea unui utilizator care are permisiunile de acces la serviciu. Pagina de servicii de acces oferă mai multe informații despre cum poate fi obținut un astfel de jeton de acces.

Exemplu (înlocuiți & ltyourToken & gt cu un simbol valid):

Utilizați acest parametru pentru a specifica formatul de răspuns. Parametrul poate avea ca argumente html, json sau pjson, de exemplu, f = json. Valoarea pjson este utilizată pentru imprimarea răspunsului JSON într-un format frumos.


Depanarea instalărilor și dezinstalărilor .NET Framework blocate

Când rulați programul de instalare web sau offline pentru .NET Framework 4.5 sau versiuni ulterioare, este posibil să întâmpinați o problemă care împiedică sau blochează instalarea .NET Framework. Următorul tabel listează posibilele probleme de blocare și oferă linkuri către informații de depanare.

În Windows 8 și versiuni ulterioare, .NET Framework este o componentă a sistemului de operare și nu poate fi dezinstalat independent. Actualizările la .NET Framework apar în Actualizări instalate fila Panoului de control Programe si caracteristici aplicație. Pentru sistemele de operare pe care .NET Framework nu este preinstalat, .NET Framework apare în Dezinstalați sau modificați un program fila (sau Adăugați / eliminați programe fila) din Program și caracteristici din Panoul de control. Pentru informații despre versiunile Windows pe care este instalat .NET Framework, consultați Cerințele de sistem.

Deoarece versiunile 4.x ale .NET Framework sunt actualizări în loc, nu puteți instala o versiune anterioară a .NET Framework 4.x pe un sistem care are deja instalată o versiune ulterioară. De exemplu, pe un sistem cu Windows 10 Fall Creators Update, nu puteți instala .NET Framework 4.6.2, deoarece .NET Framework 4.7.1 este preinstalat cu sistemul de operare.

Puteți determina ce versiuni ale .NET Framework sunt instalate pe un sistem. Vedeți Cum să: determinați ce versiuni .NET Framework sunt instalate pentru mai multe informații.

În acest tabel, 4.5.x se referă la .NET Framework 4.5 și versiunile sale punctuale, 4.5.1 și 4.5.2, 4.6.x se referă la .NET Framework 4.6 și versiunile sale punctuale, 4.6.1 și 4.6.2 , 4.7.x se referă la .NET Framework 4.7 și versiunile sale punctuale, 4.7.1 și 4.7.2 și 4.8 se referă la .NET Framework 4.8.

Probleme de compatibilitate a programului

Instalarea .NET Framework 4.5 sau a versiunilor sale punctuale eșuează cu un cod de eroare 1603 sau blocuri atunci când rulează în modul de compatibilitate a programului Windows. Asistent de compatibilitate a programului indică faptul că .NET Framework ar putea să nu fi fost instalat corect și vă solicită să îl reinstalați utilizând setarea recomandată (modul de compatibilitate a programului). Modul de compatibilitate a programului ar fi putut fi, de asemenea, setat de Asistentul de compatibilitate a programului la încercările anterioare nereușite sau anulate de a rula .NET Framework Setup.

Programul de instalare .NET Framework nu poate rula în modul Compatibilitate program. Pentru a rezolva această problemă de blocare, trebuie să utilizați Editorul de registry pentru a vă asigura că setarea modului de compatibilitate nu este activată la nivel de sistem:

Alege start , apoi alegeți Alerga.

În Alerga caseta de dialog, tastați & quotregedit & quot, apoi alegeți O.K.

În Registry Editor, navigați la următoarele subchei:

HKEY_CURRENT_USER SOFTWARE Microsoft Windows NT CurrentVersion AppCompatFlags Compatibility Assistant Persisted

În coloana Nume, căutați numele de descărcare .NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 sau 4.7.2, în funcție de versiunea în care sunteți instalarea și ștergerea acestor intrări. Pentru nume de descărcare, consultați articolul Instalarea .NET Framework pentru dezvoltatori.

Executați din nou programul de instalare .NET Framework pentru versiunile 4.5, 4.5.1, 4.5.2 sau 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 sau 4.7.2.


Priveste filmarea: Layer Arc Map to KML Google Earth by KSHITIZ