Veel

Sulgege liiniliin PostGis'is vooderdamiseks

Sulgege liiniliin PostGis'is vooderdamiseks


kas on olemas funktsioon, mis sulgeb aliiniridaavooderdamine? Ma ei suutnud sellist funktsiooni dokumentatsioonist leida.


Kas peate silmas rea lõpp -punkti ühendamist alguspunktiga? See peaks aitama aadressil http://postgis.net/docs/ST_AddPoint.html.


Sulgege liinijoonistamine PostGis - geograafilistes infosüsteemides

PostGIS ruumilise andmebaasi laiendus PostgreSQL -ile

Kasutage Git või Checkout koos SVN -iga, kasutades veebi URL -i.

Töötage kiiresti meie ametliku CLI -ga. Lisateave.

GitHubi töölaua käivitamine

Kui midagi ei juhtu, laadige alla GitHub Desktop ja proovige uuesti.

GitHubi töölaua käivitamine

Kui midagi ei juhtu, laadige alla GitHub Desktop ja proovige uuesti.

Xcode'i käivitamine

Kui midagi ei juhtu, laadige alla Xcode ja proovige uuesti.

Visual Studio koodi käivitamine

Teie koodiruum avaneb, kui see on valmis.

Teie koodiruumi ettevalmistamisel ilmnes probleem. Proovige uuesti.

See haru ei ole eespool ülesvoolu postgis: main.

Uusi kohustusi veel pole. Naudi oma päeva!


PostGIS -i toe lubamine ja eemaldamine

Greenplumi andmebaasi PostGIS laiendus sisaldab skripti postgis_manager.sh, mis installib või eemaldab andmebaasis nii PostGIS kui ka PostGIS Rasteri funktsioonid. Pärast PostGIS-i laienduspaketi installimist on skript asukohas $ GPHOME/share/postgresql/contrib/postgis-2.1/. Skript postgis_manager.sh käitab SQL -skripte, mis installivad või eemaldavad andmebaasist PostGIS ja PostGIS Raster.

Lisateavet PostGIS ja PostGIS Raster SQL skriptide ning vajalike PostGIS Raster keskkonnamuutujate kohta leiate teemast PostGIS Support Scripts.

PostGIS -i toe lubamine

Skript käivitab kõik PostGIS SQL -i skriptid, mis lubavad andmebaasis PostGIS -i: install/postgis.sql, install/rtpostgis.sql install/spatial_ref_sys.sql, install/postgis_comments.sql ja install/raster_comments.sql.

Paketi postGIS installimine lisab need read PostGIS Rasteri toe failile greenplum_path.sh.

PostGIS -i toe eemaldamine

Skript käitab nii PostGIS SQL -i skripte, mis eemaldavad andmebaasist PostGIS -i ja PostGIS Rasteri: uninstall_rtpostgis.sql ja uninstall_postgis.sql.

Skript postgis_manager.sh ei eemalda neid PostGIS Rasteri keskkonnamuutujaid greenplum_path.sh faili: GDAL_DATA, POSTGIS_ENABLE_OUTDB_RASTERS, POSTGIS_GDAL_ENABLED_DRIVERS. Keskkonnamuutujad eemaldatakse, kui desinstallite PostGIS -i laienduspaketi utiliidiga gppkg.


Kasutamine

Järgmised SQL-näited loovad mitte-OpenGIS-tabeleid ja geomeetriat.

Järgmised SQL -i näidislaused loovad tabeli ja lisavad tabelisse geomeetriaveeru koos SRID -täisarvuga, mis viitab kirjele tabelis SPATIAL_REF_SYS. Laused INSERT lisavad tabelisse kaks geopunkti.

Ruumilised indeksid

PostgreSQL toetab GiST ruumilist indekseerimist. GiST -skeem pakub indekseerimist isegi suurtele objektidele. See kasutab kahjumliku indekseerimise süsteemi, kus väiksemad objektid toimivad indeksi suuremate objektide puhverserverina. PostGIS -i indekseerimissüsteemis kasutavad kõik objektid oma piiravaid kaste indeksi puhverserverina.

Ruumilise indeksi loomine

GiST -indeksi saate koostada järgmiselt.


Geomeetria töötlemine

Oluline osa sellest, mida osm2pgsql teeb, on geomeetria loomine OSM -i andmetest. OSM -is on ainult sõlmedel asukoht, viisid saavad oma geomeetria liikmesõlmedelt ja suhted saavad oma geomeetria liikmete teedelt ja sõlmedelt. Osm2pgsql koondab kõik seotud objektide andmed kehtivateks geomeetriateks.

Geomeetria tüübid

Geomeetria tüübid, mida PostGIS toetab, pärinevad OpenGIS konsortsiumi (OGC) määratletud lihtsatest funktsioonidest. Osm2pgsql loob OSM -i andmetest seda tüüpi geomeetria.

Geomeetria tüüp Loodud OSM -i andmetest
Punkt Loodud sõlmedest.
LineString Loodud viisidest.
Hulknurk Loodud suletud viisidest või mõnest suhtest.
MultiPoint Pole kunagi loodud.
MultiLineString Loodud (tükeldatud) viisidest või mõnest suhtest.
Mitmikpolügoon Loodud suletud viisidest või mõnest suhtest.

Üksik vs mitu geomeetriat

Üldiselt loob osm2pgsql võimalikult lihtsa geomeetria. Sõlmed muutuvad punktideks, teed LineStringideks või hulknurkadeks. Mitmepolügoonilise suhte saab muuta hulknurgaks või mitmepolügooniks, sõltuvalt sellest, kas sellel on üks või mitu välimist rõngast. Samamoodi saab marsruudi seose muuta LineStringiks, kui marsruut on algusest lõpuni ühendatud, või MultiLineStringiks, kui see pole ühendatud või on kohti, kus marsruut lõheneb.

Mõnel juhul jagab osm2pgsql mitme* geomeetria lihtsateks geomeetriateks ja lisab igaüks oma andmebaasi reale. See võib muuta renderdamise kiiremaks, sest renderdaja saab hakkama ühe väiksema geomeetriaga tegelemise asemel mitme väiksema geomeetriaga. Sõltuvalt sellest, mida te andmetega teete, võib aga sisse tuua ka probleeme. Selles blogipostituses on sellel teemal sügavam arutelu. Selle seadistamise üksikasju leiate flex ja pgsql väljundi peatükkidest.

See tähendab ka seda, et teie id -veerud pole ainulaadsed, kuna nüüd on samast OSM -objektist loodud mitu rida. Vaadake jaotisest Esmased võtmed ja kordumatud ID -d, kuidas seda lahendada.

Geomeetria kehtivus

Punktide geomeetria kehtib alati (kui koordinaadid on õiges vahemikus). LineStringi geomeetria kehtib ka alati, jooned võivad ristuda, kuid see on okei. Hulknurga ja mitmepolügoonilise geomeetria puhul on see keerulisem. Sellise geomeetria võib kehtetuks muutuda mitmel viisil. Näiteks kui hulknurga piir on joonistatud joonisele kaheksa, ei ole tulemuseks kehtiv hulknurk. Andmebaas salvestab õnnelikult sellised kehtetud hulknurgad, kuid see võib põhjustada probleeme hiljem, kui proovite neid joonistada või teha arvutusi (näiteks ala), mis põhinevad kehtetul geomeetrial. Sellepärast ei laadi osm2pgsql kunagi teie andmebaasi kehtetuid geomeetriaid. Selle asemel ignoreeritakse objekti ilma sõnumita.

Mitmepolügooniliste probleemide diagnoosimisel saate kasutada OpenStreetMap inspektori alade vaadet.

Sõlmede töötlemine

Sõlmede geomeetria muudetakse alati punktgeomeetriateks.

Viiside töötlemine

Sõltuvalt siltidest modelleerivad OSM viisid kas LineStringi või Polygoni või mõlemat! Viis märgistusega highway = primaarne on tavaliselt lineaarne omadus, viis, kuidas märgistatud landuse = põllumaa on tavaliselt hulknurk. Kui hulknurga tüüpi siltidega viis pole suletud, on geomeetria kehtetu, on see viga ja objekti ignoreeritakse. Mõne märgendi puhul, nagu man_made = pier, on suletud viisid lineaarsed ja suletud viisid hulknurga omadused.

Kui kaardistaja soovib tühistada viisi tõlgendamise viisi, saavad nad kasutada piirkonna märgendit: Märgend area = yes muudab tavaliselt lineaarse funktsiooni hulknurga funktsiooniks, näiteks muudab jalakäijate tänava (maantee = jalakäija) jalakäijaks piirkonnas. Märgendiala = ei muudab hulknurga funktsiooni lineaarseks tunnuseks.

Puudub kindel loend, mis tähistab lineaarset või hulknurkset funktsiooni. Osm2pgsql võimaldab kasutajal otsustada. Selle konfigureerimine sõltub teie valitud väljundist (vt järgmist peatükki). Konfiguratsioonifailide näidistes on loendid, mis peaksid hõlmama enamikku levinumaid silte, kuid võib -olla peate loendeid laiendama, kui kasutate ebatavalisemaid silte.

Osm2pgsql võib jagada viisidest loodud pikad LineStrings väiksemateks segmentideks. See võib muuta plaatide renderdamise kiiremaks, sest konkreetse paani renderdamisel tuleb andmebaasist alla laadida väiksemad geomeetriad. Pgsql -väljund jaguneb alati pikkadeks LineStrings -ideks, laiaulatuslikus projektsioonis ei ole jooned pikemad kui 1 °, Web Mercatori ridades ei ole pikemad kui 100 000 ühikut (umbes 100 000 meetrit ekvaatoril). Paindlik väljund jagab LineStrings ainult siis, kui kasutatakse teisendusparameetrit split_at, vt üksikasju paindliku väljundi peatüki geomeetria teisenduste jaotisest. Vt ka ülalolevat jaotist Üksik vs mitu geomeetriat.

Suhete töötlemine

Seoseid on palju ja neid saab kasutada igasuguste geomeetriate jaoks. Tavaliselt sõltub seose tüübisildist, milline geomeetria sellel peaks olema:

Suhte tüüp Tüüpiline geomeetria loodud
tüüp = hulknurk (Mitme) hulknurk
tüüp = piir (Multi) LineString või (Multi) Polygon sõltuvalt sellest, kas olete huvitatud piirist või selle piirkonnast.
tüüp = marsruut (Multi) LineString

Osm2pgsql paindlik väljund võib luua (mitme) hulknurga või (mitme) lineStringi geomeetria mis tahes seosest, teisi geomeetriaid praegu ei toetata. Üksikasju vt paindliku väljundi peatüki Geomeetria teisenduste jaotisest.

Kui kasutate pgsql -väljundi vana „C -teisendust”, on tüübi multipolygon, piiri ja marsruudi seoste geomeetria tüübid kõvakodeeritud. Kui kasutate "Lua teisendust", saate neid konfigureerida.

Prognoosid

Osm2pgsql suudab luua geomeetriat paljudes projektsioonides. Kui kasutate pgsql väljundit, saab projektsiooni valida käsurea suvanditega, paindväljundi kasutamisel on projektsioonid määratud Lua stiilis failis. Vaikimisi on alati „Web Mercator”.

Latlong (WGS84)

WGS84 koordinaatide viitesüsteemi OpenStreetMap algsed laius- ja pikkuskraadid. See valitakse tavaliselt siis, kui soovite andmete kohta mingisugust analüüsi teha või hiljem ümber projitseerida.

Veebi Mercator

Seda projektsiooni kasutatakse kõige sagedamini plaaditud veebikaartide jaoks. See on osm2pgsql vaikimisi.

Andmed, mis jäävad kaugemale kui umbes 85 ° põhja ja lõuna pool, lõigatakse ära, kuna neid ei saa selles projektsioonis esitada.

Muud prognoosid

Kui osm2pgsql koostati koos PROJ raamatukogu toega, toetab see kõiki selle teegi toetatud projektsioone.

Versioon & gt = 1.4.0 Helistage osm2pgsql --versioon, et näha, kas teie binaarfail on kompileeritud PROJ -ga ja millise versiooniga.

Pange tähele, et kaardistamisstiilid sõltuvad sageli kasutatud projektsioonist. Enamik kaardistamisstiilide konfiguratsioone lubab või keelab teatud renderdusstiilid sõltuvalt kaardi skaalast või suumitasemest. Kuid sisukas skaala sõltub projektsioonist. Enamik stiile, millega kokku puutute, on tõenäoliselt loodud Web Mercatori jaoks ja vajavad muudatusi, et teistes prognoosides toredaid kaarte saada.


Sulgege liiniliin PostGis - geograafilistes infosüsteemides

Autor: Sean Gillies, [email protected]>
Versioon: 1.7.0
Kuupäev: | täna |
Autoriõigus: See teos on litsentsitud Ameerika Ühendriikide Creative Commons Attribution 3.0 litsentsi alusel.
Abstraktne:Selles dokumendis selgitatakse, kuidas kasutada Shapely Pythoni paketti arvutusgeomeetria jaoks.

Deterministlik ruumianalüüs on põllumajanduse, ökoloogia, epidemioloogia, sotsioloogia ja paljude teiste valdkondade probleemide arvutuslike lähenemisviiside oluline komponent. Milline on nende loomade elupaigalappide mõõdetud perimeetri/pindala suhe? Millised selle linna kinnistud lõikuvad selle uue üleujutusmudeli 50-aastase üleujutuskontuuriga? Mis on leiukohtade ulatus iidsete keraamikatoodete jaoks, millel on tegija märgid "A" ja "B", ja kus ulatus kattub? Milline on tee kodust kontorisse, kus parimad seelikud tuvastasid asukohapõhise rämpsposti tsoonid? Need on vaid mõned võimalikest küsimustest, mida saab lahendada mittestatistilise ruumianalüüsi ja täpsemalt arvutusliku geomeetria abil.

Shapely on Pythoni pakett tasapinnaliste funktsioonide hulgateoreetiliseks analüüsiks ja manipuleerimiseks, kasutades (Pythoni: mod: `ctypes` mooduli kaudu) funktsioone hästi tuntud ja laialdaselt kasutatavast GEOS-i teegist. GEOS, Java Topology Suite'i (JTS) port, on PostgreSQL RDBMS -i ruumilise laienduse geomeetriamootor. JTS -i ja GEOS -i kujundus juhindub suuresti avatud georuumilise konsortsiumi lihtsate funktsioonide juurdepääsu spetsifikatsioonist [1] ning Shapely järgib peamiselt samu standardklasse ja toiminguid. Shapely on seega sügavalt juurdunud geograafiliste infosüsteemide (GIS) maailma konventsioonidesse, kuid soovib olla sama kasulik ka programmeerijatele, kes tegelevad ebatraditsiooniliste probleemidega.

Shapely esimene eeldus on, et Pythoni programmeerijad peaksid suutma teostada PostGIS -tüüpi geomeetriaoperatsioone väljaspool RDBMS -i. Kõik geograafilised andmed ei pärine ega asu RDBMS -is või neid on kõige parem töödelda SQL -i abil. Saame töö tegemiseks laadida andmed ruumilisse RDBMS -i, kuid kui puuduvad volitused nende haldamiseks ("M" jaotises "RDBMS"), siis aja jooksul andmebaasis olevaid andmeid kasutame selle töö jaoks vale tööriista jaoks. Teine eeldus on, et tunnuste püsivus, serialiseerimine ja kaardiprojektsioon on olulised, kuid ortogonaalsed probleemid. Teil ei pruugi vaja minna sadat GIS -vormingus lugejat ja kirjutajat ega osariigiplaneeringu projektsioone ning Shapely ei koorma teid nendega. Kolmas eeldus on, et Pythoni idioomid ületavad GIS -i (või antud juhul Java, kuna GEOS -i teek on tuletatud Java -projektist) idioomidest.

Kui teile meeldib idiomaatiline Python ja saate sellest kasu, hindate pakette, mis üht asja hästi teevad, ja nõustute, et ruumiliselt lubatud RDBMS on sageli arvutusgeomeetria töö jaoks vale tööriist, võib Shapely olla teie jaoks.

Shapely rakendatud geomeetriliste objektide põhitüübid on punktid, kõverad ja pinnad. Igaüks neist on seotud kolme (võib -olla lõpmatu) punktiga tasapinnas. Objekti sise-, piir- ja väliskomplektid on teineteist välistavad ja nende liit kattub kogu tasapinnaga [2].

  • Punktil on täpselt ühest punktist koosnev sisekomplekt, piirikomplekt, millel puuduvad täpselt punktid, ja kõigi teiste punktide väline komplekt. Punkti topoloogiline mõõde on 0.
  • Kõveral on sisekomplekt, mis koosneb selle pikkuses lõpmatult paljudest punktidest (kujutage ette ruumis lohistatud punkti), piirikomplekt, mis koosneb kahest lõpp -punktist, ja kõigi teiste punktide väliskomplekt. Kõvera topoloogiline mõõde on 1.
  • Surface'il on sisekomplekt, mis koosneb lõpmatult paljudest punktidest (kujutage ette kõver, mis lohistatakse ruumis, et katta ala), piirikomplekt, mis koosneb ühest või mitmest kõverast, ja kõigi teiste punktide väliskomplekt, sealhulgas augud, mis võivad pinnal olemas. Pinna topoloogiline mõõde on 2.

See võib tunduda pisut esoteeriline, kuid aitab selgitada Shapely ruumiliste predikaatide tähendusi ja see on nii sügavalt teooriasse kui käesolev käsiraamat. Punktikogumiteooria tagajärgi, sealhulgas mõningaid, mis avalduvad kui "gotchas", erinevate klasside puhul käsitletakse käesolevas juhendis hiljem.

Punktitüüpi rakendab Point -klassi kõver klasside LineString ja LinearRing abil ning pind on hulknurga klassi poolt. Shapely ei rakenda ühtlasi (st pidevaid puutujaid) kõveraid. Kõik kõverad tuleb lähendada lineaarsete splainidega. Kõik ümardatud laigud tuleb lähendada piirkondadega, mis on piiratud lineaarsete lainetega.

Punktikogusid rakendab klass MultiPoint, kõverate kogusid klass MultiLineString ja pindade kogusid klass MultiPolygon. Need kogud ei ole arvutuslikult olulised, kuid on kasulikud teatud tüüpi funktsioonide modelleerimiseks. Näiteks Y-kujuline joonefunktsioon on MultiLineString tervikuna hästi modelleeritud.

Standardandmemudelil on teatud tüüpi geomeetriliste objektide jaoks spetsiifilised lisapiirangud, mida käsitletakse käesoleva juhendi järgmistes osades.

Ruumiandmete mudeliga kaasneb rühm loomulikke keelelisi suhteid geomeetriliste objektide vahel - sisaldab, lõikub, kattub, puudutab jne - ja teoreetiline raamistik nende mõistmiseks, kasutades nende komponentpunktide hulga vastastikuste ristumiste maatriksit 3x3 [3 ]: DE-9IM. DE-9IM-i suhete põhjalik ülevaade on [4] ja seda käesolevas juhendis ei korrata.

Järgides ühise tehnilise kirjelduse [5] tehnilisi andmeid [5], tehakse käesolevas juhendis vahet konstruktiivsetel (puhver, kumer kere) ja kogumiteoreetilistel toimingutel (ristmik, liitumine jne). Üksikuid toiminguid kirjeldatakse täielikult juhendi järgmises osas.

Kuigi Maa pole lame - ja selles osas mitte just sfääriline -, on palju analüütilisi probleeme, millele saab läheneda, muutes Maa tunnused Descartes'i tasapinnale, rakendades tõestatud algoritme ja muutes seejärel tulemused tagasi geograafilisteks koordinaatideks. See tava on sama vana kui täpsete paberkaartide traditsioon.

Shapely ei toeta koordinaatsüsteemi teisendusi. Kõik kahe või enama tunnusega toimingud eeldavad, et tunnused eksisteerivad samas Descartes'i tasapinnas.

Geomeetrilised objektid luuakse tavapärasel Pythoni moel, kasutades eksemplari tehastena klasse ise. Selles osas käsitletakse mõningaid nende olemuslikke omadusi, teisi järgnevates toiminguid ja seeriaid käsitlevates jaotistes.

Point, LineString ja LinearRing eksemplaride kõige olulisem atribuut on lõplik koordinaatide jada, mis määrab nende sisemuse, piiri ja välimised punktid. Joone stringi saab määrata vaid kahe punktiga, kuid see sisaldab lõpmatut arvu punkte. Koordinaatide järjestused on muutumatud. Eksemplaride koostamisel võib kasutada kolmandat z -koordinaadi väärtust, kuid see ei mõjuta geomeetrilist analüüsi. Kõik toimingud tehakse x-y tasapinnal.

Kõigis konstruktorites teisendatakse arvväärtused tüüpi float. Teisisõnu, punkt (0, 0) ja punkt (0,0, 0,0) tekitavad geomeetriliselt samaväärseid eksemplare. Shapely ei kontrolli eksemplaride topoloogilist lihtsust ega kehtivust, kui need on konstrueeritud, kuna maksumus on enamikul juhtudel põhjendamatu. Valideerivaid tehaseid saab hõlpsasti rakendada, kasutades neid nõudvate kasutajate predikaati: attr: is_valid.

Shapely on tasapinnaline geomeetriaraamatukogu ja z, kõrgust tasapinnast kõrgemal või madalamal, ei arvestata geomeetrilise analüüsiga. Siin on kasutajatel potentsiaalne lõks: ainult z -ga erinevad koordinaatnupud ei ole üksteisest eristatavad ja nende rakendamine võib põhjustada üllatavalt kehtetuid geomeetriaobjekte. Näiteks LineString ([((0, 0, 0), (0, 0, 1)]) ei tagasta ühiku pikkuse vertikaalset joont, vaid nullpikkusega tasapinnas sobimatut joont. Samamoodi ei ole hulknurk ([(0, 0, 0), (0, 0, 1), (1, 1, 1)]) suletud ringiga piiratud ja see on kehtetu.


Semantilised kaardid lisavad klassikalistele robotkaartidele ruumiliselt maandatud objekte, mis on ankurdatud sobival viisil teadmiste esitamiseks ja arutlemiseks. Need võimaldavad robotil lisaks lokaliseerimisele ja tee planeerimisele lahendada geomeetrilise, topoloogilise, ontoloogilise ja loogilise iseloomuga arutlusülesandeid. Hiljutises semantilise kaardistamise kirjanduses puuduvad tõhusad ja tõhusad lähenemisviisid kvalitatiivsete ruumiliste suhete maandamiseks kaardistatud üksuste kvantitatiivsete geomeetriliste andmete analüüsi kaudu. Siiski on sellised kvalitatiivsed suhted hädavajalikud, et teha ruumi ja ontoloogilist arutlust roboti ümbruses olevate objektide kohta.

See artikkel aitab kaasa semantilise kaardi esitamise raamistikule, mida nimetatakse SEMAP -ks, selle puuduva aspekti ületamiseks. See suudab hallata täis 3D -kaarte geomeetriliste objektimudelite ja vastavate semantiliste märkustega ning nende suhteliste ruumiliste suhetega. Selleks kasutatakse ruumilise andmebaasi tehnoloogiat, et tõhusalt lahendada esitus- ja päringuprobleeme. Selles artiklis kirjeldatakse laiendusi, mis on vajalikud robotirakenduste jaoks sobiva ruumiandmebaasi loomiseks. Eriti lisame suhtelise asukoha teabe esitamiseks 3D -ruumilisi operaatoreid ja teisenduste puu. Hindame rakendatud võimalusi ja tutvustame SEMAPi reaalseid kasutusjuhtumeid erinevates rakendusvaldkondades.


Kuidas tegelikult programmeerimist õppida või harjutada?

Mõistan, et programmeerimise õppimine on tehniliselt üks GIS -i nõue. Ma saan aru, et veebis on palju tasuta kursusi, aga kuidas sa selle jaoks tegelikult õpiksid? Kas vaatate lihtsalt videot ja proovite õppida? Mida soovitaksite algajatele? Proovin eelistatavalt õppida pythonit ja SQL -i.

Igasugune nõuanne oleks teretulnud!

Edit: Aitäh kõigile kommentaaride eest !!

Seal on palju, mida saate teha pythoniga ilma arcymoodulile juurde pääsemata. Alustage skripti loomisega, mis kustutab automaatselt paigaldatud sd -kaardi sisu kõvakettale, mis töötab iga kord, kui see on paigaldatud. Seda saab teha paaril erineval viisil, kuid kui saate ülesannete planeerija ja pythoniga hästi hakkama, on see hea koht alustamiseks. Kui olete sellega rahul, jätkake kaustade kaudu kordamist, et luua keerukaid kaustastruktuure ja muid asju. Google palju.

SQL -iga töötamine võib olla pisut keerulisem, kui teil pole juurdepääsu SSMS -ile ja SQL Expressile või minu SQL -ile või muule, kuna sellel on pisut rohkem eelseadistusi. Siiski saate MS Accessi abil SQL -i kohta palju teada saada. Looge Accessis lihtne andmebaas ja kasutage koostamispäringu tööriistu, et sellele kirjutada ja sealt päringuid teha. Kui olete paar neist kirja pannud, vaadake oma skriptide SQL-vaadet ja proovige pakutav lahti pakkida ning kirjutage need uuesti läbi ilma ehitajat kasutamata, kuid kirjutades need skriptid petulehena. vaja seda. Õpetasin seda tööd tehes endale mõlemat ja kuigi ma olen kindel, et on ka mõni otsem viis sama eesmärgi saavutamiseks, on enese õpetamise õppimine äärmiselt rahuldust pakkuv. Kui soovite juhiseid, saatke mulle sõnum. Ma elasin sama asja läbi, mida te 3 aastat tagasi. Töö saamine aitab palju.


GeoPointer - läheneb reaalse maailma käegakatsutavale suurendamisele

Eesmärk & ndash Käesoleva dokumendi eesmärk on tutvustada konteksti- ja tundliku tarkvarasüsteemi arhitektuuri ja prototüüpilist rakendust, mis ühendab käegakatsutava kasutajaliidese lähenemise mobiilse liitreaalsuse (AR) rakendusega. Disain/metoodika/lähenemisviis & ndash Käesolevas dokumendis kirjeldatud töö põhineb loomingulisel lähenemisel, mis tähendab, et edasiste uurimistulemuste kogumiseks kasutatakse prototüüpilist teostust. Prototüüpne lähenemisviis võimaldab käimasolevaid teste, mis puudutavad täpsust ja erinevaid konteksti- ja tundlikke lävefunktsioone. Leiutised & ndash Käesolevas dokumendis kirjeldatakse ja käsitletakse üksikasjalikult käegakatsutavate kasutajaliideste rakendamist ja praktilist kasutamist geograafiliste objektide väljas väljas valimiseks. Uurimispiirangud/-mõjud & ndash Täiendavad uuringud on vajalikud konteksti ja tundlike dünaamiliselt muutuvate lävifunktsioonide valdkonnas, mis võimaldaks parandada valitud käegakatsutava kasutajaliidese lähenemise täpsust. Praktilised tagajärjed & ndash Käegakatsutavate kasutajaliideste kasutamise praktiline tähendus välitingimustes peaks parandama AR -rakenduste kasutatavust. Originaalsus/väärtus & ndash Hoolimata asjaolust, et žestituvastuse ja AR -rakenduste valdkonnas on palju uurimistulemusi, keskendub see uurimistöö geograafiliste objektide valimiseks osutusliigutusele.

Ajakiri

International Journal of Pervasive Computing and Communications ja ndash Emerald Publishing

Avaldatud: 5. aprill 2011

Märksõnad: Kasutajaliidesed Navigeerimine Geograafilised infosüsteemid


13.6 Funktsioonide saatmine andmebaasi

13.6.1 Andmebaasi lubade seadmine

Viimases näites (näide-13-04.html) ei saadetud joonistatud kihte tegelikult kuhugi, vaid trükiti konsooli. Lisaks sisendliidesele on funktsionaalse ühisallutamise rakenduse jaoks vaja ka püsivat salvestuskohta ja mehhanismi kasutaja sisendi kirjutamiseks sellesse kohta. Selle peatüki ülejäänud osas näeme, kuidas joonistatud kujundeid saab saata CARTO andmebaasi, muutes kasutaja sisendi püsivalt salvestatuks, viies lõpule meie ühisallika rakenduse.

Enne kui hakkame andmete saatmiseks JavaScripti koodi kirjutama, peab meil olema andmete kogumiseks alaline salvestuskoht. Relatsioonandmebaasi kasutamisel alalise salvestusruumina on meil vaja andmebaasis (tühja) tabelit, millel on vastavad veerud ja andmetüübid vastavalt andmetele, mida kavatseme koguda. CARTO -l saame luua uue tabeli (joonis 13.8) Uus andmekogum nuppu, mida oleme juba kasutanud olemasoleva kihi (nt plants.geojson) üleslaadimiseks (jaotis 9.7.3). Seekord peame GeoJSON -faili üleslaadimise asemel valima LOO TÜHJE ANDMEKOGU. Uus tabel on tühi ja mugavalt on sellega kaasas vaikimisi veerud the_geom (geomeetria), kirjeldus (string) ja nimi (string), mida me täpselt vajame. Kui meil oleks vaja erinevat veergude komplekti, saaksime CARTO liidese abil alati veerge lisada või eemaldada või veeru andmetüüpe muuta. Uue laua nimetame õlleks_sheva.

JOONIS 13.8: Tühja tabeli loomine CARTO -le

Juhul kui töötame käsurea kaudu SQL -andmebaasiga, mitte CARTO veebiliidesega, võiksime luua ka beer_sheva tabeli, kasutades samaväärset SQL -käsku:

Oletame nüüd, et rahvahulga allika veebikaart on valmis ja kasutaja on joonistanud punkti, mille dekodeerisime järgmiseks GeoJSON-stringiks, kasutades JSON.stringify, nagu näites-13-04.html:

Seejärel oletame ka, et kasutaja on täitnud hüpikvormi kirjelduse ja nime väljadele väärtused "Punkt 1" ja "Michael" (joonis 13.6). Kuidas me saame need andmed tegelikult värskelt loodud CARTO tabelisse sisestada? Uute andmete sisestamiseks saame kasutada märksõnu SQL INSERT INTO ja VALUES, nagu on näidatud järgmises SQL -päringu näites:

Päring tundub üsna pikk ja keeruline, kuid pange tähele kõrgetasemelist struktuuri, mida kasutatakse sisestatavate veergude nimede ja väärtuste määramiseks:

Esimesed kolm. sümbolid asendatakse veerunimedega, kuhu väärtused lähevad. Viimased kolm. sümbolid asendatakse väärtustega ise. Pange tähele, et veerunimede järjekord peab vastama väärtuste järjekorrale, nii et õige väärtus sisestatakse paremasse veergu. Käesolevas näites vastab esimese kolmiku järjestus (veerg nimetab the_geom, kirjeldus ja nimi) teise kolmiku järjekorrale pärast märksõna VALUES (geomeetria, 'punkt 1' ja 'Michael').

Geomeetria väärtuse loomiseks, mis läheb veergu the_geom, kasutab päring funktsiooni ST_GeomFromGeoJSON, et teisendada GeoJSON -ist WKB -ks. See on täpselt vastupidine geomeetria veeru dekodeerimiseks GeoJSON -i tekstiks ST_AsGeoJSON -iga (jaotis 9.6.3). Funktsioon ST_SetSRID määrab, et meie GeoJSONi koordinaadid on lat/lat, st WGS84 koordinaatide viitesüsteemis, millega me kogu raamatus töötame (jaotis 11.3), täpsustatud EPSG -koodiga 4326.

Vastav CARTO SQL API päring on toodud allpool:

Kahjuks ei tööta ülaltoodud API kõne vastloodud tabelis. Selle asemel kuvatakse järgmine veateade:

See veateade, nagu viitab fraas "luba keelatud", puudutab andmebaasi probleemi õigused, mida me pole tegelikult veel kaalunud. Iga andmebaas on tegelikult seotud ühe või mitme andmebaasiga kasutajatele, kusjuures igal kasutajal on oma parool ja seostatakse komplektiga privileegidst reeglid selle kohta, mida kasutaja saab andmebaasis teha ja mida mitte. Näiteks an administraator võib omada maksimaalset hulka privileege, mis tähendab, et ta saab andmebaasis teha kõike: lugeda ja kirjutada tabelitesse, luua uusi tabeleid, kustutada olemasolevaid tabeleid, lisada või eemaldada teisi kasutajaid, anda teistele kasutajatele õigusi või neid tühistada jne. peal. Teisest küljest a kirjutuskaitstud kasutaja neil võivad olla piiratud kirjutuskaitstud õigused, nii et nad saavad tarbida ainult andmebaasi sisu, kuid ei saa muuta tabeleid ega oma või teiste kasutajate õigusi.

See, kuidas me oma CARTO andmebaasile CARTO SQL API -ga juurde pääsesime, tähendas tegelikult andmebaasiühendust vaikimisi kasutajaga publicuser, mille CARTO loob automaatselt meie konto seadistamisel. Avalikkasutaja kasutajal on loe õigused kõikidele meie andmebaasi tabelitele, mistõttu võiksime peatükkides 9–12 täita mis tahes SQL -päringuid, mis algavad SELECT -iga. Avaldajal pole aga vaikimisi kirjutamisõigusi. Seetõttu ebaõnnestus ülaltoodud INSERT päring veaga "luba keelatud".

Lisaks avalikule kasutajale määratleb CARTO an API võti kasutaja, kellel on andmebaasi tabelites kõik võimalikud õigused: lugeda, kirjutada, värskendada, luua, kustutada jne. CARTO SQL API kasutamiseks koos „API võtme” kasutajaga peame oma päringus esitama täiendava parameetri api_key, nagu on näidatud järgmises:

Api_key on pikk string, mis toimib nagu parool. API võtme saate oma konto seadete paneelilt CARTO veebiliideses.

Niisiis, uuele kirjele õlle_sheva tabelisse sisestamisel on probleemil „luba keelatud” tegelikult kaks võimalikku lahendust:

  • Saame andmebaasiga ühenduse luua API võti kasutaja, kellel on maksimaalsed privileegid ja kes saab seetõttu täita sisestuspäringuid beer_sheva tabelis.
  • Me saame toetus avaliku kasutaja kasutajale uus privileeg tabeli beer_sheva sisestuspäringute täitmiseks.

Esimene võimalus võib tunduda kõige mugavam, kuna ainus, mida peame tegema, on leida meie API võtme string CARTO liidesest ja lisada see SQL API päringu URL -i, nagu ülal näidatud. Selle lähenemisviisi kasutamisel peame siiski kaaluma tõsist turvaprobleemi. Kui lisame oma JavaScripti koodi API võtme, saavad põhimõtteliselt kõik meie lehe lähtekoodi uurivad kasutajad API võtme kopeerida ja kasutada seda meie kontol mis tahes SQL -päringu tegemiseks, omades maksimaalseid õigusi. Näiteks kui keegi soovis, võis ta isegi meie kontol oleva tabeli jäädavalt kustutada, kasutades käsku DROP TABLE. API võtme kuvamine kliendipoolne skriptid on seega tõsine turvarisk. API võti on tõesti mõeldud ainult serveripoolne skriptid, mille lähtekoodile veebilehe kasutajad ligi ei pääse. Näiteks võib serveripoolne skript vastu võtta päringuid kasutaja sisestatud parooliga, kui parool on kehtiv, saab server teha päringu CARTO SQL API-le ja saata tulemuse tagasi, vastasel juhul lükatakse päring tagasi. See lähenemisviis nõuab dünaamilise serveri seadistamist (jaotis 5.4.3), mis tähendab, et selle turvaliseks kasutamiseks pole API võtmelahendus sugugi nii lihtne. Selles raamatus keskendume kliendipoolsetele lahendustele, seega ei hakka me API võtme lähenemisviisi lähemalt käsitlema.

Usaldusväärsele vaatajaskonnale mõeldud lihtsa rahvahulga rakenduse jaoks on avaliku kasutajale INSERTi privileegide andmise teine ​​võimalus lihtne ja tõhus lahendus. Mõnes mõttes muudab see meie andmebaasi avatuks: igaüks, kes siseneb meie veebisaidile, saab tabelis beer_sheva uusi kirjeid sisestada. Teisest küljest on halvim stsenaarium lihtsalt see, et meie laud täidetakse paljude tarbetute kirjetega. Ainus privileeg, mille me anname, on INSERT, mis tähendab, et avalik kasutaja ei saa varem sisestatud kirjeid kustutada ega tabelit muul viisil muuta. Veelgi enam, kui meie lehe URL -i jagatakse usaldusväärse publikuga, näiteks klassis küsitlustes osalevate õpilaste seas, on tõenäosus, et keegi võtab vaevaks meie lehe leidmise ja meie andmebaasi tahtlikult saboteerides, täites selle suure hulga võltsitud rekordid on väga väikesed. Seega võib väikesemahuliste kasutusjuhtumite korral olla jõupingutusi dünaamilise serveri loomiseks autentimissüsteemiga üleliigne, kuna allpool esitatud lihtne lahendus on piisav.

Kui soovite anda loa sisestada päringuid tabelis beer_sheva, tuleb täita järgmine SQL -päring. Ilmselgelt ei ole avaliku sektori kasutajal luba anda endale täiendavaid privileege. Seetõttu tuleb päring täita kaustas SQL toimetaja CARTO veebiliideses, mis eeldab kõiki õigusi (joonis 13.9), või SQL API kasutamist koos API võtmega.

JOONIS 13.9: INSERT -i loa andmine CARTO veebiliidese kaudu

Pärast uute lubade andmise päringu täitmist peaks ülaltoodud INSERT API üleskutse uue kirje lisamiseks beer_sheva tabelisse toimima isegi ilma API võtmeta. Kui näete endiselt sellist teadet nagu:

peate täitma ka järgmise päringu kas veebiliideses või API võtmega 114:

Uue loa keelamiseks, näiteks kui andmete kogumine on lõpule viidud ja me ei soovi õlle_sheva tabelisse rohkem sissekandeid vastu võtta, saame alati tühistada avalikkasutajale antud privileeg järgmiselt:

Pärast beer_sheva tabeli loomist ja INSERT -i lubade eest hoolitsemist on andmebaas valmis ja ootab rahvahulga andmete saamist. Now, let us move on to defining the web-map script for processing and sending the user-edited data to the database.

13.6.2 Adding the drawing control

Like in the previous examples, first thing we need in our script is to have a drawing control definition. We use the same definition from example-13-04.html (Section 13.5), with circles, circle markers, and rectangles disabled 115 :

Next, in case we would like the map to display the previous shapes drawn by other users, we can set up a layer group named cartoData to contain them:

Accordingly, we need to load the items already contained in the beer_sheva table from previous editing sessions, using the following code section:

Note that the popup for each of the loaded features displays the name and the description properties, which were entered in previous sessions when submitting drawn shapes and saved in the beer_sheva table.

Other than loading previously stored shapes using the above code, the major change compared to example-13-04.html is in the setData function, which is responsible for saving the drawn shapes whenever the “submit” button is clicked. The new version is quite longer, since instead of just printing the data in the console it now sends the data for permanent storage in the CARTO database:

We will now go over the code, step by step.

The first two expressions are exactly the same as in example-13-04.html (Section 13.5). Again, these two expressions are used to extract the entered text in the name and description fields, as given at the precise moment when the “submit” button was clicked. The name and description values are assigned into variables named enteredUsername and enteredDescription , respectively:

The central code block inside the setData function is contained inside the .eachLayer iteration on drawnItems . As shown in example-13-02.html (Section 13.4.1) and example-13-04.html (Section 13.5), using .eachLayer we basically apply a function on each of the layers comprising drawnItems . The function has a parameter named layer , which is assigned with the current layer in each step of the iteration:

What does the internal function in the .eachLayer iteration do in the present case of example-13-05.html ? Three things:

  • Konstrueeri the INSERT query for adding a new record into the beer_sheva table
  • Send the query to the CARTO SQL API
  • Kopeeri the submitted drawing to the CARTO layer, to display it on the map

Here is the code for the first part, the SQL query construction:

This code section builds the SQL query for sending the currently iterated drawn shape to the database. Basically, instead of a fixed INSERT query, such as the one shown above ( 'Point 1' created by 'Michael' ), we are constructing the query dünaamiliselt, using the three variables:

  • drawing —The GeoJSON string for the current layer, goes into the the_geom column
  • enteredDescription —The description entered into the popup, goes into the description column
  • enteredUsername —The name entered into the popup, goes into the name column

The complete query is assigned into a variable named sql . Using console.log , the value of sql is then printed into the console, which is helpful when inspecting our web map for potential problems.

The second part of the code takes care of sending the SQL query contained in sql to CARTO:

The query is sent as part of an Ajax POST request, which is something we haven’t used yet. POST requests are more rarely used than GET and a little less convenient to work with (Section 5.3.2.3). However, POST requests are more appropriate when sending data to be processed on the server, as opposed to GET , which is mostly used to saada data from the server. It is important to note that the CARTO SQL API can accept both GET and POST requests, so the same request can be achieved in both ways. In this case, however, making a POST request is safer because the URL in GET requests is limited in character length. The exact lower limit depends on the browser, but can be as low as 2048 characters. So, if the user has drawn a very complex geometry which results in a very long GeoJSON string, the resulting GET request may be rejected. In a POST request, the parameters are sent as part of associated andmed, rather than being part of the URL, which resolves the limitation.

To make a POST request we are going to use the fetch function with slighly modified parameters. Until now, we have been extensively using fetch in Chapters 7–12for making GET requests. As mentioned in Section 7.7.3, however, the fetch function can also be used to make POST request. In our case, we need to make a POST request to the URL of the CARTO SQL API ( "https://michaeldorman.carto.com/api/v2/sql" ), with the sent data being the sql string and the data we expect back from the server being JSON. Finally, we specify what to do when the request is successful ( success ) or when it fails ( error ). In this case, we choose to simply print either the "Data saved" or the "Problem saving the data" string in the console.

The third part of the eachLayer iteration, inside our setData function code body, transfers the drawn data to the cartoData layer to display it on the map without reloading the map. Basically, the drawn layer is translated to GeoJSON, combined with the description and name properties, then added on the map with L.geoJSON . Without this part, our drawing would only be sent to the database without being shown on the map, unless we reload the web page:

Finally, outside of the .eachLayer iteration, we close the editable popup and clear the drawnItems feature group. The map is now ready for making a new drawing and sending it to the database.

The complete crowdsourcing app ( example-13-05.html ) is shown in Figure 13.10.


Vaata videot: PostgreSQL Tutorial: How to import Shapefile into PostGIS EN