shapes 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/ext/shapes/Makefile +217 -0
- data/ext/shapes/dbfopen.c +2221 -0
- data/ext/shapes/extconf.rb +3 -0
- data/ext/shapes/libshp.a +0 -0
- data/ext/shapes/mkmf.log +40 -0
- data/ext/shapes/safileio.c +286 -0
- data/ext/shapes/shapefil.h +647 -0
- data/ext/shapes/shapes.c +136 -0
- data/ext/shapes/shapes.h +12 -0
- data/ext/shapes/shpopen.c +2388 -0
- data/ext/shapes/shptree.c +1187 -0
- data/lib/shapes.rb +7 -0
- data/lib/shapes/geometry.rb +48 -0
- data/lib/shapes/shape_file.rb +63 -0
- data/lib/shapes/version.rb +3 -0
- data/shapes.gemspec +20 -0
- metadata +67 -0
data/lib/shapes.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Shapes
|
2
|
+
class Point
|
3
|
+
attr_accessor :longitude, :latitude, :altitude, :projection
|
4
|
+
|
5
|
+
def initialize(lat = nil,long = nil,alt = nil,proj = :wgs84)
|
6
|
+
self.latitude = lat
|
7
|
+
self.longitude = long
|
8
|
+
self.altitude = alt
|
9
|
+
self.projection = proj
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Polygon
|
14
|
+
attr_accessor :vertices, :num_vertices
|
15
|
+
|
16
|
+
def initialize(vertices = nil,num_vertices = 4)
|
17
|
+
self.vertices = vertices if Array === vertices
|
18
|
+
self.vertices ||= []
|
19
|
+
self.num_vertices = num_vertices
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_point(p)
|
23
|
+
self.vertices << p
|
24
|
+
end
|
25
|
+
|
26
|
+
def <<(p)
|
27
|
+
add_point p
|
28
|
+
end
|
29
|
+
|
30
|
+
def xs
|
31
|
+
self.vertices.map {|p| p.longitude }
|
32
|
+
end
|
33
|
+
|
34
|
+
def ys
|
35
|
+
self.vertices.map {|p| p.latitude }
|
36
|
+
end
|
37
|
+
|
38
|
+
def zs
|
39
|
+
self.vertices.map {|p| p.altitude }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Arc < Polygon
|
44
|
+
end
|
45
|
+
|
46
|
+
class MultiPoint < Polygon
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Shapes
|
2
|
+
class ShapeFile
|
3
|
+
attr_accessor :handle
|
4
|
+
|
5
|
+
def initialize(afile = nil,stype = nil)
|
6
|
+
if afile and stype
|
7
|
+
self.handle = ShapesLib::create_shape afile, stype.to_s
|
8
|
+
elsif afile
|
9
|
+
self.handle = ShapesLib::open_shape afile
|
10
|
+
else
|
11
|
+
return self # get out of the function if no handle was passed
|
12
|
+
end
|
13
|
+
|
14
|
+
# but if we attempted to create a handle, make sure
|
15
|
+
# it actually returned something valid
|
16
|
+
return self.handle unless self.handle
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create(filename,shape_type,&block)
|
20
|
+
shape_handle = ShapesLib::create_shape filename, shape_type.to_s
|
21
|
+
return shape_handle unless shape_handle
|
22
|
+
|
23
|
+
inst = new
|
24
|
+
inst.handle = shape_handle
|
25
|
+
|
26
|
+
inst.define(&block)
|
27
|
+
|
28
|
+
ShapesLib::close_shape shape_handle
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.open(filename,&block)
|
32
|
+
shape_handle = ShapesLib::open_shape filename
|
33
|
+
return shape_handle unless shape_handle
|
34
|
+
|
35
|
+
inst = new
|
36
|
+
inst.handle = shape_handle
|
37
|
+
|
38
|
+
inst.define(&block)
|
39
|
+
|
40
|
+
ShapesLib::close_shape shape_handle
|
41
|
+
end
|
42
|
+
|
43
|
+
def define(&block)
|
44
|
+
instance_eval(&block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def point(p)
|
48
|
+
ShapesLib::create_object self.handle, 'point', 1, [p.longitude], [p.latitude], [p.altitude]
|
49
|
+
end
|
50
|
+
|
51
|
+
def polygon(p)
|
52
|
+
ShapesLib::create_object self.handle, 'polygon', p.num_vertices, p.xs, p.ys, p.zs
|
53
|
+
end
|
54
|
+
|
55
|
+
def arc(a)
|
56
|
+
ShapesLib::create_object self.handle, 'arc', a.num_vertices, a.xs, p.ys, p.zs
|
57
|
+
end
|
58
|
+
|
59
|
+
def multipoint(mp)
|
60
|
+
ShapesLib::create_object self.handle, 'multipoint', mp.num_vertices, mp.xs, mp.ys, mp.zs
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/shapes.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'shapes/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "shapes"
|
8
|
+
gem.version = Shapes::VERSION
|
9
|
+
gem.authors = ["Omar Qazi"]
|
10
|
+
gem.email = ["omar@predpol.com"]
|
11
|
+
gem.description = %q{A simple ruby library for writing shape files}
|
12
|
+
gem.summary = %q{Yeah, read the description}
|
13
|
+
gem.homepage = "http://www.predpol.com/"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
gem.extensions = ['ext/shapes/extconf.rb']
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shapes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Omar Qazi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-30 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A simple ruby library for writing shape files
|
15
|
+
email:
|
16
|
+
- omar@predpol.com
|
17
|
+
executables: []
|
18
|
+
extensions:
|
19
|
+
- ext/shapes/extconf.rb
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE.txt
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- ext/shapes/Makefile
|
28
|
+
- ext/shapes/dbfopen.c
|
29
|
+
- ext/shapes/extconf.rb
|
30
|
+
- ext/shapes/libshp.a
|
31
|
+
- ext/shapes/mkmf.log
|
32
|
+
- ext/shapes/safileio.c
|
33
|
+
- ext/shapes/shapefil.h
|
34
|
+
- ext/shapes/shapes.c
|
35
|
+
- ext/shapes/shapes.h
|
36
|
+
- ext/shapes/shpopen.c
|
37
|
+
- ext/shapes/shptree.c
|
38
|
+
- lib/shapes.rb
|
39
|
+
- lib/shapes/geometry.rb
|
40
|
+
- lib/shapes/shape_file.rb
|
41
|
+
- lib/shapes/version.rb
|
42
|
+
- shapes.gemspec
|
43
|
+
homepage: http://www.predpol.com/
|
44
|
+
licenses: []
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
requirements: []
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 1.8.23
|
64
|
+
signing_key:
|
65
|
+
specification_version: 3
|
66
|
+
summary: Yeah, read the description
|
67
|
+
test_files: []
|