freegeocz AT fsv.cvut.cz
Předmět: Svobodná geoinformační infrastruktura
List archive
- From: vojtko <vojtko AT fns.uniba.sk>
- To: Svobodná geoinformační infrastruktura <freegeocz AT fsv.cvut.cz>
- Subject: Re: [FreeGeoCZ] umiestnenie polygonov na body
- Date: Wed, 09 Sep 2009 17:08:29 +0200
- List-archive: <http://mailman.fsv.cvut.cz/pipermail/freegeocz>
- List-id: Svobodná geoinformační infrastruktura <freegeocz.fsv.cvut.cz>
Ahoj Juraj,
napisal som ti na tento problem skript v pythone (narychlo, je primitivny, ale bude sa aspon dobre citat). Je to trochu zlozitejsie, ale pre nedostatok casu, som to neurobil ako GRASS modul. Zial zatial vie urobit len severojuzne obdlzniky, ale ked sa nan pozriete nebude problem ho prepisat aj na iny ucel. Dufam, ze je to to, co potrebujes. Odskusal som ho, malo by to fungovat.
Postup je nasledovny:
1. export bodov z GRASSu cez prikaz v.out.ascii
v.out.ascii input=tvoje_body output=tvoje_body.grass format=standard
2. samotne vytvorenie obdlznikov urobi z tychto vyexportovanych suradnic bodov skript, ktory som nazval 'points.py'. prikaz je nasledovny:
points.py tvoje_body.grass vysledok vysledok (skript prijima tri argumenty, 1. je vstup dat, 2. a 3. su vystupy, ktore potrebujes)
3. po spusteni skriptu sa vytvoria dva nove subory v tvojom pracovnom adresari jeden sa bude volat vysledok.boundary a druhy vysledok.centroid
4. tieto dva subory treba importovat do GRASSu:
v.in.ascii input=vysledok.boundary output=tvoj_polygon format=standard
v.in.ascii input=vysledok.centroid output=tvoj_centroid format=standard
5. teraz je potrebne body z vrstvy tvoj_centroid pretypovat naozaj na centroidy (v skutocnosti su to points):
v.type input=tvoj_centroid output=tvoj_naozaj_centroid type=point,centroid
6. mame dva subory, jeden obsahuje polygony (tvoj_polygon) a druhy centroidy (tvoj_naoizaj_centroid), treba ich spojit:
v.patch input=tvoj_polygon,tvoj_naozaj_centroid output=finito
7. a nakoniec spojit vektor s databazovou tabulkou
Pekny den,
Rasto
'
Rastislav Vojtko
Dept. Geology & Palaeontology
Faculty of Natural Sciences
Comenius University
Mlynska dolina G
84215 Bratislava
Web:
http://www.aosg.yw.sk
http://geopaleo.fns.uniba.sk
Vojtech Honzik wrote:
Jestli máš rozchozený PostGIS, přijde mi to jako nejjednodušší
varianta rozšířit tabulku o další sloupec typu geometry, vzít WKT
polygon, který má střed kratší strany v počátku souřadnicového systému
a posunout (přetransformovat) ho pro každý záznam v tabulce na správné
místo.
UPDATE tabulka SET <polygon> =
ST_Translate(ST_GeomFromText('POLYGON(-1 0,-1 10,1 10,1 0, -1 0)'),
ST_X(<bod>), ST_Y(<bod>))
Případně i s natočením o daný úhel:
http://postgis.refractions.net/documentation/manual-1.4/ST_Affine.html
Vojta
2009/9/9 WochteR <wochter AT seznam.cz>:
Prave GRASS nevidim ako pouzitelny nastroj.
Pracu s vektormi nema az tak zvladnutu.
Skor rozmyslam nad QGIS a jeho pluginmi, popripade JUMP, KOSMO a podobne.
Alebo este priamo v postgise. Tu som zvazoval postup:
k existujucemu bodu vytvorit dalsi bod vzdialeny 20 metrov (dlhsia strana
obdlznika), potom tieto body spojit do linie a nasledne urobit buffer 1m.
Problem je v tom, ze buffer urobi na koncoch ciary samozrejme obluk. :-)
juraj
------------ Pôvodná správa ------------_______________________________________________
Od: vojtko <vojtko AT fns.uniba.sk>
Predmet: Re: [FreeGeoCZ] umiestnenie polygonov na body
Dátum: 09.9.2009 13:57:07
----------------------------------------
Ahojte,
ja by som postupoval nasledovne:
1) export vektorovych bodov z GRASSu do grass ascii formatu (v.out.ascii),
2) potom by som napisal skript v pythone alebo tcl/tk, ktory by tie body
previedol na polygony o pozadovanej velkosti spolu so stitkami (chce to vsak
trochu casu);
3) importoval spat do GRASSU vysledok (v.in.ascii).
4) pripojil naspat databazovu tabulku na stitky polygonov noveho vektora.
Tento postup si vsak vyzaduje trochu casu, samozrejme, ze data musia byt v
metricke, nie v uhloch ako Lat/Long.
Bod cislo 2 nie je uplna brkacka.
Nie je mi zname, ze by to GRASS vedel urobit interne, ale budem rad, ak
niekto pozna postup. Celkom ma tento problemik zaujal.
Pekny den,
Rasto
Rastislav Vojtko
Dept. Geology & Palaeontology
Faculty of Natural Sciences
Comenius University
Mlynska dolina G
84215 Bratislava
Web:
http://www.aosg.yw.sk
http://geopaleo.fns.uniba.sk
MICHÁLEK Jan Mgr. wrote:
Vypadá to komplikovaně, no já bych si převedl body do JTSK, pak už bykomplikovaný nebylo, algorytmus bysem napsal v pythonu a hrnul to do
to
Postgisu
asi.
Je.Behalf Of WochteR
-----Original Message-----
From: freegeocz-bounces AT fsv.cvut.cz
[mailto:freegeocz-bounces AT fsv.cvut.cz] On
Sent: Wednesday, September 09, 2009 8:53 AM(maju to byt obdlzniky 2x10 metrov) ktorych stredy kratsej strany budu
To: freegeo
Subject: [FreeGeoCZ] umiestnenie polygonov na body
Dobry den,
Obraciam sa na Vas s prosbou o radu.
Mam vrstvu bodov zameranych GPS. Potrebujem vytvorit novu vrstvu s
polygonmi
presne na
danych bodoch. Orientacia dlzhsej strany by mala ist by default na sever
(lepsie
keby sa dal azimut zvolit), no neskor chcem este niektore otacat.
Mam ich vela a chcem sa vyhnut rucnemu vkladaniu.napisat algoritmus na konstrukciu obdlznika, ale je to dost komplikovane.
Rozmyslal som nad vytiahnutim suradnice bodu vo formate WKT (postgis) a
potom
Poznate jednoduchsie riesenie prosim Vas?som funkcionalitu ktora by mi pomohla.
Pozeral som sa na funkcie roznych GIS ako JUMP, KOSMO, WGIS... ale
nenasiel
Dakujem__________
Juraj
>
__________ Informace od ESET NOD32 Antivirus, verze databaze 4408
(20090908)
Tuto zpravu proveril ESET NOD32 Antivirus.__________
http://www.eset.cz
> >
__________ Informace od ESET NOD32 Antivirus, verze databaze 4408
(20090908)
Tuto zpravu proveril ESET NOD32 Antivirus._______________________________________________
http://www.eset.cz
>
_______________________________________________
FreeGeoCZ mailing list
FreeGeoCZ AT fsv.cvut.cz
http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz
FreeGeoCZ mailing list
FreeGeoCZ AT fsv.cvut.cz
http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz
FreeGeoCZ mailing list
FreeGeoCZ AT fsv.cvut.cz
http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz
#!/usr/bin/env python ################################################################################ # points-1.0.py -- # # --- Points --- # (GRASS software) # # Author: Rastislav Vojtko, PhD. # RV: points.py v.1.0 Wed 09 Sep 2009 04:44:54 PM CEST # Comenius University, Bratislava, Slovakia # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # For more information see <http://www.gnu.org/licenses/>. ################################################################################ import sys import string # Funkcia zapise do suboru *.centroid data def printc(pt5, cat, outfile_c): header = "P 1 1\n" outfile_c.write(header) x5 = pt5[0] y5 = pt5[1] x5 = " %s" % x5 y5 = " %s\n" % y5 line5 = x5 + y5 outfile_c.write(line5) footer = " 1 %s \n" % cat outfile_c.write(footer) # Funkcia zapise do suboru *.boundary data def printf(pt1, pt2, pt3, pt4, outfile): header = "B 5\n" outfile.write(header) x1 = pt1[0] y1 = pt1[1] x1 = " %s" % x1 y1 = " %s\n" % y1 line1 = x1 + y1 outfile.write(line1) x2 = pt2[0] y2 = pt2[1] x2 = " %s" % x2 y2 = " %s\n" % y2 line2 = x2 + y2 outfile.write(line2) x3 = pt3[0] y3 = pt3[1] x3 = " %s" % x3 y3 = " %s\n" % y3 line3 = x3 + y3 outfile.write(line3) x4 = pt4[0] y4 = pt4[1] x4 = " %s" % x4 y4 = " %s\n" % y4 line4 = x4 + y4 outfile.write(line4) outfile.write(line1) # Funkcia vypocita pozadovane suradnice bodov obdlznika a centroidu def compute(x, y, cat, outfile, outfile_c): """Function computes angle between two nodes of along line""" # vypocita suradnice 1. bodu polygonu pt_x1 = (x - 1.0) pt_y1 = y pt1 = [ pt_x1, pt_y1 ] # vypocita suradnice 2. bodu polygonu pt_x2 = (x - 1.0) pt_y2 = (y + 10.0) pt2 = [ pt_x2, pt_y2 ] # vypocita suradnice 3. bodu polygonu pt_x3 = (x + 1.0) pt_y3 = (y + 10.0) pt3 = [ pt_x3, pt_y3 ] # vypocita suradnice 4. bodu polygonu pt_x4 = (x + 1.0) pt_y4 = (y) pt4 = [ pt_x4, pt_y4 ] # vypocita suradnice stredu polygonu" pt_x5 = (x) pt_y5 = (y + 5) pt5 = [ pt_x5, pt_y5 ] print "pt1 = ", pt1 print "pt2 = ", pt2 print "pt3 = ", pt3 print "pt4 = ", pt4 printf(pt1, pt2, pt3, pt4, outfile) printc(pt5, cat, outfile_c) def rozdel(dict, outfile, outfile_c): print "Sme v compute function..." #print dict[1] #print dict[2] riadok1 = dict[1] riadok2 = dict[2] riadok1 = string.split(riadok1) riadok2 = string.split(riadok2) print riadok1 print riadok2 x = riadok1[0] y = riadok1[1] x = string.atof(x) y = string.atof(y) cat = riadok2[1] print x print y print cat compute(x, y, cat, outfile, outfile_c) def scandata(infile, outfile, outfile_c): count = 0 while True: line = infile.readline() count = count + 1 if line == "": break if count < 11: continue else: a = string.strip(line) a = string.split(a, " ") if a[0] == 'P': dict = {} for p in range(2): dict[p + 1] = infile.readline() rozdel(dict, outfile, outfile_c) def main(argv): print "Now, we are in python..." inputf = sys.argv[1] outputf = sys.argv[2] outputc =sys.argv[3] outputf = outputf + ".boundary" outputc = outputc + ".centroid" infile = open(inputf, 'r') outfile = open(outputf, 'w') outfile_c = open(outputc, 'w') print inputf print outputf print outputc out = """ORGANIZATION: DIGIT DATE: DIGIT NAME: MAP NAME: MAP DATE: MAP SCALE: 1 OTHER INFO: ZONE: 0 MAP THRESH: 0.000000 VERTI: """ outfile.write(out) outfile_c.write(out) scandata(infile, outfile, outfile_c) infile.close() outfile.close() outfile_c.close() print "finish..." exit() if __name__ == "__main__": main(sys.argv[1:]) ## End of script (c), RV.
- [FreeGeoCZ] umiestnenie polygonov na body, WochteR, 09/09/2009
- RE: [FreeGeoCZ] umiestnenie polygonov na body, MICHÁLEK Jan Mgr ., 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, vojtko, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, WochteR, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, Vojtech Honzik, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, vojtko, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, wochter, 09/13/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, vojtko, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, Martin Landa, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, Vojtech Honzik, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, WochteR, 09/09/2009
- Re: [FreeGeoCZ] umiestnenie polygonov na body, vojtko, 09/09/2009
- RE: [FreeGeoCZ] umiestnenie polygonov na body, MICHÁLEK Jan Mgr ., 09/09/2009
Archivace běží na MHonArc 2.6.19+.