Created
April 10, 2012 03:20
-
-
Save mapmeld/2348135 to your computer and use it in GitHub Desktop.
Scraping County GIS
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 characters
| get '/parcel' do | |
| url = 'http://gis.co.bibb.ga.us/freeance/Server/Dzeims3.php' | |
| url = URI.parse(url) | |
| headers = { | |
| "Accept" => "*/*", | |
| "Accept-Charset" => "ISO-8859-1,utf-8;q=0.7,*;q=0.3", | |
| "Accept-Encoding" => "gzip,deflate,sdch", | |
| "Accept-Language" => "en-US,en;q=0.8", | |
| "Connection" => "keep-alive", | |
| "Content-Length" => "409", | |
| "Content-Type" => "text/xml", | |
| "Host" => "gis.co.bibb.ga.us", | |
| "Origin" => "http://gis.co.bibb.ga.us", | |
| "Referer" => "http://gis.co.bibb.ga.us/freeance/Client/PublicAccess1/index.html?appconfig=Property", | |
| "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19" | |
| } | |
| res = Net::HTTP.start(url.host, url.port) {|http| | |
| http.post('/freeance/Server/Dzeims3.php', "<methodCall> | |
| <methodName>GIS.Session.initialize</methodName> | |
| <params> | |
| <param> | |
| <value><string/></value> | |
| </param> | |
| <param> | |
| <value><array><data> | |
| <value><array><data> | |
| <value><string>PropertyInfo</string></value> | |
| <value><i4>10</i4></value> | |
| <value><i4>1048</i4></value> | |
| <value><i4>491</i4></value> | |
| <value><boolean>0</boolean></value> | |
| </data></array> | |
| </value> | |
| </data></array> | |
| </value> | |
| </param> | |
| </params> | |
| </methodCall>", headers) | |
| } | |
| getmyid = res.body.split('<value><string>') | |
| foundid = '' | |
| getmyid.each do |sessionid| | |
| if sessionid.index("</string></value>") != nil | |
| if sessionid.index("</string></value>") > 10 and sessionid.index(".jpg") == nil | |
| foundid = sessionid.split('</string></value>')[0] | |
| break | |
| end | |
| end | |
| end | |
| # 0.615702479338843 => 32.84495555555556 | |
| # 0.6301652892561984 => 32.84995555555556 | |
| # 0.5763358778625954 => -83.62139444444443 (actual 0.571193879 ) | |
| # 0.583969465648855 => -83.60842222222222 (actual 0.585999465 ) | |
| # bo = 1.14133 * lng + 96.0108 | |
| #leftbo = 0.26145038167938933 # for lng=-83.8924 | |
| #rightbo = 0.7213740458015268 # for lng=-83.48943 | |
| # bo = 2.96423 * lat - 96.7413 | |
| #topbo = 0.9380165289256198 # for lat=32.95272 | |
| #bottombo = 0.0723140495867769 # for lat=32.66067 | |
| # Terminal Station | |
| desiredlat = 32.835085 | |
| desiredlng = -83.626013 | |
| if params['lat'] | |
| desiredlat = params['lat'].to_f | |
| end | |
| if params['lng'] | |
| desiredlng = params['lng'].to_f | |
| end | |
| desiredlatbo = 2.96423 * desiredlat - 96.7413 | |
| topbo = desiredlatbo + 0.0144628099 / 2 * 0.6 | |
| bottombo = desiredlatbo - 0.0144628099 / 2 * 1.4 | |
| desiredlngbo = 1.14133 * desiredlng + 96.0108 | |
| leftbo = desiredlngbo - 0.00763358779 / 2 * 0.38 | |
| rightbo = desiredlngbo + 0.00763358779 / 2 * 1.62 | |
| res = Net::HTTP.start(url.host, url.port) {|http| | |
| http.post('/freeance/Server/Dzeims3.php', "<methodCall> | |
| <methodName>GIS.Zoom.to.windowPercent</methodName> | |
| <params> | |
| <param> | |
| <value><string>" + foundid + "</string></value> | |
| </param> | |
| <param> | |
| <value><i4>0</i4></value> | |
| </param> | |
| <param> | |
| <value><i4>1048</i4></value> | |
| </param> | |
| <param> | |
| <value><i4>491</i4></value> | |
| </param> | |
| <param> | |
| <value><double>" + bottombo.to_s() + "</double></value> | |
| </param> | |
| <param> | |
| <value><double>" + topbo.to_s() + "</double></value> | |
| </param> | |
| <param> | |
| <value><double>" + leftbo.to_s() + "</double></value> | |
| </param> | |
| <param> | |
| <value><double>" + rightbo.to_s() + "</double></value> | |
| </param> | |
| </params> | |
| </methodCall>", headers) | |
| } | |
| #return res.body | |
| res = Net::HTTP.start(url.host, url.port) {|http| | |
| http.post('/freeance/Server/Dzeims3.php', "<methodCall> | |
| <methodName>GIS.Selection.entity.byPoint</methodName> | |
| <params> | |
| <param> | |
| <value><string>" + foundid + "</string></value> | |
| </param> | |
| <param> | |
| <value><i4>0</i4></value> | |
| </param> | |
| <param> | |
| <value><i4>1048</i4></value> | |
| </param> | |
| <param> | |
| <value><i4>491</i4></value> | |
| </param> | |
| <param> | |
| <value><array><data> | |
| <value><array><data> | |
| <value><double>0.5000000</double></value> | |
| <value><double>0.5000000</double></value> | |
| </data></array> | |
| </value> | |
| </data></array> | |
| </value> | |
| </param> | |
| <param> | |
| <value><boolean>1</boolean></value> | |
| </param> | |
| <param> | |
| <value><string>19</string></value> | |
| </param> | |
| <param> | |
| <value><i4>-1</i4></value> | |
| </param> | |
| <param> | |
| <value><string>GAPIN,MAP_ROUTE</string></value> | |
| </param> | |
| <param> | |
| <value><boolean>0</boolean></value> | |
| </param> | |
| <param> | |
| <value><string>RedBoundaryPolygon</string></value> | |
| </param> | |
| <param> | |
| <value><i4>-1</i4></value> | |
| </param> | |
| <param> | |
| <value><array><data> | |
| <value><array><data> | |
| <value><string>qryGAPIN</string></value> | |
| <value><array><data> | |
| <value><array><data> | |
| <value><string>GAPIN</string></value> | |
| <value><string>varGAPIN</string></value> | |
| </data></array> | |
| </value> | |
| </data></array> | |
| </value> | |
| </data></array> | |
| </value> | |
| </data></array> | |
| </value> | |
| </param> | |
| <param> | |
| <value><boolean>0</boolean></value> | |
| </param> | |
| </params> | |
| </methodCall>", headers) | |
| } | |
| view = res.body.slice( res.body.index('/server/get_image') .. res.body.index('</string></value>') - 1 ) | |
| table = res.body.slice( res.body.index('<value><struct>') .. res.body.rindex('</struct></value>') - 1 ) | |
| tableprint = "<table border='1'>" + table.gsub('<member><name>','<tr><td>').gsub('</name>','</td>').gsub('<value>','<td>').gsub('</member>','</td></tr>').gsub('Attributes.','') + "</table>" | |
| return "<html><body><img src='http://gis.co.bibb.ga.us/freeance/" + view + "' width='450'/>" + tableprint + "</body></html>" | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment