Re: [Django] #12010: Document the GEOS IO Classes

2009-10-11 Thread Django
#12010: Document the GEOS IO Classes
---+
  Reporter:  James | Owner:  jbronn
Status:  assigned  | Milestone:
 Component:  GIS   |   Version:  1.1   
Resolution:|  Keywords:
 Stage:  Accepted  | Has_patch:  0 
Needs_docs:  1 |   Needs_tests:  0 
Needs_better_patch:  0 |  
---+
Comment (by James):

 Thanks for the response.  It would be great if hex did as advertised and
 simply did this for us vs having to know about and use the capi wrappers.

 I have some additional timing info to give since I did a bunch of
 profiling on these different approaches of retrieving the hex of the
 extended WKP.

 So I did some timings on several methods and here were the results:
 {{{
 getEWKBHEX 0.59
 hex 0.23
 write_hex 0.22
 str 0.01
 encode 0.02
 }}}
 Each timing test profiles the time it takes to run ~1 calls of each
 use case.

 'getEWKBHEX' is my optimized code of the original snipet I provided.  It
 is almost 20% faster then the original snippet, but is much slower then
 the other methods which doesn't surprise me since I must use the pack and
 unpack methods from python.

 'hex' is the current implementation for GEOSGeometry.hex, which doesn't
 really do HEXEWKB.

 'write_hex' is the capi wrapper call jbronn mentioned.  The timing makes
 in all my trials it is slightly faster then the hex implementation, which
 is odd but probably has to do with data alignments in the native C library
 or simply the overhead costs between the two functions to cross the python
 to native c boundries.

 'str' + 'encode' timings (0.03) is the total time needed to simply encode
 the GEOSGeometry.wkp field to hex.  This is what was suggested in the
 codebase in the comments for speedup.  This proves it, as long as hex
 should NOT provide HEXEWKB.

 In summary, to do as the docs advertise and GEOSGeometry.hex should return
 HEXEWKB embedding the CAPI calls as shown by jbronn would not adversely
 affect performance.  However, if the behavior must stay the same making
 the modifications to do a direct encode of the wkp field vs. calling
 through the underlying api would provide a large speed increase.

 If anyone is interested here is the profiling code I used:
 {{{
 import time
 def timing(f, n, a):
 if f.__name__:
 print f.__name__,
 r = range(n)
 t1 = time.clock()
 for i in r:
 f(*a); f(*a); f(*a); f(*a); f(*a); f(*a); f(*a); f(*a); f(*a);
 f(*a)
 t2 = time.clock()
 print round(t2-t1, 3)

 from django.contrib.gis.geos import GEOSGeometry, WKBWriter
 if __name__ == '__main__':
 wkb_w = WKBWriter()
 wkb_w.srid = True
 g=GEOSGeometry("POINT(1 2)", srid=4326)
 timing(getEWKBHEX, 1000, (g,))
 timing(GEOSGeometry.hex.fget, 1000, (g,))
 timing(wkb_w.write_hex, 1000, (g,))
 timing(str, 1000, (g.wkb,))
 timing(str.encode, 1000, (str(g.wkb),'HEX' ))
 }}}

-- 
Ticket URL: 
Django 
The Web framework for perfectionists with deadlines.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~--~~~~--~~--~--~---



Re: [Django] #12010: Document the GEOS IO Classes

2009-10-10 Thread Django
#12010: Document the GEOS IO Classes
---+
  Reporter:  James | Owner:  jbronn
Status:  assigned  | Milestone:
 Component:  GIS   |   Version:  1.1   
Resolution:|  Keywords:
 Stage:  Accepted  | Has_patch:  0 
Needs_docs:  1 |   Needs_tests:  0 
Needs_better_patch:  0 |  
---+
Changes (by jbronn):

  * owner:  nobody => jbronn
  * needs_docs:  0 => 1
  * summary:  GEOSGemoentry hex method does not return HEXEWKB => Document
  the GEOS IO Classes
  * status:  new => assigned
  * stage:  Unreviewed => Accepted

Comment:

 !GeoDjango wraps the GEOS library.  Included in the 1.1 release were
 wrappers for the GEOS IO classes: `WKBReader`, `WKBWriter`, `WKTReader`,
 and `WKTWriter` -- unfortunately, this is not in the documentation.
 Regardless, the IO classes allow for finer-grained serialization of
 (HEX)EWKB.  For example:
 {{{
 #!python
 from django.contrib.gis.geos import Point, WKBWriter

 # Creating WKBWriter instance and setting SRID flag to True
 wkb_w = WKBWriter()
 wkb_w.srid = True

 # Also, for 3D support
 #wkb_w.outdim = 3

 pnt = Point(1, 2, srid=4326)

 # This is '010120E610F03F0040'
 hexewkb = wkb_w.write_hex(pnt)
 }}}

 Thus, HEXEWKB support already exists it's just poorly documented.  I'll
 keep this ticket open until I complete the documentation for the GEOS IO
 class interfaces.

-- 
Ticket URL: 
Django 
The Web framework for perfectionists with deadlines.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~--~~~~--~~--~--~---