Opened 13 years ago
Closed 12 years ago
#1470 closed defect (fixed)
v.out.ascii with sql where option exports only centroids and not areas
Reported by: | marisn | Owned by: | martinl |
---|---|---|---|
Priority: | blocker | Milestone: | 6.4.3 |
Component: | Vector | Version: | svn-trunk |
Keywords: | v.out.ascii | Cc: | grass-dev@… |
CPU: | Unspecified | Platform: | Unspecified |
Description (last modified by )
It's not possible to export areas selected by SQL WHERE clause. Example from NC data set. Let's export only lake with CAT=5109:
v.out.ascii input=lakes@PERMANENT layer=1 output=vbuffer_fail_on_area3 where=cat=5109 format=standard
Output vector part:
C 1 1 627457.82440791 231495.92575519 1 5109
Change History (13)
comment:1 by , 13 years ago
Keywords: | v.out.ascii added |
---|---|
Milestone: | → 6.4.3 |
follow-up: 3 comment:2 by , 13 years ago
follow-up: 5 comment:3 by , 13 years ago
Description: | modified (diff) |
---|
Replying to mlennert:
Replying to marisn: This is logicial in the sens that only the centroid has a cat=5109. No boundary has this cat. So this would mean implementing a specific algorithm to check which boundary needs to be exported together with this centroid.
Basically it could be possible. Currently v.out.ascii
opens vector map on level 1 (without topology). This would require level 2 (topology). I can imagine special flag which writes out also areas (boundaries and centroids), not only centroids. The problem is that boundaries of adjacent areas will printed twice. I am not sure whether it's a good idea to extend functionality of this module in this direction. Any opinion?
comment:4 by , 13 years ago
Description: | modified (diff) |
---|
follow-up: 6 comment:5 by , 13 years ago
Replying to martinl:
Replying to mlennert:
Replying to marisn: This is logicial in the sens that only the centroid has a cat=5109. No boundary has this cat. So this would mean implementing a specific algorithm to check which boundary needs to be exported together with this centroid.
Basically it could be possible. Currently
v.out.ascii
opens vector map on level 1 (without topology). This would require level 2 (topology). I can imagine special flag which writes out also areas (boundaries and centroids), not only centroids. The problem is that boundaries of adjacent areas will printed twice. I am not sure whether it's a good idea to extend functionality of this module in this direction. Any opinion?
There is enough code in GRASS (other modules, libs) that takes care of such cases, boundaries would not be written twice. Basically a boundary would be written out if the centroid of any of its two areas has a cat value which is in the list. I would like to see that option/functionality in v.out.ascii
because most of the time the vector objects a user works with are points, lines, areas. Modules/libs then take care of appropriate handling of boundaries and centroids.
my2c
Markus M
follow-up: 7 comment:6 by , 13 years ago
Replying to mmetz:
There is enough code in GRASS (other modules, libs) that takes care of such cases, boundaries would not be written twice. Basically a boundary would be written out if the centroid of any of its two areas has a cat value which is in the list. I would like to see that option/functionality in
v.out.ascii
because most of the time the vector objects a user works with are points, lines, areas. Modules/libs then take care of appropriate handling of boundaries and centroids.
follow-up: 8 comment:7 by , 13 years ago
Replying to martinl:
Replying to mmetz:
There is enough code in GRASS (other modules, libs) that takes care of such cases, boundaries would not be written twice. Basically a boundary would be written out if the centroid of any of its two areas has a cat value which is in the list. I would like to see that option/functionality in
v.out.ascii
because most of the time the vector objects a user works with are points, lines, areas. Modules/libs then take care of appropriate handling of boundaries and centroids.
I have modified r48886 to avoid segfaults and r48887 to open vectors with topology only when needed (partially restoring original behaviour to support fast export of massive point vectors).
Markus M
follow-up: 9 comment:8 by , 13 years ago
follow-up: 10 comment:9 by , 13 years ago
comment:10 by , 13 years ago
comment:12 by , 13 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
backported also to relbr64 (-> GRASS 6.4.3), testing welcomed (r50981)
comment:13 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
The export is now:
v.out.ascii input=lakes output=vbuffer_area where=cat=5109 format=standard grep 'B \|C ' vbuffer_area B 93 B 152 B 162 B 3 B 3 C 1 1
Reimport:
v.in.ascii vbuffer_area out=myarea format=standard Building topology for vector map <myarea>... Registering primitives... 6 primitives registered 414 vertices registered Building areas... 100% 1 areas built 1 isles built Attaching islands... 100% Attaching centroids... 100% Number of nodes: 6 Number of primitives: 6 Number of points: 0 Number of lines: 0 Number of boundaries: 5 Number of centroids: 1 Number of areas: 1 Number of isles: 1 v.in.ascii complete.
Looks correct. Closing since it appears to be fixed. Reopen if needed.
Replying to marisn:
This is logicial in the sens that only the centroid has a cat=5109. No boundary has this cat. So this would mean implementing a specific algorithm to check which boundary needs to be exported together with this centroid.
As a workaround: v.extract and then v.out.ascii. Maybe this can be coded in a script ?
Moritz