Skip to content

Instantly share code, notes, and snippets.

@mapmeld
Created April 10, 2012 03:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mapmeld/2348135 to your computer and use it in GitHub Desktop.
Save mapmeld/2348135 to your computer and use it in GitHub Desktop.
Scraping County GIS
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