Created
April 10, 2012 03:20
-
-
Save mapmeld/2348135 to your computer and use it in GitHub Desktop.
Scraping County GIS
This file contains 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