Vairāk

Fmeobjektu importēšana PyQGIS


Es daudz izmantoju FME, lai manipulētu ar telpiskajiem datiem, un vēlētos izmantot tās Python bibliotēku, fmeobjects in PyQgis.

Ja savā standarta Python IDE izpildu sekojošo, tas darbojas labi:

importēt sys sys.path.append ("C:  Program Files (x86)  fme  fmeobjects  python27") importēt fmeobjects

Bet tieši tas pats kods, palaižot PyQgis, izmet ImportError: DLL ielāde neizdevās: norādīto moduli nevarēja atrast.

Faktiski fmeobjects ir .pyd fails. Es nezinu, vai tā ir problēma, jo es saprotu, ka pyd un dll ir viens otram līdzīgi.

Kā panākt, lai fmeobjekti tiktu importēti PyQgis?


2016. gada atjauninājums! Es pats mēģināju panākt, lai tas darbotos, un domāju, ka ielikšu līdz šim izpētīto. Tas tiek darīts operētājsistēmā Windows 10. Linux lietotājiem - izmēģiniet to, ja rodas problēmas.

Brīdinājums: Tiem, kas vēlas integrēt FME 2016 python qgis, ziniet, ka tas nav tik vienkārši kā “pip install fmeobjects” :)


1. darbība

Atrodiet savu fmeobjects.pyd failu. Manuprāt, šī ir visgrūtākā daļa! Iepazīstieties ar .pyd failiem šeit. Tas būtībā ir Python Windows DLL fails.

Python 2.7 failam jābūt šādam:

C:  apps  FME2016  fmeobjects  python27  fmeobjects.pyd

QGIS pagaidām vēl neizmanto Python3, bet, ja tā tiek izmantota gaidāmajā QGIS 3 versijā, jums jāizmanto:

C:  apps  FME2016  fmeobjects  python34  fmeobjects.pyd

Manuprāt, fails atradās vietnē D: apps FME2016 fmeobjects python27 fmeobjects.pyd. Tāpēc meklējiet, līdz atrodat šo failu.


2. solis

Tālāk importēsim moduli fmeobjects! Oficiālākā dokumentācija, ko es varu atrast, ir šeit, ņemiet vērā, ka tā attiecas uz FME 2015, taču tai vajadzētu darboties 2016. gadā. “Teorijā” jādarbojas šādam kodam:

importēt sys sys.path.append ("C:  apps  FME2016  fmeobjects  python27") importēt fmeobjects

Uzlabots

Ja tiek parādīts kļūdas ziņojums "ImportError: DLL ielāde neizdevās: norādīto moduli nevarēja atrast", skatiet šeit.

Tagad, ja vēlaties, varat doties uz vietni http://www.dependencywalker.com/, lejupielādēt lietojumprogrammu (tā ir pārnēsājama) un meklēt savu fmeobjects.pyd failu un to palaist

Skatiet, kā fme.dll, fmepython27.dll, fmeutil.dll un rwtool_fme.dll ir dzelteni otrajā attēlā? Tām trūkst atkarību, kas nav mūsu sys.path.

Šķiet, ka šie četri faili atrodas augstāka līmeņa direktorijā (manā gadījumā D: apps FME2016 ). Tāpēc mēs pievienojam šo augstākā līmeņa direktoriju mūsu sys.path, kā arī cd (mainīt direktoriju) vietā, kur atrodas fme, lai fmeobjects tiktu pareizi ielādēti. Tādējādi python skripts kļūst šāds:

importēt os importēt sys sys.path.append ("C:  apps  FME2016  fmeobjects  python27") sys.path.append ("C:  apps  FME2016 ") #add this os .chdir ("C:  apps  FME2016 ") #arī to dariet (kaut kā nepieciešams) importējiet fmeobjects

3. solis

Pārbaudiet, vai lietas darbojas.

licMan = fmeobjects.FMELicenseManager () # Drukāt FME licences veidu. print 'FME License Type:', licMan.getLicenseType () # FME licences rekvizītu nosaukumi.

Piezīme: ja šeit tiek parādīta kļūda "FMEException: FMEException: -1:", es domāju, ka tas nozīmē, ka jūsu python skripts nedarbojas tajā pašā datorā kā FME Desktop. Piem. jūsu kods ir lokālajā diskdzinī, bet FME ir instalēts serverī.


4. solis

Vadiet darbagaldu!

strādnieks = fmeobjects.FMEWorkspaceRunner () worker.run ('D: /fme/Workspaces/test.fmw')

5. solis

Iegremdējieties API.


Personīgi es daudz un vairāk palaižu savu skriptu, tāpēc man ir daži paziņojumi, ja-tad, un mēģiniet, izņemot:

importēt sys fmePydPath = "C:  apps  FME2016  fmeobjects  python27" #fme faila ceļš fmePath = "C:  apps  FME2016 ", ja fmePydPath nav sys.path: sys.path. pievienot (fmePydPath) #neļauj pārāk daudz pievienot, ja fmePath nav sistēmā sys.path: sys.path.append (fmePath) os.chdir (fmePath) importēt fmeobjects #Pārbauda, ​​vai lietas darbojas licMan = fmeobjects.FMELicenseManager () #Drukāt FME licences veids . print 'FME License Type:', licMan.getLicenseType () # FME licences rekvizītu nosaukumi. #Izpilda darbvietas (.fmw) failu, mēģiniet: strādnieks = fmeobjects.FMEWorkspaceRunner () strādnieks.run ('D: /fme/Workspaces/test.fmw'), izņemot fmeobjects.FMEException, kļūda: print "FMEException: %s" % kļūdīties

Sistēmā Windows QGIS ir sava Python versija. Pēc noklusējuma, ja instalējat bibliotēkas (piem.pip instalēt_bibliotēkas nosaukums) tas tiks instalēts tikai jūsu tīrā Python versijā, nevis QGIS.

Šeit ir ceļvedis, manuprāt, tas varētu būt noderīgi: http://quantumofgis.blogspot.be/2014/11/qgis-standalone-and-python-modules.html


Mēģiniet kopēt fmeobjects.pyd uz QGIS vietni.

No:

fmeobjects python27 fmeobjects.pyd

Kam:

Lib site-paketes fmeobjects.pyd