nyc_geo_client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +9 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +22 -0
  6. data/README.md +81 -0
  7. data/Rakefile +30 -0
  8. data/lib/faraday/raise_http_exception.rb +26 -0
  9. data/lib/nyc_geo_client.rb +26 -0
  10. data/lib/nyc_geo_client/api.rb +21 -0
  11. data/lib/nyc_geo_client/client.rb +13 -0
  12. data/lib/nyc_geo_client/client/address.rb +34 -0
  13. data/lib/nyc_geo_client/client/bbl.rb +31 -0
  14. data/lib/nyc_geo_client/client/bin.rb +27 -0
  15. data/lib/nyc_geo_client/client/blockface.rb +37 -0
  16. data/lib/nyc_geo_client/client/intersection.rb +34 -0
  17. data/lib/nyc_geo_client/client/place.rb +29 -0
  18. data/lib/nyc_geo_client/configuration.rb +84 -0
  19. data/lib/nyc_geo_client/connection.rb +30 -0
  20. data/lib/nyc_geo_client/error.rb +12 -0
  21. data/lib/nyc_geo_client/request.rb +59 -0
  22. data/lib/nyc_geo_client/version.rb +3 -0
  23. data/nyc_geo_client.gemspec +28 -0
  24. data/spec/faraday/response_spec.rb +43 -0
  25. data/spec/fixtures/address.json +142 -0
  26. data/spec/fixtures/address.xml +142 -0
  27. data/spec/fixtures/authentication_failed +1 -0
  28. data/spec/fixtures/bbl.json +45 -0
  29. data/spec/fixtures/bbl.xml +45 -0
  30. data/spec/fixtures/bin.json +43 -0
  31. data/spec/fixtures/bin.xml +43 -0
  32. data/spec/fixtures/blockface.json +99 -0
  33. data/spec/fixtures/blockface.xml +99 -0
  34. data/spec/fixtures/intersection.json +69 -0
  35. data/spec/fixtures/intersection.xml +69 -0
  36. data/spec/fixtures/place.json +177 -0
  37. data/spec/fixtures/place.xml +177 -0
  38. data/spec/nyc_geo_client/api_spec.rb +67 -0
  39. data/spec/nyc_geo_client/client/address_spec.rb +45 -0
  40. data/spec/nyc_geo_client/client/bbl_spec.rb +45 -0
  41. data/spec/nyc_geo_client/client/bin_spec.rb +41 -0
  42. data/spec/nyc_geo_client/client/blockface_spec.rb +49 -0
  43. data/spec/nyc_geo_client/client/intersection_spec.rb +47 -0
  44. data/spec/nyc_geo_client/client/place_spec.rb +43 -0
  45. data/spec/nyc_geo_client/client_spec.rb +11 -0
  46. data/spec/nyc_geo_client_spec.rb +108 -0
  47. data/spec/spec_helper.rb +51 -0
  48. metadata +254 -0
@@ -0,0 +1,84 @@
1
+ require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ module NYCGeoClient
5
+ # Defines constants and methods related to configuration
6
+ module Configuration
7
+ # An array of valid keys in the options hash when configuring a {NYCGeoClient::API}
8
+ VALID_OPTIONS_KEYS = [
9
+ :adapter,
10
+ :app_id,
11
+ :app_key,
12
+ :endpoint,
13
+ :format,
14
+ :user_agent,
15
+ :proxy,
16
+ :debug
17
+ ].freeze
18
+
19
+ # An array of valid request/response formats
20
+ VALID_FORMATS = [:json, :xml].freeze
21
+
22
+ # The adapter that will be used to connect if none is set
23
+ #
24
+ # @note The default faraday adapter is Net::HTTP.
25
+ DEFAULT_ADAPTER = Faraday.default_adapter
26
+
27
+ # By default, don't set an application ID
28
+ DEFAULT_APP_ID = nil
29
+
30
+ # By default, don't set an application KEY
31
+ DEFAULT_APP_KEY = nil
32
+
33
+ # The endpoint that will be used to connect if none is set
34
+ #
35
+ # @note There is no reason to use any other endpoint at this time
36
+ DEFAULT_ENDPOINT = 'https://api.cityofnewyork.us/geoclient/v1/'.freeze
37
+
38
+ # The response format appended to the path and sent in the 'Accept' header if none is set
39
+ #
40
+ # @note JSON and XML are the available formats
41
+ DEFAULT_FORMAT = :json
42
+
43
+ # By default, don't use a proxy server
44
+ DEFAULT_PROXY = nil
45
+
46
+ # By default, dont' log the request/response
47
+ DEFAULT_DEBUG = false
48
+
49
+ # The user agent that will be sent to the API endpoint if none is set
50
+ DEFAULT_USER_AGENT = "NYCGeoClient #{NYCGeoClient::VERSION}".freeze
51
+
52
+ # @private
53
+ attr_accessor *VALID_OPTIONS_KEYS
54
+
55
+ # When this module is extended, set all configuration options to their default values
56
+ def self.extended(base)
57
+ base.reset
58
+ end
59
+
60
+ # Convenience method to allow configuration options to be set in a block
61
+ def configure
62
+ yield self
63
+ end
64
+
65
+ # Create a hash of options and their values
66
+ def options
67
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
68
+ option.merge!(key => send(key))
69
+ end
70
+ end
71
+
72
+ # Reset all configuration options to defaults
73
+ def reset
74
+ self.adapter = DEFAULT_ADAPTER
75
+ self.app_id = DEFAULT_APP_ID
76
+ self.app_key = DEFAULT_APP_KEY
77
+ self.endpoint = DEFAULT_ENDPOINT
78
+ self.format = DEFAULT_FORMAT
79
+ self.user_agent = DEFAULT_USER_AGENT
80
+ self.proxy = DEFAULT_PROXY
81
+ self.debug = DEFAULT_DEBUG
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,30 @@
1
+ require 'faraday_middleware'
2
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
3
+
4
+ module NYCGeoClient
5
+ # @private
6
+ module Connection
7
+ private
8
+
9
+ def connection(raw=false)
10
+ options = {
11
+ :headers => {'Accept' => "application/json; charset=utf-8", 'User-Agent' => user_agent},
12
+ :proxy => proxy,
13
+ :ssl => {:verify => false},
14
+ :url => endpoint,
15
+ }
16
+
17
+ Faraday::Connection.new(options) do |connection|
18
+ connection.use Faraday::Request::UrlEncoded
19
+ unless raw
20
+ connection.use FaradayMiddleware::Mashify
21
+ connection.use Faraday::Response::ParseJson if format == :json
22
+ connection.use Faraday::Response::ParseXml if format == :xml
23
+ end
24
+ connection.use FaradayMiddleware::RaiseHttpException
25
+ connection.use Faraday::Response::Logger if debug
26
+ connection.adapter(adapter)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ module NYCGeoClient
2
+ # Custom error class for rescuing from all NYCGeoClient errors
3
+ class Error < StandardError
4
+ attr_reader :status
5
+
6
+ def initialize(message, status=nil)
7
+ super(message)
8
+ @status = status
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,59 @@
1
+ module NYCGeoClient
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, options={}, raw=false)
6
+ request(:get, path, options, raw)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, options={}, raw=false)
11
+ request(:post, path, options, raw)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, options={}, raw=false)
16
+ request(:put, path, options, raw)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, options={}, raw=false)
21
+ request(:delete, path, options, raw)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, options, raw=false)
28
+ new_options = access_params.merge(options)
29
+ response = connection(raw).send(method) do |request|
30
+ path = formatted_path(path)
31
+ case method
32
+ when :get, :delete
33
+ request.url(path, new_options)
34
+ when :post, :put
35
+ request.path = path
36
+ request.body = new_options unless new_options.empty?
37
+ end
38
+ end
39
+ if raw
40
+ response
41
+ elsif format == :xml
42
+ response.body.geosupportResponse # the xml response is wrapped in <geosupportResponse> tags
43
+ else
44
+ response.body
45
+ end
46
+ end
47
+
48
+ def formatted_path(path)
49
+ [path, format].compact.join('.')
50
+ end
51
+
52
+ def access_params
53
+ hash = {}
54
+ hash[:app_id] = app_id if app_id
55
+ hash[:app_key] = app_key if app_key
56
+ hash
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module NYCGeoClient
2
+ VERSION = "0.0.1".freeze unless defined?(::NYCGeoClient::VERSION)
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/nyc_geo_client/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.add_development_dependency 'rake'
6
+ gem.add_development_dependency('rspec', '~> 2.14.1')
7
+ gem.add_development_dependency('webmock', '~> 1.17.1')
8
+ gem.add_development_dependency('yard', '~> 0.8.7.3')
9
+ gem.add_development_dependency('bluecloth', '~> 2.2.0')
10
+
11
+ gem.add_runtime_dependency('faraday', '~> 0.8.8')
12
+ gem.add_runtime_dependency('faraday_middleware', '~> 0.9.0')
13
+ gem.add_runtime_dependency('multi_json', '~> 1.8.4')
14
+ gem.add_runtime_dependency('multi_xml', '~> 0.5.5')
15
+ gem.add_runtime_dependency('hashie', '~> 2.0.5')
16
+ gem.authors = ["Edgar Gonzalez"]
17
+ gem.email = ["edgargonzalez@gmail.com"]
18
+ gem.description = %q{A ruby wrapper for NYCGeoClient API}
19
+ gem.homepage = "http://github.com/edgar/NYCGeoClient"
20
+
21
+ gem.files = `git ls-files`.split($\)
22
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
23
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
24
+ gem.summary = %q{A ruby wrapper for NYCGeoClient API}
25
+ gem.name = "nyc_geo_client"
26
+ gem.require_paths = ["lib"]
27
+ gem.version = NYCGeoClient::VERSION.dup
28
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Faraday::Response do
4
+ before do
5
+ @client = NYCGeoClient::Client.new(app_id: 'foo', app_key: 'bar')
6
+ end
7
+
8
+ [403, 500, 503].each do |status|
9
+ context "when HTTP status is #{status}" do
10
+ before do
11
+ stub_get("address.json").
12
+ with(
13
+ query: {
14
+ app_id: @client.app_id,
15
+ app_key: @client.app_key,
16
+ houseNumber: '13',
17
+ street: 'crosby',
18
+ borough: 'manhattan'
19
+ }).
20
+ to_return(body: 'some message', status: status)
21
+ end
22
+
23
+ it "should raise a NYCGeoClient error" do
24
+ lambda do
25
+ @client.address('13','crosby','manhattan')
26
+ end.should raise_error(NYCGeoClient::Error)
27
+ end
28
+
29
+ it "should return the status and body" do
30
+ begin
31
+ @client.address('13','crosby','manhattan')
32
+ rescue NYCGeoClient::Error => ex
33
+ ex.status.should be == status
34
+ ex.message.split(": ").should be == [
35
+ "GET https://api.cityofnewyork.us/geoclient/v1/address.json?app_id=foo&app_key=bar&houseNumber=13&street=crosby&borough=manhattan",
36
+ "#{status}",
37
+ "some message"
38
+ ]
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,142 @@
1
+ {
2
+ "address": {
3
+ "assemblyDistrict": "65",
4
+ "bbl": "1002330004",
5
+ "bblBoroughCode": "1",
6
+ "bblTaxBlock": "00233",
7
+ "bblTaxLot": "0004",
8
+ "boardOfElectionsPreferredLgc": "1",
9
+ "boePreferredStreetName": "CROSBY STREET",
10
+ "boePreferredstreetCode": "11615001",
11
+ "boroughCode1In": "1",
12
+ "buildingIdentificationNumber": "1003041",
13
+ "censusBlock2000": "2001",
14
+ "censusBlock2010": "1009",
15
+ "censusTract1990": " 45 ",
16
+ "censusTract2000": " 45 ",
17
+ "censusTract2010": " 45 ",
18
+ "cityCouncilDistrict": "01",
19
+ "civilCourtDistrict": "01",
20
+ "coincidentSegmentCount": "1",
21
+ "communityDistrict": "102",
22
+ "communityDistrictBoroughCode": "1",
23
+ "communityDistrictNumber": "02",
24
+ "communitySchoolDistrict": "02",
25
+ "condominiumBillingBbl": "0000000000",
26
+ "congressionalDistrict": "10",
27
+ "cooperativeIdNumber": "0000",
28
+ "crossStreetNamesFlagIn": "E",
29
+ "dcpCommercialStudyArea": "11010",
30
+ "dcpPreferredLgc": "01",
31
+ "dotStreetLightContractorArea": "1",
32
+ "dynamicBlock": "202",
33
+ "electionDistrict": "067",
34
+ "fireBattalion": "02",
35
+ "fireCompanyNumber": "055",
36
+ "fireCompanyType": "E",
37
+ "fireDivision": "01",
38
+ "firstBoroughName": "MANHATTAN",
39
+ "firstStreetCode": "11615001010",
40
+ "firstStreetNameNormalized": "CROSBY STREET",
41
+ "fromLionNodeId": "0020487",
42
+ "fromPreferredLgcsFirstSetOf5": "01",
43
+ "genericId": "0001675",
44
+ "geosupportFunctionCode": "1B",
45
+ "geosupportReturnCode": "00",
46
+ "geosupportReturnCode2": "00",
47
+ "gi5DigitStreetCode1": "16150",
48
+ "giBoroughCode1": "1",
49
+ "giBuildingIdentificationNumber1": "1003041",
50
+ "giDcpPreferredLgc1": "01",
51
+ "giHighHouseNumber1": "17",
52
+ "giLowHouseNumber1": "13",
53
+ "giSideOfStreetIndicator1": "R",
54
+ "giStreetCode1": "11615001",
55
+ "giStreetName1": "CROSBY STREET",
56
+ "healthArea": "6800",
57
+ "healthCenterDistrict": "15",
58
+ "highBblOfThisBuildingsCondominiumUnits": "1002330004",
59
+ "highCrossStreetB5SC1": "121690",
60
+ "highCrossStreetCode1": "12169001",
61
+ "highCrossStreetName1": "GRAND STREET",
62
+ "highHouseNumberOfBlockfaceSortFormat": "000021000AA",
63
+ "houseNumber": "13",
64
+ "houseNumberIn": "13",
65
+ "houseNumberSortFormat": "000013000AA",
66
+ "interimAssistanceEligibilityIndicator": "I",
67
+ "internalLabelXCoordinate": "0984265",
68
+ "internalLabelYCoordinate": "0201584",
69
+ "latitude": 40.72004956043429,
70
+ "latitudeInternalLabel": 40.719978196825956,
71
+ "legacySegmentId": "0032326",
72
+ "lionBoroughCode": "1",
73
+ "lionBoroughCodeForVanityAddress": "1",
74
+ "lionFaceCode": "1045",
75
+ "lionFaceCodeForVanityAddress": "1045",
76
+ "lionKey": "1104500010",
77
+ "lionKeyForVanityAddress": "1104500010",
78
+ "lionSequenceNumber": "00010",
79
+ "lionSequenceNumberForVanityAddress": "00010",
80
+ "listOf4Lgcs": "01",
81
+ "longitude": -74.00018037684704,
82
+ "longitudeInternalLabel": -73.99994588700383,
83
+ "lowBblOfThisBuildingsCondominiumUnits": "1002330004",
84
+ "lowCrossStreetB5SC1": "123130",
85
+ "lowCrossStreetCode1": "12313001",
86
+ "lowCrossStreetName1": "HOWARD STREET",
87
+ "lowHouseNumberOfBlockfaceSortFormat": "000001000AA",
88
+ "lowHouseNumberOfDefiningAddressRange": "000013000AA",
89
+ "nta": "MN24",
90
+ "ntaName": "SoHo-TriBeCa-Civic Center-Little Italy",
91
+ "numberOfCrossStreetB5SCsHighAddressEnd": "1",
92
+ "numberOfCrossStreetB5SCsLowAddressEnd": "1",
93
+ "numberOfCrossStreetsHighAddressEnd": "1",
94
+ "numberOfCrossStreetsLowAddressEnd": "1",
95
+ "numberOfEntriesInListOfGeographicIdentifiers": "0001",
96
+ "numberOfExistingStructuresOnLot": "0001",
97
+ "numberOfStreetFrontagesOfLot": "01",
98
+ "physicalId": "0001905",
99
+ "policePatrolBoroughCommand": "1",
100
+ "policePrecinct": "005",
101
+ "returnCode1a": "00",
102
+ "returnCode1e": "00",
103
+ "roadwayType": "1",
104
+ "rpadBuildingClassificationCode": "O9",
105
+ "rpadSelfCheckCodeForBbl": "9",
106
+ "sanbornBoroughCode": "1",
107
+ "sanbornPageNumber": "047",
108
+ "sanbornVolumeNumber": "01",
109
+ "sanbornVolumeNumberSuffix": "N",
110
+ "sanitationCollectionSchedulingSectionAndSubsection": "1A",
111
+ "sanitationDistrict": "102",
112
+ "sanitationRecyclingCollectionSchedule": "EW",
113
+ "sanitationRegularCollectionSchedule": "MWF",
114
+ "sanitationSnowPriorityCode": "P",
115
+ "segmentAzimuth": "056",
116
+ "segmentIdentifier": "0032326",
117
+ "segmentLengthInFeet": "00383",
118
+ "segmentOrientation": "N",
119
+ "segmentTypeCode": "U",
120
+ "sideOfStreetIndicator": "R",
121
+ "sideOfStreetOfVanityAddress": "R",
122
+ "splitLowHouseNumber": "000001000AA",
123
+ "stateSenatorialDistrict": "26",
124
+ "streetName1In": "CROSBY",
125
+ "streetStatus": "2",
126
+ "taxMapNumberSectionAndVolume": "10105",
127
+ "toLionNodeId": "0020491",
128
+ "toPreferredLgcsFirstSetOf5": "01",
129
+ "trafficDirection": "W",
130
+ "underlyingStreetCode": "11615001",
131
+ "workAreaFormatIndicatorIn": "C",
132
+ "xCoordinate": "0984200",
133
+ "xCoordinateHighAddressEnd": "0984287",
134
+ "xCoordinateLowAddressEnd": "0984078",
135
+ "xCoordinateOfCenterofCurvature": "0000000",
136
+ "yCoordinate": "0201610",
137
+ "yCoordinateHighAddressEnd": "0201750",
138
+ "yCoordinateLowAddressEnd": "0201429",
139
+ "yCoordinateOfCenterofCurvature": "0000000",
140
+ "zipCode": "10013"
141
+ }
142
+ }
@@ -0,0 +1,142 @@
1
+ <geosupportResponse>
2
+ <address>
3
+ <assemblyDistrict>65</assemblyDistrict>
4
+ <bbl>1002330004</bbl>
5
+ <bblBoroughCode>1</bblBoroughCode>
6
+ <bblTaxBlock>00233</bblTaxBlock>
7
+ <bblTaxLot>0004</bblTaxLot>
8
+ <boardOfElectionsPreferredLgc>1</boardOfElectionsPreferredLgc>
9
+ <boePreferredStreetName>CROSBY STREET</boePreferredStreetName>
10
+ <boePreferredstreetCode>11615001</boePreferredstreetCode>
11
+ <boroughCode1In>1</boroughCode1In>
12
+ <buildingIdentificationNumber>1003041</buildingIdentificationNumber>
13
+ <censusBlock2000>2001</censusBlock2000>
14
+ <censusBlock2010>1009</censusBlock2010>
15
+ <censusTract1990> 45 </censusTract1990>
16
+ <censusTract2000> 45 </censusTract2000>
17
+ <censusTract2010> 45 </censusTract2010>
18
+ <cityCouncilDistrict>01</cityCouncilDistrict>
19
+ <civilCourtDistrict>01</civilCourtDistrict>
20
+ <coincidentSegmentCount>1</coincidentSegmentCount>
21
+ <communityDistrict>102</communityDistrict>
22
+ <communityDistrictBoroughCode>1</communityDistrictBoroughCode>
23
+ <communityDistrictNumber>02</communityDistrictNumber>
24
+ <communitySchoolDistrict>02</communitySchoolDistrict>
25
+ <condominiumBillingBbl>0000000000</condominiumBillingBbl>
26
+ <congressionalDistrict>10</congressionalDistrict>
27
+ <cooperativeIdNumber>0000</cooperativeIdNumber>
28
+ <crossStreetNamesFlagIn>E</crossStreetNamesFlagIn>
29
+ <dcpCommercialStudyArea>11010</dcpCommercialStudyArea>
30
+ <dcpPreferredLgc>01</dcpPreferredLgc>
31
+ <dotStreetLightContractorArea>1</dotStreetLightContractorArea>
32
+ <dynamicBlock>202</dynamicBlock>
33
+ <electionDistrict>067</electionDistrict>
34
+ <fireBattalion>02</fireBattalion>
35
+ <fireCompanyNumber>055</fireCompanyNumber>
36
+ <fireCompanyType>E</fireCompanyType>
37
+ <fireDivision>01</fireDivision>
38
+ <firstBoroughName>MANHATTAN</firstBoroughName>
39
+ <firstStreetCode>11615001010</firstStreetCode>
40
+ <firstStreetNameNormalized>CROSBY STREET</firstStreetNameNormalized>
41
+ <fromLionNodeId>0020487</fromLionNodeId>
42
+ <fromPreferredLgcsFirstSetOf5>01</fromPreferredLgcsFirstSetOf5>
43
+ <genericId>0001675</genericId>
44
+ <geosupportFunctionCode>1B</geosupportFunctionCode>
45
+ <geosupportReturnCode>00</geosupportReturnCode>
46
+ <geosupportReturnCode2>00</geosupportReturnCode2>
47
+ <gi5DigitStreetCode1>16150</gi5DigitStreetCode1>
48
+ <giBoroughCode1>1</giBoroughCode1>
49
+ <giBuildingIdentificationNumber1>1003041</giBuildingIdentificationNumber1>
50
+ <giDcpPreferredLgc1>01</giDcpPreferredLgc1>
51
+ <giHighHouseNumber1>17</giHighHouseNumber1>
52
+ <giLowHouseNumber1>13</giLowHouseNumber1>
53
+ <giSideOfStreetIndicator1>R</giSideOfStreetIndicator1>
54
+ <giStreetCode1>11615001</giStreetCode1>
55
+ <giStreetName1>CROSBY STREET</giStreetName1>
56
+ <healthArea>6800</healthArea>
57
+ <healthCenterDistrict>15</healthCenterDistrict>
58
+ <highBblOfThisBuildingsCondominiumUnits>1002330004</highBblOfThisBuildingsCondominiumUnits>
59
+ <highCrossStreetB5SC1>121690</highCrossStreetB5SC1>
60
+ <highCrossStreetCode1>12169001</highCrossStreetCode1>
61
+ <highCrossStreetName1>GRAND STREET</highCrossStreetName1>
62
+ <highHouseNumberOfBlockfaceSortFormat>000021000AA</highHouseNumberOfBlockfaceSortFormat>
63
+ <houseNumber>13</houseNumber>
64
+ <houseNumberIn>13</houseNumberIn>
65
+ <houseNumberSortFormat>000013000AA</houseNumberSortFormat>
66
+ <interimAssistanceEligibilityIndicator>I</interimAssistanceEligibilityIndicator>
67
+ <internalLabelXCoordinate>0984265</internalLabelXCoordinate>
68
+ <internalLabelYCoordinate>0201584</internalLabelYCoordinate>
69
+ <latitude>40.72004956043429</latitude>
70
+ <latitudeInternalLabel>40.719978196825956</latitudeInternalLabel>
71
+ <legacySegmentId>0032326</legacySegmentId>
72
+ <lionBoroughCode>1</lionBoroughCode>
73
+ <lionBoroughCodeForVanityAddress>1</lionBoroughCodeForVanityAddress>
74
+ <lionFaceCode>1045</lionFaceCode>
75
+ <lionFaceCodeForVanityAddress>1045</lionFaceCodeForVanityAddress>
76
+ <lionKey>1104500010</lionKey>
77
+ <lionKeyForVanityAddress>1104500010</lionKeyForVanityAddress>
78
+ <lionSequenceNumber>00010</lionSequenceNumber>
79
+ <lionSequenceNumberForVanityAddress>00010</lionSequenceNumberForVanityAddress>
80
+ <listOf4Lgcs>01</listOf4Lgcs>
81
+ <longitude>-74.00018037684704</longitude>
82
+ <longitudeInternalLabel>-73.99994588700383</longitudeInternalLabel>
83
+ <lowBblOfThisBuildingsCondominiumUnits>1002330004</lowBblOfThisBuildingsCondominiumUnits>
84
+ <lowCrossStreetB5SC1>123130</lowCrossStreetB5SC1>
85
+ <lowCrossStreetCode1>12313001</lowCrossStreetCode1>
86
+ <lowCrossStreetName1>HOWARD STREET</lowCrossStreetName1>
87
+ <lowHouseNumberOfBlockfaceSortFormat>000001000AA</lowHouseNumberOfBlockfaceSortFormat>
88
+ <lowHouseNumberOfDefiningAddressRange>000013000AA</lowHouseNumberOfDefiningAddressRange>
89
+ <nta>MN24</nta>
90
+ <ntaName>SoHo-TriBeCa-Civic Center-Little Italy</ntaName>
91
+ <numberOfCrossStreetB5SCsHighAddressEnd>1</numberOfCrossStreetB5SCsHighAddressEnd>
92
+ <numberOfCrossStreetB5SCsLowAddressEnd>1</numberOfCrossStreetB5SCsLowAddressEnd>
93
+ <numberOfCrossStreetsHighAddressEnd>1</numberOfCrossStreetsHighAddressEnd>
94
+ <numberOfCrossStreetsLowAddressEnd>1</numberOfCrossStreetsLowAddressEnd>
95
+ <numberOfEntriesInListOfGeographicIdentifiers>0001</numberOfEntriesInListOfGeographicIdentifiers>
96
+ <numberOfExistingStructuresOnLot>0001</numberOfExistingStructuresOnLot>
97
+ <numberOfStreetFrontagesOfLot>01</numberOfStreetFrontagesOfLot>
98
+ <physicalId>0001905</physicalId>
99
+ <policePatrolBoroughCommand>1</policePatrolBoroughCommand>
100
+ <policePrecinct>005</policePrecinct>
101
+ <returnCode1a>00</returnCode1a>
102
+ <returnCode1e>00</returnCode1e>
103
+ <roadwayType>1</roadwayType>
104
+ <rpadBuildingClassificationCode>O9</rpadBuildingClassificationCode>
105
+ <rpadSelfCheckCodeForBbl>9</rpadSelfCheckCodeForBbl>
106
+ <sanbornBoroughCode>1</sanbornBoroughCode>
107
+ <sanbornPageNumber>047</sanbornPageNumber>
108
+ <sanbornVolumeNumber>01</sanbornVolumeNumber>
109
+ <sanbornVolumeNumberSuffix>N</sanbornVolumeNumberSuffix>
110
+ <sanitationCollectionSchedulingSectionAndSubsection>1A</sanitationCollectionSchedulingSectionAndSubsection>
111
+ <sanitationDistrict>102</sanitationDistrict>
112
+ <sanitationRecyclingCollectionSchedule>EW</sanitationRecyclingCollectionSchedule>
113
+ <sanitationRegularCollectionSchedule>MWF</sanitationRegularCollectionSchedule>
114
+ <sanitationSnowPriorityCode>P</sanitationSnowPriorityCode>
115
+ <segmentAzimuth>056</segmentAzimuth>
116
+ <segmentIdentifier>0032326</segmentIdentifier>
117
+ <segmentLengthInFeet>00383</segmentLengthInFeet>
118
+ <segmentOrientation>N</segmentOrientation>
119
+ <segmentTypeCode>U</segmentTypeCode>
120
+ <sideOfStreetIndicator>R</sideOfStreetIndicator>
121
+ <sideOfStreetOfVanityAddress>R</sideOfStreetOfVanityAddress>
122
+ <splitLowHouseNumber>000001000AA</splitLowHouseNumber>
123
+ <stateSenatorialDistrict>26</stateSenatorialDistrict>
124
+ <streetName1In>CROSBY</streetName1In>
125
+ <streetStatus>2</streetStatus>
126
+ <taxMapNumberSectionAndVolume>10105</taxMapNumberSectionAndVolume>
127
+ <toLionNodeId>0020491</toLionNodeId>
128
+ <toPreferredLgcsFirstSetOf5>01</toPreferredLgcsFirstSetOf5>
129
+ <trafficDirection>W</trafficDirection>
130
+ <underlyingStreetCode>11615001</underlyingStreetCode>
131
+ <workAreaFormatIndicatorIn>C</workAreaFormatIndicatorIn>
132
+ <xCoordinate>0984200</xCoordinate>
133
+ <xCoordinateHighAddressEnd>0984287</xCoordinateHighAddressEnd>
134
+ <xCoordinateLowAddressEnd>0984078</xCoordinateLowAddressEnd>
135
+ <xCoordinateOfCenterofCurvature>0000000</xCoordinateOfCenterofCurvature>
136
+ <yCoordinate>0201610</yCoordinate>
137
+ <yCoordinateHighAddressEnd>0201750</yCoordinateHighAddressEnd>
138
+ <yCoordinateLowAddressEnd>0201429</yCoordinateLowAddressEnd>
139
+ <yCoordinateOfCenterofCurvature>0000000</yCoordinateOfCenterofCurvature>
140
+ <zipCode>10013</zipCode>
141
+ </address>
142
+ </geosupportResponse>