Created
November 8, 2015 18:08
-
-
Save tneems/b0e42dd79c8570d7e904 to your computer and use it in GitHub Desktop.
Revisions
-
tneems created this gist
Nov 8, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,11 @@ source 'http://rubygems.org' gem "benchmark-ips" gem "rgeo" gem "ffi-geos" gem "rgeo-shapefile" gem "rgeo-geojson" gem "georuby", require: "geo_ruby" This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,29 @@ GEM remote: http://rubygems.org/ specs: benchmark-ips (2.3.0) dbf (3.0.0) ffi (1.9.10) ffi-geos (1.1.0) ffi (>= 1.0.0) georuby (2.0.0) rgeo (0.4.0) rgeo-geojson (0.3.1) rgeo (~> 0.3) rgeo-shapefile (0.2.3) dbf (>= 1.7.0) rgeo (>= 0.3.3) PLATFORMS ruby DEPENDENCIES benchmark-ips ffi-geos georuby rgeo rgeo-geojson rgeo-shapefile BUNDLED WITH 1.10.6 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,141 @@ require "bundler" Bundler.require factory_options = { srid: 4326, wkt_generator: { type_format: :ewkt, emit_ewkt_srid: true, convert_case: :upper }, wkt_parser: { support_ewkt: true }, wkb_generator: { type_format: :ewkb, emit_ewkb_srid: true, hex_format: true }, wkb_parser: { support_ewkb: true } } ewkb = "0106000020E6100000010000000103000000010000007B0000008A247A19C53C52C07B19A88C7FA54440392861A6ED3C52C043E4D70FB1A54440865451BCCA3C52C0D826F8A6E9A54440CC237F30F03C52C0838DCEF929A64440A6EB89AE0B3D52C0455B785E2AA64440D925AAB7063D52C063DEC66647A64440876A4AB20E3D52C0CB66F16261A6444079ABAE43353D52C01895B7239CA64440B2F336363B3D52C031DFDDCA12A7444034677DCA313D52C080FB1D8A02A7444071E7C2482F3D52C039F1B8A816A74440FE428F183D3D52C0FC2284471BA744401DC70F95463D52C00BB1DD3D40A74440EB5223F4333D52C0C6DFD91EBDA74440A5F5B704E03F52C0B3629B5434A84440F1D6F9B7CB3F52C0440229B16BA94440336DFFCA4A3F52C0FC70732A19AA44408849B890473F52C056CCEB8843AA444071C45A7C0A3F52C07601124DA0AA44401BF5108DEE3E52C009DB32E02CAB444021054F21573E52C02E41295AB9AB44405F420587173E52C0AC72840CE4AB4440FB3E1C24443E52C05A61DD7877AC44406D01A1F5F03D52C06F0A0E2F88AC4440BC1DE1B4E03D52C050F2CD3637AC444036936FB6B93D52C0D760C43E01AC44409D0E643DB53D52C030DB317557AC44408B321B64923D52C0E3D9C87553AC44407407B133853D52C08789E942ACAC444084622B685A3D52C01E5CE49EAEAC4440153AAFB14B3D52C0226C5B94D9AC44405260014C193D52C09326C11BD2AC44407FD767CEFA3C52C04FE08096AEAC44402F6D382C0D3D52C0C5E3857478AC4440E4141DC9E53C52C0DB4C689258AC44406E32AA0CE33C52C042478E7406AC4440039CDEC5FB3C52C0EACBB56801AC4440C5724BAB213D52C038F564FED1AB4440486E4DBA2D3D52C0EBE38409A3AB444074BD6DA6423D52C03AD0ED258DAB4440FFCEF6E80D3D52C00F6420CF2EAB44401077F52A323C52C02AB48F15FCAA4440D11F9A79723A52C011124C35B3AA44402593533BC33952C0FF349886E1A9444025CCB4FD2B3952C03D60014C19AA4440C3F01131253952C03348A46DFCA944400D022B87163952C03699D4D006AA4440077C7E18213952C0AF7B0E2C47AA4440320395F1EF3852C0F47E86376BAA4440A48D23D6E23852C0A1DFDA8992AA4440BF0CC688443852C03269368FC3AA444037312427133852C036D1CABDC0AA444024253D0CAD3752C046423EE8D9AA44406DA818E76F3752C06E902C6002AB444016DD7A4D0F3752C05BC79BFC16AB44400F41D5E8D53752C0A899D18F86A744407F4A95287B3852C04A1A868F88A544405A9D9CA1B83852C05AB72407ECA4444003763579CA3852C00D1ADD41ECA44440E2B6B6F0BC3852C08EEE0390DAA444408A4160E5D03852C00975745C8DA44440F64201DBC13852C09ED5E59480A044405320B3B3E83852C0DFDC425722A04440CAA7C7B60C3952C037581B6327A0444004E09F52253952C0EAE21934F49F444072A3C85A433952C028CE3461FB9F4440664CC11A673952C0E045425BCE9F4440DC9F8B868C3952C06CCEA44DD59F44406C97361C963952C025394371C79F444053211E89973952C0EFB3AD669D9F4440DA3D7958A83952C01A2E55698B9F4440CECCCCCCCC3952C03502D4D4B29F44406B459BE3DC3952C043B08D78B29F4440F1F3DF83D73952C00C5D6C5A29A04440E1ED4108C83952C06C8C800A47A04440B85A272EC73952C0ED3CD4B661A04440423EE8D9AC3952C0B6C9C4AD82A044401DC9E53FA43952C02BD653ABAFA044404D64E602973952C0E1D4EAABABA044405F8429CAA53952C00D382EE3A6A044400DE02D90A03952C0FEE7137992A04440A371A8DF853952C086ED0A7DB0A044404A44F817413952C07C662C9ACEA04440CA4C69FD2D3952C0DD845E7F12A14440996379573D3952C05356B60F79A144406E675F79903952C0984D637B2DA24440766B990CC73952C0D5C9FCA36FA244408B14CAC2D73952C066A180ED60A244402E573F36C93952C0E800A43671A244409F58A7CAF73952C090F9635A9BA24440DF516342CC3952C097AE433525A34440D172A087DA3952C04A5B3FFD67A34440D6AA5D13D23952C04BB2F1608BA344407329AE2AFB3952C00D4A7B832FA444400B5D8940F53A52C07484EFFD0DA44440630B410E4A3B52C0F14DB6813BA44440A417B5FB553B52C08DD3F36E2CA44440DD5CFC6D4F3B52C0656EA12B11A4444080F3E2C4573B52C02842CD902AA4444057E883656C3B52C0306117450FA4444067B45549643B52C0B98E54DFF9A34440AD156D8E733B52C0BA30B5A50EA44440B9E00CFE7E3B52C06298F6CDFDA34440571F0F7D773B52C06CB74082E2A3444091B8C7D2873B52C0277D04FEF0A344409811DE1E843B52C04F51D845D1A34440AD69DE718A3B52C083FC4FFEEEA3444023BA675DA33B52C03BE8F527F1A3444037A45181933B52C04B02B7EEE6A3444085B2F0F5B53B52C00E7F30F0DCA34440075DC2A1B73B52C042FCDF1115A4444049111956F13B52C0DDA276BF0AA4444086E5CFB7053C52C0E5484A7A18A444404B1E4FCB0F3C52C0C570581AF8A344400838842A353C52C02FF12A6B9BA4444062804413283C52C05282E15CC3A44440D15790662C3C52C059490ED8D5A44440B41A12F7583C52C03EA86E2EFEA444401536035C903C52C0B915A58460A5444031CD74AF933C52C06225C9737DA54440F6D1A92B9F3C52C044A4897780A544408B5242B0AA3C52C04C2B685A62A544408A247A19C53C52C07B19A88C7FA54440";'' ruby_factory = RGeo::Geographic.spherical_factory(factory_options) ffi_factory = RGeo::Geos::FFIFactory.new(factory_options) capi_factory = RGeo::Geos.factory(factory_options) ruby_parser = RGeo::WKRep::WKBParser.new(ruby_factory, support_ewkb: true) ffi_parser = RGeo::WKRep::WKBParser.new(ffi_factory, support_ewkb: true) capi_parser = RGeo::WKRep::WKBParser.new(capi_factory, support_ewkb: true) rgeo_ruby = ruby_parser.parse(ewkb) rgeo_ffi = ffi_parser.parse(ewkb) rgeo_capi = capi_factory.parse_wkb(ewkb) georuby = GeoRuby::SimpleFeatures::MultiPolygon.from_hex_ewkb ewkb ewkt = georuby.as_ewkt puts "ewkb parse" Benchmark.ips do |x| x.report("georuby ewkb parse") do GeoRuby::SimpleFeatures::MultiPolygon.from_hex_ewkb ewkb end x.report("rgeo ruby ewkb parse") do ruby_factory.parse_wkb(ewkb) end x.report("rgeo ffi ewkb parse") do ffi_factory.parse_wkb(ewkb) end x.report("rgeo capi ewkb parse") do capi_factory.parse_wkb(ewkb) end x.compare! end puts "=" * 80 puts "ewkb render" Benchmark.ips do |x| x.report("georuby ewkb render") do georuby.as_hex_ewkb end x.report("rgeo ruby ewkb render") do rgeo_ruby.as_binary end x.report("rgeo ffi ewkb render") do rgeo_ffi.as_binary end x.report("rgeo capi ewkb render") do rgeo_capi.as_binary end x.compare! end puts "=" * 80 puts "geojson render" Benchmark.ips do |x| x.report("georuby geojson render") do georuby.as_json end x.report("rgeo ruby geojson render") do RGeo::GeoJSON.encode rgeo_ruby end x.report("rgeo ffi geojson render") do RGeo::GeoJSON.encode rgeo_ffi end x.report("rgeo capi geojson render") do RGeo::GeoJSON.encode rgeo_capi end x.compare! end puts "=" * 80 puts "ewkt parse" Benchmark.ips do |x| x.report("georuby ewkt parse") do GeoRuby::SimpleFeatures::MultiPolygon.from_ewkt ewkt end x.report("rgeo ruby ewkt parse") do ruby_factory.parse_wkt(ewkt) end x.report("rgeo ffi ewkt parse") do ffi_factory.parse_wkt(ewkt) end x.report("rgeo capi ewkt parse") do capi_factory.parse_wkt(ewkt) end x.compare! end puts "=" * 80 puts "ewkt render" Benchmark.ips do |x| x.report("georuby ewkt render") do georuby.as_ewkt end x.report("rgeo ruby ewkt render") do rgeo_ruby.as_text end x.report("rgeo ffi ewkt render") do rgeo_ffi.as_text end x.report("rgeo capi ewkt render") do rgeo_capi.as_text end x.compare! end