Vairāk

PostGIS tabulas ierobežojošais lodziņš

PostGIS tabulas ierobežojošais lodziņš


Vai PostGIS ir vienkāršs veids, kā iegūt ierobežojošo lodziņu visai tabulai?


ST_Extent vajadzētu darīt šo triku.

ST_Extent - apkopota funkcija, kas atgriež ierobežojošo lodziņu, kas ierobežo ģeometrijas rindas.

Piemēro šādi:

Atlasiet ST_Extent (the_geom) kā table_extent FROM your_table;

Kā atbildēja @underdark, ST_Extent veiks darbu, taču paturiet prātā, ka tas neatgriež ģeometriju, bet ganbox2d. Ja jums ir nepieciešams ģeometrijas tips, jums vajadzētu izmantot kaut ko līdzīgu

Atlasiet ST_SetSRID (ST_Extent (the_geom), THE_SRID) kā table_extent FROM your_table;

Turklāt, ja jums nepieciešams, iegūstiet katras no tām rindām, kuru varat arī izmantotST_Extentun a viltusGRUPA PĒCkā šis:

Atlasiet ST_SetSRID (ST_Extent (the_geom), THE_SRID) kā table_extent NO jūsu_tabula GROUP BY gid;

Pieņemot, ka tabulas galvenā atslēga ir gid

Bet ST_Envelope darīs labāku darbu, kā komentāros norādīja @ bugmenot123

ATLASIET ST_Envelope (geom) no sava_tabula;

Vēl viena iespēja ir izmantotST_Vielafunkcija, kas atgriež ģeometriju ar SRID,

ST_Envelope - atgriež ģeometriju, kas attēlo piegādātās ģeometrijas norobežojošo lodziņu

, kopā ar apkopošanas funkcijuST_Unionlai iegūtu visu ģeometriju savienojumu (vai to attiecīgo aplokšņu savienojumu) šādi:

Atlasiet ST_Envelope (ST_Union (geom)) kā table_extent NO jūsu_tabula

vai

Atlasiet ST_Envelope (ST_Union (ST_Envelope (geom))) kā table_extent NO jūsu_tabula

Otrajai iespējai vajadzētu būt ātrākai, jo tā vienkāršo savienošanas darbību, izmantojot atsevišķas ģeometrijas aploksnes.

skatiet Avots.


Neieviešot jebkādu telpisko apkopojumu, vajadzētu būt daudz ātrākam:

atlasiet min (ST_XMin (geom)) kā l, min (ST_YMin (geom)) kā b, max (ST_XMax (geom)) kā r, max (ST_YMax (geom)) kā t no x

PostGIS tabulas norobežojošais lodziņš - ģeogrāfiskās informācijas sistēmas

Nodrošinātājs, kas atgriež GeoJSON datu atbildes no PostGIS vaicājumiem.

Iebūvētais TileStache Vector nodrošinātājs (jauns versijā 1.9.0) piedāvā vairāk
pilnīga vektoru elementu ģenerēšanas metode un atbalsta daudzu veidu datus
avoti, kas nav pieejami PostGeoJSON, piemēram, shapefiles. PostGeoJSON būs
TileStache joprojām tiek nodrošināta un atbalstīta, bet turpmākā attīstība
no vektoru atbalsta tiks apmierināti ar galveno līniju Vektoru nodrošinātājs, nevis
šis.

Šis ir pakalpojumu sniedzēja piemērs, kas drīzāk neatgriež attēlu
pieprasa datu bāzē neapstrādātus datus un atbildes ar virkni GeoJSON. Priekš
Piemēram, ir iespējams izgūt datus par OpenStreetMap punktu atrašanās vietām
interesē, pamatojoties uz vaicājumu ar norobežojošās lodziņa krustojumu.

Daudzi Polymaps (http://polymaps.org) piemēri izmanto GeoJSON vektoru datu elementus,
ko var efektīvi izveidot, izmantojot šo pakalpojumu sniedzēju.

dsn:
Datu bāzes savienojuma virkne, kas piemērota lietošanai psycopg2.connect ().
Lai uzzinātu vairāk, skatiet vietni http://initd.org/psycopg/docs/module.html#psycopg2.connect.

vaicājums:
PostGIS vaicājums ar "! Bbox!" flīžu norobežojošās kastes vietturis.
Ņemiet vērā, ka tabulā * jāizmanto sfēriskā mercaotr projekcija tīmeklī
900913. Vaicājumam jāatgriež kolonna id, ģeometrijas kolonna un citas
kolonnas, kuras ievietot GeoJSON vārdnīcā “īpašības”.
Lai uzzinātu vairāk par 900913, skatiet tālāk.

izgriezums:
Būla karodziņš izejas ģeometrijas izvēles apgriešanai pie robežām
pievienojošās flīzes. Pēc noklusējuma ir falsi. Tā rezultātā ir nepilnīga
ģeometrijas, dramatiski mazāki failu izmēri un uzlabo veiktspēju
un saderība ar Polymaps (http://polymaps.org).

id_column:
Izvades kolonnas ID nosaukums pēc noklusējuma ir “id”. Tas nosaka, kurš vaicājums
rezultātu kolonna tiek ievietota laukā GeoJSON "id".

geometry_column:
Ģeometrijas kolonnas nosaukums izvadē, pēc noklusējuma ir "ģeometrija". Tas nosaka
kura vaicājuma rezultātu kolonna tiek pārprojektēta uz lat / lon un tiek izvadīta kā saraksts
ģeogrāfiskās koordinātas.

ievilkums:
Vietu skaits, lai ievilktu GeoJSON atbildi. Pēc noklusējuma 2.
Izlaist visu atkāpi ar vērtību nulle.

precizitāte:
Precīzijas decimālzīmju skaits izejas ģeometrijā. Pēc noklusējuma 6.
Noklusējumam jābūt piemērotam gandrīz visās ielu kartēšanas situācijās.
Mazāka vērtība var palīdzēt samazināt izejas faila lielumu zemākas tālummaiņas kartēm.

TileStache nodrošinātāja konfigurācijas piemērs:

"apskates vietas":
<
"pakalpojumu sniedzējs":
<
"klase": "TileStache.Goodies.Providers.PostGeoJSON.Provider",
"kwargs":
<
"dsn": "dbname = ģeodatu lietotājs = postgres",
"vaicājums": "ATLASIET osm_id, nosaukumu, ceļu NO planet_osm_point WHERE way & amp & amp! bbox! UN nosaukums NAV NULL",
"id_column": "osm_id", "geometry_column": "way",
"ievilkums": 2
>
>
>

Pašlaik ir izmantojamas tikai 900913 (google) projekcijas datubāzes,
lai gan tas ir noklusējuma iestatījums OpenStreetMap importēšanai no osm2pgsql.
"! Bbox!" vaicājuma vietturim (skat. piemēru zemāk) jābūt mazajiem burtiem un
paplašinās līdz:

ST_SetSRID (ST_MakeBox2D (ST_MakePoint (ulx, uly), ST_MakePoint (lrx, lry)), 900913)

Pašlaik PostGIS datu bāzē ir jāatbalsta SRID "900913".
Lai aizpildītu iekšējo PostGIS projekciju tabulu spatial_ref_sys,
šķiet, ka tas darbojas:


Atsauces

[1]„PostGIS uzziņa,“ [tiešsaiste]. Pieejams: https://postgis.net/.
[2]„Osm2pgsql GitHub krātuve,“ [tiešsaiste]. Pieejams: https://github.com/openstreetmap/osm2pgsql.
[3]„PostGIS savietojamība un atbalsts”, [tiešsaiste]. Pieejams: https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS.
[4]„Geofabrik Download Server,“ [tiešsaiste]. Pieejams: https://download.geofabrik.de/.
[5]„PBF formāts,“ [tiešsaiste]. Pieejams: https://wiki.openstreetmap.org/wiki/PBF_Format.
[6]„Noklusējuma stils & # 8211 osm2pgsql,“ [tiešsaiste]. Pieejams: https://wiki.openstreetmap.org/wiki/Osm2pgsql/schema.
[7]„QGIS Osm stili,“ [tiešsaiste]. Pieejams: https://github.com/yannos/Beautiful_OSM_in_QGIS.
[8]„Osm2pgsql datu bāzes shēma,“ [tiešsaiste]. Pieejams: https://wiki.openstreetmap.org/w/images/b/bf/UMLclassOf-osm2pgsql-schema.png.

4.3. ĢIS datu ielāde

Kad esat izveidojis telpisko tabulu, esat gatavs augšupielādēt ĢIS datus datu bāzē. Pašlaik ir divi veidi, kā iegūt datus PostGIS / PostgreSQL datu bāzē: izmantojot formatētus SQL priekšrakstus vai izmantojot Shape failu iekrāvēju / pašizgāzēju.

4.3.1. SQL izmantošana

Ja jūs varat konvertēt datus teksta attēlojumā, formatēta SQL izmantošana var būt vienkāršākais veids, kā iegūt datus PostGIS. Tāpat kā Oracle un citās SQL datu bāzēs, datus var ielādēt lielos apjomos, SQL termināļa monitorā ievadot lielu teksta failu, kas pilns ar SQL "INSERT" paziņojumiem.

Datu augšupielādes fails (piemēram, ceļi.sql) varētu izskatīties šādi:

Datu failu var viegli ievietot PostgreSQL, izmantojot "psql" SQL termināļa monitoru:

4.3.2. Iekrāvēja izmantošana

Shp2pgsql datu ielādētājs pārveido ESRI formas failus SQL, kas piemēroti ievietošanai PostGIS / PostgreSQL datu bāzē. Iekrāvējam ir vairāki darbības režīmi, kas atšķiras ar komandrindas karodziņiem:

Nomet datubāzes tabulu, pirms izveidojat jaunu tabulu ar datiem Shape failā.

Pievieno datus no Shape faila datu bāzes tabulā. Ņemiet vērā, ka, lai izmantotu šo opciju, lai ielādētu vairākus failus, failiem jābūt vienādiem atribūtiem un vienādiem datu tipiem.

Izveido jaunu tabulu un aizpilda to no formas formas. Šis ir noklusējuma režīms.

Izgatavo tikai tabulas izveides SQL kodu, nepievienojot faktiskos datus. To var izmantot, ja jums ir pilnībā jānodala tabulas izveides un datu ielādes darbības.

Izvades datiem izmantojiet PostgreSQL "dump" formātu. To var apvienot ar -a, -c un -d. To ir daudz ātrāk ielādēt nekā noklusējuma "ievietot" SQL formātu. Izmantojiet to ļoti lielām datu kopām.

Izveido un aizpilda ģeometrijas tabulas ar norādīto SRID.

Saglabāt identifikatoru reģistru (kolonnu, shēmu un atribūtus). Ņemiet vērā, ka Shapefile atribūti ir visi lielie burti.

Piespiest visus veselos skaitļus uz standarta 32 bitu veseliem skaitļiem, neveidojiet 64 bitu bigintus, pat ja šķiet, ka DBF galvenes paraksts to pamato.

Ģeometrijas kolonnā izveidojiet GiST indeksu.

Izejas WKT formāts lietošanai ar vecākām (0.x) PostGIS versijām. Ņemiet vērā, ka tas ieviesīs koordinātu novirzes un samazinās M vērtības no formas failiem.

Norādiet ievades datu kodēšanu (dbf fails). Lietojot, visi dbf atribūti tiek konvertēti no norādītā kodējuma uz UTF8. Rezultātā izveidotā SQL izeja satur komandu SET CLIENT_ENCODING to UTF8, lai aizmugure varētu pārveidot no UTF8 uz jebkuru kodējumu, kuru datu bāze ir konfigurēta lietošanai iekšēji.

Ņemiet vērā, ka -a, -c, -d un -p ir savstarpēji izslēdzošas.

Sesijas piemērs, izmantojot iekrāvēju, lai izveidotu ievades failu un to augšupielādētu, varētu izskatīties šādi:

Konvertēšanu un augšupielādi var veikt vienā darbībā, izmantojot UNIX caurules:


PostGIS tabulas norobežojošais lodziņš - ģeogrāfiskās informācijas sistēmas

Es vairs neuzturēju šo lib. Lūdzu, atrodiet dakšiņu vai:

ActiveRecord spraudnis, kas pārredzamā veidā pārvalda PostGIS ģeometriskās kolonnas (tas ir tāpat kā citas bāzes datu kolonnas). Tas arī nodrošina veidu, kā pārvaldīt šīs kolonnas migrācijā.

Šī dakša pievieno ērtas metodes, lai veiktu ģeogrāfiskos aprēķinus uz postgis. Pamatojoties uz georuby.rubyforge.org telpisko adapteri

Ja izmantojat telpisko adapteri, * vispirms noņemiet to *.

Pievienojiet atkarību Gemfile:

Vai arī, lai izmantotu jaunāko no repozitorija:

Ģeometriskās kolonnas jūsu ActiveRecord modeļos tagad tiek rādītas tāpat kā jebkura cita pamatdatu veida kolonna. Tos var arī izmest rubīna shēmas režīmā un ielādēt migrācijā tāpat kā pamata tipu kolonnas.

Vienkārša sliežu lietotne, lai demonstrētu, pārbaudiet to:

Tas bija viegli! Kā redzat, kolonnu nav jādeklarē kā ģeometrisku. Spraudnis šo informāciju iegūs pats.

Šeit ir PostGIS rindu izveides un piekļuves piemērs, izmantojot iepriekš definēto modeli un tabulu:

Šeit ir šie dakšu papildinājumi. Lai to izmantotu:

Atbalsta transformāciju (noderīgi pārveidot SRID par UTM apgabalā Km ^ 2)

Vai arī izmantojiet (gandrīz) PostGIS līdzīgu apzīmējumu:

Katram modelim tas atbalsta tikai vienu ģeom kolonnu. Joprojām tiek meklēts labākais veids, kā ieviest multi geom.

sleja find_by_ * ir atkārtoti definēta, ja kolonna ir ģeometriska tipa. Tā vietā, lai izmantotu Rails noklusējuma operatoru '=', kuram es neredzu MySql telpisko datu tipu definīciju un kurš PostGIS veic ierobežojošās kastes vienlīdzības pārbaudi, tas izmanto ierobežojošās kastes krustojumu: & amp & amp PostGIS un MBRIntersects MySQL, kas gan var izmantot telpisko indeksu, ja tāds ir pieejams, lai paātrinātu vaicājumus. Varat izmantot šo vaicājumu, piemēram, ja jums ir jāparāda dati no datu bāzes: jūs vēlaties tikai ģeometriju, kas atrodas ekrāna taisnstūrī, un jūs tam varētu izmantot ierobežojošā lodziņa vaicājumu. Tā kā tas ir izplatīts gadījums, tas ir noklusējums. Jums ir 2 veidi, kā izmantot find_by_ * geom_column *: vai nu tieši izlaižot ģeometrisku objektu, vai arī masīvu ar diviem pretējiem ierobežojošās lodziņa stūriem (ar 2 vai 3 koordinātām atkarībā no datu dimensijas).

Pakalpojumā PostGIS tā kā operācijas ar ģeometrijām var izmantot tikai ar to pašu SRID, masīvam varat pievienot trešo elementu, kas apzīmē ierobežojošās lodziņa SRID. Pēc noklusējuma tā ir iestatīta uz -1:

Šeit ir koda piemērs tabulas ar ģeometrisku kolonnu izveidošanai PostGIS, kā arī kolonnā pievienots telpiskais indekss:

Pēc izvēles tas automātiski izveidos datu bāzi ar iespējotu postgis.

Palīgi izveidot postgis veidņu datu bāzi. Rakstīšanas laikā tiek izmantoti postgis.sql un spatial_ref_sys.sql.

Atrodiet, kur jūsu OS ievietoja šos sql failus, un:

Ievietojiet šādus skriptus mapē ar nosaukumu “telpiskais” zem mapes “db”, piemēram:

Tie tiks izmantoti, veidojot testa datu bāzi, veicot Rake Test uzdevumus. Šie skripti bija jāinstalē, kad tika instalētas PostGIS bibliotēkas. Tiešsaistes atsauce: postgis.refractions.net/

Ja vienības testiem izmantojat armatūru, kādā brīdī vēlaties ievadīt ģeometriju. Jūs vienmēr varat pārveidot savu ģeometriju formā, kas piemērota YAML, taču telpiskais adapteris nodrošina metodi, kā to izdarīt jūsu vietā: to_yaml. Tas darbojas gan MySQL, gan PostGIS (lai gan atgrieztā virkne katrai datu bāzei ir atšķirīga). Jūs to izmantojat šādi, ja ģeometriskā kolonna ir punkts:

Ja izmantojat annotate_models, pārbaudiet šo dakšiņu, kas pievieno ģeometriskās piezīmes PostgisAdapter un SpatialAdapter:

Rubīna ģeometriskie datu tipi pašlaik ir pieejami tikai caur GeoRuby bibliotēku (georuby.rubyforge.org): Šeit ir Point.from_x_y iepriekš minētajā piemērā nāk no. Telpiskā adaptera nākotnes izlaišanas mērķis ir atbalstīt papildu ģeometriskās datu tipa bibliotēkas, piemēram, Ruby / GEOS, ja vien tās var atbalstīt EWKB lasīšanu un rakstīšanu.

Tā kā ActiveRecord, šķiet, tieši saglabā tikai virknes vērtības

Atgriežoties no datubāzes, tas vienmēr tulko no šiem pareizajiem tipiem, kad tiek lasīts kāds atribūts, kas, iespējams, ir piemērots vienkāršiem tipiem, bet ģeometrijām tas var būt mazāk efektīvs, jo EWKB virkne ir jāpārskaidro katru reizi. Tas arī nozīmē, ka jūs nevarat tieši modificēt ģeometrijas objektu, kas atgriezts no atribūta:

Tā kā tulkojums ģeometrijā tiek veikts katru reizi, kad_dzimums

tiek lasīts, izmaiņas uz y netiks saglabātas! Jums būtu jādara kaut kas līdzīgs šim:

Marcos Piccinini (nofxx) Ying Tsen Hong (tsenying) Simon Tokumine (tokumine) Fernando Blat (ferblape) Shoaib Burq (sabman)

Telpiskais adapteris sliedēm tiek izlaists ar MIT licenci. Postgis adapteris tiek izlaists ar MIT licenci.

Pārbaudīts, izmantojot activerecord 3+ / postgresql 8.5+ / postgis 1.5+ / linux / osx


RASTER_COLUMNS metadatu tabula

Šī metadatu tabula sniedz ārējām lietojumprogrammām un, iespējams, iekšējiem rīkiem iespēju atklāt tabulas ar rastra datiem un uzzināt dažādu informāciju par šīm datu kopām.

Kolonnas nosaukums Tips Ierobežojumi Komentāri
r_table_catalog raksturs mainīgs (256) NAV NULL
r_table_schema raksturs mainīgs (256) NAV NULL
r_table_name raksturs mainīgs (256) NAV NULL
r_kolonna raksturs mainīgs (256) NAV NULL
srid vesels skaitlis NAV NULL Nezināmam SRID izmantojiet 0
pixel_types ARRAY = VARCHAR =? NAV NULL pikseļu tipu masīvs, pa vienai joslai. Joslu skaits ir netieši norādīts šī masīva lielumā.
out_db būla NAV NULL false, ja iekšējās flīzes, true, ja flīzes ir atsauces uz failiem ārpus datubāzes
regular_blocking būla NAV NULL pēc noklusējuma nepatiesa, taisnība, ja visi bloki ir vienāda lieluma, balstīti un nepārklājas, sākas augšējā kreisajā pusē (skatīt zemāk)
nodata_values ARRAY = DOUBLE =? mezglu vērtību masīvs, pa vienai joslai. Ieraksts var būt NULL, lai nenorādītu NODATA vērtības.
pixelsize_x dubultā pikseļa platums ģeoinitālos (katram SRID)
pixelsize_y dubultā pikseļa augstums ģeogrāfiskajos vienībās (katram SRID)
blocksize_x vesels skaitlis bloka platums pikseļos (NULL, ja tas ir neregulārs)
blocksize_y vesels skaitlis bloka augstums pikseļos (NULL, ja tas ir neregulārs)
apjomā ĢEOMETRIJA daudzstūra ģeometrija, kurā ir visas rastra plāksnes, vai NULL, ja iepriekš noteiktas robežas nav zināmas. "Regular_blocking" gadījumos šī ģeometrija būs vienkāršs taisnstūris. Citos gadījumos tas var būt neregulārs daudzstūris.

Ja lauks regular_blocking ir patiess, definētajai rastra kolonnai tiek noteikti vairāki ierobežojumi:

  1. Visām flīzēm ir jābūt vienādiem (blocksize_x un blocksize_y).
  2. Visām flīzēm nedrīkst būt pārklāšanās, un tām jābūt parastām bloku režģī.
  3. Augšējam kreisajam blokam jāsākas no apjoma augšējā kreisā stūra.
  4. Labākajā kolonnu labākajā un apakšējā bloku rindā var būt daļas, kas pārsniedz rastra apjomu. Tiks pieņemts, ka šie apgabali ir NODATA un nav aprakstītā rastra daļa.
  5. Izmēru laukam jābūt vienkāršam taisnstūrim (negrieztam).

Ir atļauts regulāri_blokējošiem rastriem izlaist dažus blokus / elementus (reti sastopamus rastrus), un šādā gadījumā jāpieņem, ka trūkstošās daļas ir visas NODATA vai nulles vērtības.


PostGIS operatori 2.4

TLDR: ja lietojumprogrammas ģeometrijas kolonnās izmantojat ORDER BY vai GROUP BY un jums ir cerības par iegūto secību vai grupām, uzmanieties, ka PostGIS 2.4 maina uzvedību jeb ORDER BY un GROUP BY . Attiecīgi pārskatiet pieteikumus.

Pirmie operatori, par kuriem mēs uzzinām pamatskolā, ir =, & gt un & lt, bet tie ir operatori, kurus ir visgrūtāk definēt telpiskajā sfērā.


PostGIS tabulas norobežojošais lodziņš - ģeogrāfiskās informācijas sistēmas

Importē datus no NASA Shuttle Radar topogrāfijas misijas PostGIS datu bāzē (un citās datubāzēs nākotnē).

Izmantojiet Git vai norēķinieties ar SVN, izmantojot tīmekļa URL.

Strādājiet ātri ar mūsu oficiālo CLI. Uzzināt vairāk.

GitHub darbvirsmas palaišana

Ja nekas nenotiek, lejupielādējiet GitHub Desktop un mēģiniet vēlreiz.

GitHub darbvirsmas palaišana

Ja nekas nenotiek, lejupielādējiet GitHub Desktop un mēģiniet vēlreiz.

Palaist Xcode

Ja nekas nenotiek, lejupielādējiet Xcode un mēģiniet vēlreiz.

Tiek palaista Visual Studio kods

Jūsu koda telpa tiks atvērta, kad būs gatava.

Sagatavojot kodu, radās problēma. Lūdzu, mēģiniet vēlreiz.


Ģeometrijas konstruktori

Konstruktora funkcijas tiek izmantotas, lai izveidotu jaunas ģeometrijas. Lai gan ir dabiski domāt par šo funkciju izmantošanu tabulas ģeometrijas kolonnas aizpildīšanai, jums jāpatur prātā, ka tās var izmantot arī īslaicīgas ģeometrijas izveidošanai, kuras tiek izmantotas tikai vaicājumā. Piemēram, varat izmantot konstruktora funkciju ST_MakeEnvelope (), lai izveidotu norobežojošo lodziņu, kuru pēc tam izmantojat, lai kādā tabulā atlasītu krustojošās ģeometrijas.

ST_GeomFromText ()
Mēs izmantojām šo funkciju visā 3. nodarbībā, lai izveidotu dažāda veida ģeometrijas. Dokumentācijā, iespējams, redzat, ka tā ievadei ir labi pazīstams teksts (WKT). “Labi pazīstams” labi pazīstamā tekstā attiecas uz faktu, ka teksts ģeometriju noteikšanai atbilst nozares standartam.

Ir vairākas citas funkcijas “FromText” (piemēram, ST_LineFromText, ST_PointFromText), kas rada tādu pašu rezultātu kā ST_GeomFromText (). Atšķirība no šīm funkcijām ir tā, ka tās apstiprina ievades tekstu, lai nodrošinātu, ka tas atbilst paredzētajam ģeometrijas veidam. Tādējādi ST_PointFromText () atgriezīs vērtību Null, ja tam tiks nodots kas cits kā PUNKTA ģeometrija. Ja jūs neredzat nekādu labumu no šīs validācijas, jums labāk ir izmantot vispārīgāku ST_GeomFromText (), jo tas darbojas mazliet labāk.

ST_GeogFromText ()
3. nodarbības beigās mēs runājām par ģeogrāfija datu tips. Varat izmantot ST_GeogFromText (), lai aizpildītu ģeogrāfijas kolonnas tāpat kā mēs izmantojām ST_GeomFromText (), lai aizpildītu ģeometrija kolonnas. Abas funkcijas ļauj norādīt vai izlaist koordinātu SRID. Ja tas tiek izlaists, ST_GeomFromText () nepieņem SRID, tas ir iestatīts uz 0. ST_GeogFromText (), no otras puses, pieņem, ka SRID ir 4326, ja vien nav norādīts citādi.

Funkcijas "Make"
Alternatīva ģeometriju veidošanai ar ST_GeomFromText () ir funkcijas “Make”: ST_MakePoint (), ST_MakeLine () un ST_MakePolygon (). Šīs funkcijas piedāvā labāku veiktspēju nekā ST_GeomFromText (), un to sintakse ir nedaudz kompaktāka. Tātad, kāpēc ST_GeomFromText () vispār pastāv? ST_GeomFromText () nodrošina atbilstību Atvērtā ģeotelpiskā konsorcija (OGC) vienkāršo funkciju specifikācijai. ST_GeomFromText () izmantošanas priekšrocība ir tā, ka citi RDBMS (Oracle, SQL Server) piedāvā gandrīz identiskas funkcijas, kuras jūsu zināšanas par funkciju pārsūtīs uz šīm citām vidēm. Viens no “Make” funkciju trūkumiem ir tas, ka tās neuzņem SRID kā ievadi, kā rezultātā atgrieztajai ģeometrijai ir nenoteikts SRID. Tādējādi izsaukumi uz šīm funkcijām parasti tiek ievietoti izsaukumā uz ST_SetSRID.

Ņemot vērā funkciju “Make” piedāvātās priekšrocības, apskatīsim to lietošanu.

ST_MakePoint ()
Kā jūs droši vien uzminējat, šī funkcija kā ievades pieņem X koordinātu un Y koordinātu (un pēc izvēles Z un M vērtības). Lūk, kā pievienot Empire State Building mūsu tabulai nyc_poi.pts, izmantojot ST_MakePoint ():

ST_MakeLine ()

Šai funkcijai ir trīs alternatīvas sintakse. Pirmais vienkārši pieņem divu punktu ģeometriju kā ievadi un atgriež taisnu līniju, kas savieno abus. Mēs varētu izmantot šo sintaksi, lai pievienotu funkciju Linkolna tunelis:

Otro sintaksi lieto, ja punkti, kas veido līniju, tiek saglabāti tabulā. Lauks, kurā ir punkti, ir norādīts kā vienīgais funkcijas ievads. Šis PostGIS dokumentācijas piemērs parāda līnijas izveidošanu no GPS punktu kopas:

Šajā piemērā tabula ar nosaukumu gps_points saglabā ceļa identifikatoru (gps_track), laiku (gps_time) un punktu ģeometriju (the_geom). Dati, kas atrodas šajās trīs kolonnās, tiek izgūti kā apakšvaicājums ar GPS aizstājvārdu. Vecāku vaicājums grupējas pēc celiņa identifikatora un nodod punktu ģeometrijas lauku funkcijai ST_MakeLine (), lai izveidotu līniju no punktiem.

Pēdējā ST_MakeLine () sintakse kā ievadi pieņem punktu masīvu. Mēs varētu izmantot šo sintaksi, lai pievienotu Holandes tuneli:

Šis piemērs parāda datu veida Postgres ARRAY izmantošanu. Masīvi tiek veidoti, izmantojot ARRAY atslēgvārdu, kam seko objektu saraksts, kas ievietots kvadrātiekavās.

Dokumentācija parāda gudru masīva sintakses lietošanu, kurā tabulā, kuras nosaukums ir visit_locations, glabātu poligonu centra centri tiek izmantoti kā ievade ST_MakeLine ():

ST_MakePolygon ()
Šī funkcija kā ieeju ņem LINESTRING, kas attēlo daudzstūra ārējo gredzenu. Pēc izvēles kā otro ieeju var iekļaut virkni iekšējo gredzenu LINESTRING. Apskatīsim abu piemērus, sākot ar vienkāršāku gadījumu:

Šajā piemērā es izmantoju ST_GeomFromText (), lai izveidotu LINESTRING, jo punktu virknes piegāde ir daudz vienkāršāka nekā tad, ja es būtu izmantojis ST_MakePoint () pieeju, kas izmantota Holland Tunnel piemērā. Iepriekšējos ST_GeomFromText () lietojumos mēs iekļāvām izvēles SRID argumentu, bet šajā piemērā es to izlaidu. Kāpēc? Tā kā ST_MakePolygon () neatkarīgi no tā atgriezīs SRID nesaturošu ģeometriju, ir lietderīgi SRID norādīt tikai vienu reizi izsaukumā uz funkciju ST_SetSRID ().

Un tagad, šeit ir piemērs, kas izmanto ST_MakePolygon (), lai izgrieztu rezervuāru no Centrālparka daudzstūra:

ST_MakeEnvelope ()
Funkcija ST_MakeEnvelope () tiek izmantota, lai izveidotu taisnstūra lodziņu no ierobežojošo koordinātu saraksta: lodziņa minimālā x vērtība, minimālā y vērtība, maksimālā x vērtība un maksimālā y vērtība. Lai gan reti tiek izmantota šāda ģeometrija, lai attēlotu reālās pasaules objektu, aploksnes bieži tiek izmantotas kā ievads citām funkcijām (piemēram, atlasot visas funkcijas, kas atrodas ierobežojošajā lodziņā). Šis ir piemērs, kas ražo aploksni Pensilvānijā:

Šis piemērs vienkārši parāda ST_MakeEnvelope () sintaksi. Ņemiet vērā, ka aploksnes SRID tiek nodrošināts kā pēdējā funkcijas ievade. Šīs aploksnes praktisko izmantošanu mēs redzēsim vēlāk nodarbībā, kad runāsim par funkciju ST_Intersects ().


Q1: kaut kas neefektīvs?

Jūs varētu optimizēt kolonnu secība lai vienā rindā ietaupītu dažus baitus, kas pašlaik tiek izlietoti, lai izlīdzinātu polsterējumu:

Tādējādi rindā tiek ietaupīti no 8 līdz 18 baiti. Es to saucu Kolonna Tetris. Skatīt:

Rindas lieluma aptuveno lielumu, ieskaitot TOAST saturu, ir viegli iegūt, vaicājot visas rindas TEXT attēlojuma garumu:

Tas ir tuvs baitu skaitam, kas tiks izgūts klienta pusē, izpildot:

. pieņemot, ka vaicājuma zvanītājs pieprasa rezultātus teksta formātā, ko dara lielākā daļa programmu (binārs formāts ir iespējams, taču lielākajā daļā gadījumu tas nav vērts nepatikšanas).

To pašu paņēmienu var izmantot, lai atrastu N tabulas nosaukuma “lielākais tekstā” rindas:

Var notikt dažas lietas. Kopumā es šaubos, vai garums ir tuvākā problēma. Man ir aizdomas, ka tā vietā jums ir ar garumu saistīta problēma.

Jūs sakāt, ka teksta lauki var sasniegt pat dažus k. Rindā nevar pārsniegt 8 k galvenajā krātuvē, un, iespējams, lielākie teksta lauki ir grauzdēti vai pārvietoti no galvenās krātuves uz paplašinātu krātuvi atsevišķos failos. Tas padara jūsu galveno krātuvi ātrāku (tātad atlases ID faktiski ir ātrāks, jo mazāk diska lapu var piekļūt), bet atlasiet * kļūst lēnāka, jo ir vairāk nejaušu I / O.

Ja jūsu kopējais rindu izmērs joprojām ir krietni mazāks par 8 k, varat mēģināt mainīt krātuves iestatījumus. Tomēr es brīdinu, ka, ievietojot lielizmēra atribūtu galvenajā atmiņā, var notikt sliktas lietas, tāpēc vislabāk to neaiztieciet, ja jums tas nav jādara, un, ja jūs to darāt, iestatiet atbilstošus ierobežojumus, izmantojot pārbaudes ierobežojumus. Tāpēc transportēšana, visticamāk, nav vienīgā lieta. Tas, iespējams, apkopo daudzus, daudzus laukus, kuriem nepieciešama izlases izlasīšana. Liels skaits nejaušu lasījumu var izraisīt arī kešatmiņas kļūdas, un, ja nepieciešams liels atmiņas apjoms, var būt nepieciešams, lai lietas tiktu materializētas diskā, un liels skaits plašu rindu, ja ir pievienojums (un ir arī viens, ja ir iesaistīts TOAST), var prasīt dārgākas pievienoties modeļiem utt.

Pirmais, ko vēlētos apskatīt, ir atlasīt mazāk rindu un noskaidrot, vai tas palīdz. Ja tas darbojas, jūs varētu arī mēģināt serverim pievienot vairāk RAM, taču es sāktu un redzētu, kur veiktspēja sāk samazināties plāna izmaiņu un kešatmiņas garām dēļ.


Skatīties video: QGIS User0015 - PostGIS Setup