├── README.md ├── README.ru.md ├── batch.txt ├── request.txt ├── requirements.txt ├── showmeplace.py └── test.json /README.md: -------------------------------------------------------------------------------- 1 | # ShowMePlace 2 | 3 | This tool shows satellite images for certain coordinates (latitude and longitude) by Overpass API request / raw response 4 | 5 | # Instructions 6 | 0. Install Python 3. 7 | 1. Install dependencies `pip install -r requirements.txt` 8 | 2. Create a mapbox account here: www.mapbox.com. 9 | 3. Once logged in, scroll down to Default Public Token. Copy it! You will need it in the `shomewplace.py` file 10 | 4. Run the showmeplace.py file 11 | 12 | You can use other satellite image providers (example in the file `shomewplace.py`). But in some places there may not be detailed images. 13 | 14 | # Theory 15 | 16 | - [OSINT/GEOINT - Investigating and geolocating #2 - Overpass Turbo](https://haax.fr/en/writeups/osint-geoint/osint-flight-volume2-overpassturbo/) 17 | - [Overpass Turbo and Night GEOINT](https://www.youtube.com/watch?v=h-_Z7xHGEh4) 18 | 19 | # Usage 20 | 21 | The main value of the tool is the ability to do batch checks for big regions, but you can do simple request also. 22 | 23 | ## Simple execution without params 24 | 25 | You must copy the prepared request in **Overpass => Export => Request** panel (without `{{variables}}`). 26 | 27 | ```sh 28 | $ ./showmeplace.py --overpass-request 29 | Paste Overpass API request text, then enter END to run 30 | [out:json][timeout:800]; 31 | nwr["addr:housenumber"="1832"](44.80230124552821,-93.52729797363281,45.22025894300122,-92.7252960205078); 32 | out center; 33 | END 34 | 35 | Making request to Overpass API... 36 | ... 37 | ``` 38 | 39 | > [!WARNING] 40 | > add the `center` argument to the `out` statement. This will speed up data processing and place the object in the center of the image. 41 | 42 | ## Simple execution without params from file 43 | 44 | Also you can use a file: 45 | 46 | ```sh 47 | $ ./showmeplace.py --overpass-request-file request.txt 48 | 49 | Making request to Overpass API.... 50 | Found: 0 nodes, 20 ways, 0 relations 51 | Processing nodes... 52 | 0it [00:00, ?it/s] 53 | Processing ways... 54 | Saving 44.9733591, -92.7328901 to 242000245.jpg, check place in https://www.google.com/maps/@44.9733591,-92.7328901,17.5z 55 | ... 56 | ``` 57 | 58 | ## Execution of raw json request 59 | 60 | You can use raw Overpass API from Overpass => Export => Data => raw 61 | 62 | ```sh 63 | $ ./showmeplace.py --overpass-results-file test.json 64 | Loading coords from Overpass results file... 65 | Satellite image 88081666.jpg already exists! 66 | Saving 44.9733591, -92.7328901 to 242000245.jpg, check place in https://www.google.com/maps/@44.9733591,-92.7328901,17.5z 67 | ... 68 | ``` 69 | 70 | ## Batch processing mode (Use it for big territory scanning!) 71 | 72 | The idea of a batch processing mode: split big territory for search into small parts (step*step, see source code) and run overpass search for each part. 73 | 74 | 1. Put request to some txt file. 75 | 76 | ```sh 77 | $ cat batch.txt 78 | [out:json][timeout:800]; 79 | ( 80 | nwr["power"="tower"]["design"="barrel"]["material"="steel"]["structure"="tubular"]({{bbox}}); 81 | )->.tower; 82 | 83 | ( 84 | nwr(around.tower:100)["highway"="stop"]; 85 | )->.sign; 86 | 87 | out center geom; 88 | ``` 89 | 90 | 2. Generate N files for the bounding box from the request file batch.txt. You can copy bounding box coordinates from the Overpass interface by doing **Overpass => Export => Request**. 91 | 92 | ```sh 93 | $ ./showmeplace.py --generate-overpass-files 24.806681353851964,-126.5185546875,53.4357192066942,-65.3466796875 --overpass-request-file batch.txt 94 | ``` 95 | 96 | Check that you have a lot of files with filenames of format `batch.txt_0` 97 | 98 | 3. Run batch processing (advanced: fix shell script on your own if the script is failing and you have to change mileage = step). 99 | 100 | ``` 101 | $ ./batch.sh 102 | ``` 103 | 104 | # Results 105 | 106 | You'll get JPG files in the directory of the script with satellite images of target coordinates in the closest approximation 👍 107 | -------------------------------------------------------------------------------- /README.ru.md: -------------------------------------------------------------------------------- 1 | # ShowMePlace 2 | 3 | Этот инструмент позволяет получать спутниковые снимки для определённых координат-результатов запроса к Overpass API (напрямую или через файл с ответом). 4 | 5 | # Как пользоваться 6 | 0. Установите себе Python 3. 7 | 1. Установите зависимости `pip install -r requirements.txt` 8 | 2. Зарегистрируйте аккаунт в провайдере спутниковых снимков: www.mapbox.com. 9 | 3. Скопируйте свой личный Default Public Token. Его нужно указать в файле `shomewplace.py` для того, чтобы получать снимки. 10 | 4. Запустите файл `showmeplace.py` 11 | 12 | Вы можете использовать других поставщиков спутниковых снимков (пример в файле `shomewplace.py`). Но в некоторых местах может не быть детальных снимков. 13 | 14 | # Примеры использования 15 | 16 | Запуск со вводом запроса Overpass прямо в командной строке: 17 | ```sh 18 | $ ./showmeplace.py --overpass-request 19 | Paste Overpass API request text, then enter END to run 20 | [out:json][timeout:800]; 21 | ( 22 | nwr["addr:housenumber"="1832"](44.80230124552821,-93.52729797363281,45.22025894300122,-92.7252960205078); 23 | )->.house; 24 | 25 | (.house;); 26 | 27 | out center geom; 28 | END 29 | 30 | Making request to Overpass API... 31 | ... 32 | ``` 33 | 34 | > [!WARNING] 35 | > добавляйте в оператор `out` аргумент `center`. Это ускорит обработку данных и разместит объект по центру снимка 36 | 37 | Можно использовать подготовленный файл с запросом из Overpasss Turbo (он не должен содержать переменных в двойных фигурных скобах, {{таких}}). 38 | Пункт меню Overpass => Export => Request panel. 39 | 40 | ```sh 41 | $ ./showmeplace.py --overpass-request-file request.txt 42 | 43 | Making request to Overpass API.... 44 | Found: 0 nodes, 20 ways, 0 relations 45 | Processing nodes... 46 | 0it [00:00, ?it/s] 47 | Processing ways... 48 | Saving 44.9733591, -92.7328901 to 242000245.jpg, check place in https://www.google.com/maps/@44.9733591,-92.7328901,17.5z 49 | ... 50 | ``` 51 | 52 | Также можно сохранить ответ на запрос из Overpass Turbo через Overpass => Export => Data => raw и использовать в скрипте: 53 | 54 | ```sh 55 | $ ./showmeplace.py --overpass-results-file test.json 56 | Loading coords from Overpass results file... 57 | Satellite image 88081666.jpg already exists! 58 | Saving 44.9733591, -92.7328901 to 242000245.jpg, check place in https://www.google.com/maps/@44.9733591,-92.7328901,17.5z 59 | ... 60 | ``` 61 | 62 | А для обработки больших территорий можно разбить их на части и сгенерировать запросы по каждую из них. 63 | 64 | ```sh 65 | # создать N файлов по указанной координатами территории для файла с запросом batch.txt 66 | $ ./showmeplace.py --generate-overpass-files 24.806681353851964,-126.5185546875,53.4357192066942,-65.3466796875 --overpass-request-file batch.txt 67 | 68 | # файл с шаблоном запроса 69 | $ cat batch.txt 70 | [out:json][timeout:800]; 71 | ( 72 | nwr["power"="tower"]["design"="barrel"]["material"="steel"]["structure"="tubular"]({{bbox}}); 73 | )->.tower; 74 | 75 | ( 76 | nwr(around.tower:100)["highway"="stop"]; 77 | )->.sign; 78 | 79 | out center geom; 80 | 81 | # запускаем пакетную обработку запросов (важно не забыть поправить переменную step в скрипте) 82 | $ ./batch.sh 83 | ``` 84 | 85 | # Результаты 86 | 87 | You get JPG files in the directory of script. 88 | -------------------------------------------------------------------------------- /batch.txt: -------------------------------------------------------------------------------- 1 | [out:json][timeout:800]; 2 | ( 3 | nwr["power"="tower"]["design"="barrel"]["material"="steel"]["structure"="tubular"]({{bbox}}); 4 | )->.tower; 5 | 6 | ( 7 | nwr(around.tower:100)["highway"="stop"]; 8 | )->.sign; 9 | 10 | out geom; -------------------------------------------------------------------------------- /request.txt: -------------------------------------------------------------------------------- 1 | [out:json][timeout:800]; 2 | nwr["addr:housenumber"="1832"](44.80230124552821,-93.52729797363281,45.22025894300122,-92.7252960205078); 3 | out center geom; -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2024.2.2 2 | charset-normalizer==3.3.2 3 | idna==3.7 4 | overpy==0.7 5 | pillow==10.3.0 6 | requests==2.31.0 7 | staticmap==0.5.7 8 | tqdm==4.66.2 9 | urllib3==2.2.1 10 | -------------------------------------------------------------------------------- /showmeplace.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | # credits: 4 | #Watipaso Mulwafu 5 | #https://github.com/thewati 6 | #https://medium.com/@watipasomulwafu 7 | 8 | import json 9 | from PIL import Image 10 | import tqdm 11 | import os 12 | import overpy 13 | import argparse 14 | from concurrent import futures 15 | import sys 16 | from staticmap import StaticMap, CircleMarker 17 | 18 | 19 | MAPBOX_TOKEN = '' 20 | 21 | 22 | class TileSet: 23 | def __init__(self, tiles_url, attr): 24 | self.tiles_url = tiles_url 25 | self.attr = attr 26 | 27 | 28 | tilesets = [ 29 | # you can add custom tiles. For example, uncomment this: 30 | # TileSet( 31 | # 'https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', 32 | # 'ESRI' 33 | # ), 34 | # TileSet( 35 | # 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', 36 | # 'OSM', 37 | # ), 38 | ] 39 | 40 | if MAPBOX_TOKEN != "": 41 | tilesets.append(TileSet( 42 | 'https://api.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.png?access_token=' + MAPBOX_TOKEN, 43 | 'Mapbox', 44 | )) 45 | 46 | PARALLEL_THREADS_NUM = len(tilesets) 47 | OVERPASS_SERVER = 'https://overpass-api.de/api/interpreter' 48 | 49 | 50 | def _get_sat_img(lat, lon, name: str, obj_type: str, pbar=None, folder="", tileset: TileSet = None): 51 | filename = os.path.join(folder, obj_type + name + "_" + tileset.attr + '.jpg') 52 | 53 | if pbar: 54 | pbar.update(1) 55 | 56 | if os.path.exists(filename): 57 | print(f'Satellite image {filename} already exists!') 58 | return False 59 | 60 | # workaround for old png images 61 | png_filename = str(name) + '.png' 62 | if os.path.exists(png_filename): 63 | img = Image.open(png_filename) 64 | rgb_im = img.convert('RGB') 65 | print(f'Converting {filename} to {png_filename}...') 66 | rgb_im.save(filename) 67 | os.remove(png_filename) 68 | return False 69 | 70 | url = f'https://www.instantstreetview.com/@{lat},{lon},-132.4h,5p,1z' 71 | # url = f'https://www.google.com/maps/@{lat},{lon},17.5z' 72 | print(f'Saving {lat}, {lon} to {filename}, check place in {url}') 73 | print() 74 | 75 | m = StaticMap(1366, 768, 10, url_template=tileset.tiles_url, delay_between_retries=2) 76 | m.add_marker(CircleMarker((float(lon), float(lat)), 'red', 5)) 77 | image = m.render() 78 | image.save(filename) 79 | 80 | return True 81 | 82 | 83 | def get_sat_img(lat, lon, name, obj_type: str, tileset: TileSet, pbar=None, folder=""): 84 | try: 85 | _get_sat_img(lat, lon, str(name), obj_type, pbar, folder, tileset) 86 | return True 87 | except Exception as e: 88 | print(f'Error: {str(e)}') 89 | 90 | 91 | if __name__ == '__main__': 92 | parser = argparse.ArgumentParser( 93 | prog='showmeplace.py', 94 | description='ShowMePlace', 95 | ) 96 | 97 | group = parser.add_mutually_exclusive_group(required=True) 98 | group.add_argument('--overpass-request', action='store_true', default=False) 99 | group.add_argument('--overpass-request-file', type=str) 100 | group.add_argument('--overpass-results-file', type=str) 101 | 102 | parser.add_argument('--generate-overpass-files', type=str, help='Coords in format lat1,lon1,lat2,lon2') 103 | parser.add_argument('--output-folder', type=str, help='Folder for saving images', default='output') 104 | 105 | args = parser.parse_args() 106 | 107 | if args.generate_overpass_files: 108 | with open(args.overpass_request_file) as f: 109 | text = f.read() 110 | print('Loaded requests...') 111 | if not '{{bbox}}' in text: 112 | print('Text of request should include {{bbox}} pseudovariable!') 113 | sys.exit(1) 114 | 115 | # 24.806681353851964,-126.5185546875,53.4357192066942,-65.3466796875 116 | coords = list(map(float, args.generate_overpass_files.split(','))) 117 | print(coords) 118 | api = overpy.Overpass(url=OVERPASS_SERVER) 119 | 120 | step = 20 121 | delta_x = (coords[2] - coords[0]) / step 122 | delta_y = (coords[3] - coords[1]) / step 123 | 124 | all_coords = [] 125 | for i in range(step): 126 | for j in range(step): 127 | new_coords = [ 128 | coords[0]+i*delta_x, 129 | coords[1]+j*delta_y, 130 | coords[0]+(i+1)*delta_x, 131 | coords[1]+(j+1)*delta_y, 132 | ] 133 | all_coords.append(new_coords) 134 | 135 | print(f'Total areas: {len(all_coords)}') 136 | 137 | # try to run request for the first area 138 | new_text = text.replace('{{bbox}}', ','.join(map(str, all_coords[0]))) 139 | print(new_text) 140 | 141 | result = api.query(new_text) 142 | 143 | for i, c in enumerate(all_coords): 144 | new_text = text.replace('{{bbox}}', ','.join(map(str, all_coords[i]))) 145 | filename = args.overpass_request_file+f'_{str(i)}' 146 | with open(filename, 'w') as f: 147 | f.write(new_text) 148 | print(f'Write {filename}') 149 | 150 | sys.exit(0) 151 | 152 | if args.overpass_results_file: 153 | print('Loading coords from Overpass results file...') 154 | coords_file = json.load(open(args.overpass_results_file)) 155 | coords = coords_file['elements'] 156 | 157 | img_args = [] 158 | for c in tqdm.tqdm(coords): 159 | try: 160 | lat = c.get('lat', c['geometry'][0]['lat']) 161 | lon = c.get('lon', c['geometry'][0]['lon']) 162 | name = str(c['id']) 163 | img_args.append((lat, lon, name)) 164 | # get_sat_img(lat, lon, name) 165 | except Exception as e: 166 | print(f'Error while trying to get coords: {str(e)}') 167 | 168 | else: # if overpass 169 | api = overpy.Overpass(url=OVERPASS_SERVER, max_retry_count=5) 170 | text = '' 171 | 172 | if args.overpass_request: 173 | print('Paste Overpass API request text, then enter END to run') 174 | lines = [] 175 | while True: 176 | try: 177 | line = input() 178 | except EOFError as e: 179 | break 180 | if line != 'END': 181 | lines.append(line) 182 | else: 183 | break 184 | text = '\n'.join(lines) 185 | elif args.overpass_request_file: 186 | print(f'Processing file {args.overpass_request_file}...') 187 | with open(args.overpass_request_file) as f: 188 | text = f.read() 189 | 190 | if " center" not in text: 191 | print('WARN: The coordinates of ways and relations will be requested separately, which may take a long time.', file=sys.stderr) 192 | print('WARN: Add "center" to line with "out ... " in Overpass Query', file=sys.stderr) 193 | 194 | print('Making request to Overpass API, please, wait...') 195 | 196 | result = api.query(text) 197 | print(f'Found: {len(result.nodes)} nodes, {len(result.ways)} ways, {len(result.relations)} relations') 198 | 199 | img_args = [] 200 | for c in tqdm.tqdm(result.nodes): 201 | img_args.append((c.lat, c.lon, c.id, "node")) 202 | 203 | print('Processing ways...') 204 | for c in tqdm.tqdm(result.ways): 205 | if c.center_lat is None: 206 | nodes = c.get_nodes(resolve_missing=True) 207 | img_args.append((float(nodes[0].lat), float(nodes[0].lon), c.id, "way")) 208 | else: 209 | img_args.append((float(c.center_lat), float(c.center_lon), c.id, "way")) 210 | 211 | print('Processing relations...') 212 | for c in tqdm.tqdm(result.relations): 213 | if c.center_lat is None: 214 | if isinstance(c.members[0], overpy.RelationWay): 215 | node = c.members[0].resolve(resolve_missing=True).get_nodes(resolve_missing=True)[0] 216 | else: 217 | node = c.members[0].resolve(resolve_missing=True) 218 | img_args.append((float(node.lat), float(node.lon), c.id, "rel")) 219 | else: 220 | img_args.append((float(c.center_lat), float(c.center_lon), c.id, "rel")) 221 | 222 | future_test_results = [] 223 | # run 224 | pbar = tqdm.tqdm(total=len(img_args)*len(tilesets)) 225 | with futures.ThreadPoolExecutor(max_workers=PARALLEL_THREADS_NUM) as executor: 226 | future_test_results = [executor.submit(get_sat_img, *a, t, pbar, args.output_folder) 227 | for a in img_args 228 | for t in tilesets] 229 | 230 | for _ in future_test_results: 231 | pass 232 | -------------------------------------------------------------------------------- /test.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 0.6, 3 | "generator": "Overpass API 0.7.59 e21c39fe", 4 | "osm3s": { 5 | "timestamp_osm_base": "2023-02-12T18:39:23Z", 6 | "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." 7 | }, 8 | "elements": [ 9 | 10 | { 11 | "type": "way", 12 | "id": 88081666, 13 | "bounds": { 14 | "minlat": 44.8995595, 15 | "minlon": -93.1779357, 16 | "maxlat": 44.8997033, 17 | "maxlon": -93.1778172 18 | }, 19 | "nodes": [ 20 | 1023608724, 21 | 1023608538, 22 | 1023605459, 23 | 1023608279, 24 | 1023607257, 25 | 1023606551, 26 | 1023605260, 27 | 1023607995, 28 | 1023608724 29 | ], 30 | "geometry": [ 31 | { "lat": 44.8995902, "lon": -93.1778831 }, 32 | { "lat": 44.8995900, "lon": -93.1779346 }, 33 | { "lat": 44.8997028, "lon": -93.1779357 }, 34 | { "lat": 44.8997033, "lon": -93.1778485 }, 35 | { "lat": 44.8996976, "lon": -93.1778485 }, 36 | { "lat": 44.8996977, "lon": -93.1778186 }, 37 | { "lat": 44.8995598, "lon": -93.1778172 }, 38 | { "lat": 44.8995595, "lon": -93.1778828 }, 39 | { "lat": 44.8995902, "lon": -93.1778831 } 40 | ], 41 | "tags": { 42 | "addr:city": "Saint Paul", 43 | "addr:country": "US", 44 | "addr:housenumber": "1832", 45 | "addr:postcode": "55116", 46 | "addr:state": "MN", 47 | "addr:street": "West Munster Avenue", 48 | "building": "house" 49 | } 50 | }, 51 | { 52 | "type": "way", 53 | "id": 242000245, 54 | "bounds": { 55 | "minlat": 44.9732387, 56 | "minlon": -92.7330857, 57 | "maxlat": 44.9733939, 58 | "maxlon": -92.7328901 59 | }, 60 | "nodes": [ 61 | 2495754248, 62 | 2495754228, 63 | 2495754232, 64 | 2495754226, 65 | 2495754229, 66 | 2495754254, 67 | 2495754248 68 | ], 69 | "geometry": [ 70 | { "lat": 44.9733591, "lon": -92.7328901 }, 71 | { "lat": 44.9732519, "lon": -92.7329785 }, 72 | { "lat": 44.9732667, "lon": -92.7330143 }, 73 | { "lat": 44.9732387, "lon": -92.7330373 }, 74 | { "lat": 44.9732587, "lon": -92.7330857 }, 75 | { "lat": 44.9733939, "lon": -92.7329742 }, 76 | { "lat": 44.9733591, "lon": -92.7328901 } 77 | ], 78 | "tags": { 79 | "addr:housenumber": "1832", 80 | "addr:street": "Hunter Hill Road", 81 | "building": "house" 82 | } 83 | }, 84 | { 85 | "type": "way", 86 | "id": 515970506, 87 | "bounds": { 88 | "minlat": 44.9634990, 89 | "minlon": -93.1778756, 90 | "maxlat": 44.9636047, 91 | "maxlon": -93.1777689 92 | }, 93 | "nodes": [ 94 | 5037838735, 95 | 5037838736, 96 | 5037838737, 97 | 5037838738, 98 | 5037838739, 99 | 5037838740, 100 | 5037838741, 101 | 5037838742, 102 | 5037838735 103 | ], 104 | "geometry": [ 105 | { "lat": 44.9635001, "lon": -93.1778756 }, 106 | { "lat": 44.9634990, "lon": -93.1777707 }, 107 | { "lat": 44.9635836, "lon": -93.1777689 }, 108 | { "lat": 44.9635837, "lon": -93.1777782 }, 109 | { "lat": 44.9636040, "lon": -93.1777777 }, 110 | { "lat": 44.9636047, "lon": -93.1778502 }, 111 | { "lat": 44.9635838, "lon": -93.1778506 }, 112 | { "lat": 44.9635841, "lon": -93.1778739 }, 113 | { "lat": 44.9635001, "lon": -93.1778756 } 114 | ], 115 | "tags": { 116 | "addr:city": "Saint Paul", 117 | "addr:housenumber": "1832", 118 | "addr:postcode": "55104", 119 | "addr:street": "Englewood Avenue", 120 | "building": "house" 121 | } 122 | }, 123 | { 124 | "type": "way", 125 | "id": 527753997, 126 | "bounds": { 127 | "minlat": 44.7939850, 128 | "minlon": -93.1955726, 129 | "maxlat": 44.7940656, 130 | "maxlon": -93.1953214 131 | }, 132 | "nodes": [ 133 | 5130176156, 134 | 5130176155, 135 | 5130176154, 136 | 5130176153, 137 | 5130176152, 138 | 5130176151, 139 | 5130176156 140 | ], 141 | "geometry": [ 142 | { "lat": 44.7940636, "lon": -93.1953214 }, 143 | { "lat": 44.7939850, "lon": -93.1953232 }, 144 | { "lat": 44.7939879, "lon": -93.1955726 }, 145 | { "lat": 44.7940556, "lon": -93.1955711 }, 146 | { "lat": 44.7940547, "lon": -93.1954919 }, 147 | { "lat": 44.7940656, "lon": -93.1954917 }, 148 | { "lat": 44.7940636, "lon": -93.1953214 } 149 | ], 150 | "tags": { 151 | "addr:city": "Eagan", 152 | "addr:country": "US", 153 | "addr:housenumber": "1832", 154 | "addr:postcode": "55122", 155 | "addr:state": "MN", 156 | "addr:street": "Walnut Lane", 157 | "building": "house", 158 | "building:levels": "2" 159 | } 160 | }, 161 | { 162 | "type": "way", 163 | "id": 528932534, 164 | "bounds": { 165 | "minlat": 44.8255548, 166 | "minlon": -93.1961373, 167 | "maxlat": 44.8257818, 168 | "maxlon": -93.1958798 169 | }, 170 | "nodes": [ 171 | 5138994153, 172 | 5138994152, 173 | 5138994151, 174 | 5138994150, 175 | 5138994149, 176 | 5138994148, 177 | 5138994147, 178 | 5138994146, 179 | 5138994145, 180 | 5138994144, 181 | 5138994143, 182 | 5138994142, 183 | 5138994141, 184 | 5138994140, 185 | 5138994139, 186 | 5138994138, 187 | 5138994153 188 | ], 189 | "geometry": [ 190 | { "lat": 44.8257431, "lon": -93.1959512 }, 191 | { "lat": 44.8256953, "lon": -93.1959790 }, 192 | { "lat": 44.8256757, "lon": -93.1959125 }, 193 | { "lat": 44.8256589, "lon": -93.1959223 }, 194 | { "lat": 44.8256468, "lon": -93.1958811 }, 195 | { "lat": 44.8256211, "lon": -93.1958961 }, 196 | { "lat": 44.8256163, "lon": -93.1958798 }, 197 | { "lat": 44.8255618, "lon": -93.1959115 }, 198 | { "lat": 44.8255888, "lon": -93.1960033 }, 199 | { "lat": 44.8255548, "lon": -93.1960231 }, 200 | { "lat": 44.8255762, "lon": -93.1960955 }, 201 | { "lat": 44.8256099, "lon": -93.1960759 }, 202 | { "lat": 44.8256136, "lon": -93.1960887 }, 203 | { "lat": 44.8256828, "lon": -93.1960485 }, 204 | { "lat": 44.8257090, "lon": -93.1961373 }, 205 | { "lat": 44.8257818, "lon": -93.1960949 }, 206 | { "lat": 44.8257431, "lon": -93.1959512 } 207 | ], 208 | "tags": { 209 | "addr:city": "Eagan", 210 | "addr:country": "US", 211 | "addr:housenumber": "1832", 212 | "addr:postcode": "55122", 213 | "addr:state": "MN", 214 | "addr:street": "Red Fox Road", 215 | "building": "house", 216 | "building:levels": "2" 217 | } 218 | }, 219 | { 220 | "type": "way", 221 | "id": 531845592, 222 | "bounds": { 223 | "minlat": 44.8896081, 224 | "minlon": -93.1447333, 225 | "maxlat": 44.8898114, 226 | "maxlon": -93.1445838 227 | }, 228 | "nodes": [ 229 | 5162087407, 230 | 5162087406, 231 | 5162087405, 232 | 5162087404, 233 | 5162087403, 234 | 5162087402, 235 | 5162087407 236 | ], 237 | "geometry": [ 238 | { "lat": 44.8898055, "lon": -93.1445838 }, 239 | { "lat": 44.8896081, "lon": -93.1446184 }, 240 | { "lat": 44.8896157, "lon": -93.1447333 }, 241 | { "lat": 44.8897026, "lon": -93.1447222 }, 242 | { "lat": 44.8897009, "lon": -93.1446983 }, 243 | { "lat": 44.8898114, "lon": -93.1446764 }, 244 | { "lat": 44.8898055, "lon": -93.1445838 } 245 | ], 246 | "tags": { 247 | "addr:city": "Mendota Heights", 248 | "addr:country": "US", 249 | "addr:housenumber": "1832", 250 | "addr:postcode": "55118", 251 | "addr:state": "MN", 252 | "addr:street": "Twin Circle Drive", 253 | "building": "house", 254 | "building:levels": "2" 255 | } 256 | }, 257 | { 258 | "type": "way", 259 | "id": 531845593, 260 | "bounds": { 261 | "minlat": 44.8896282, 262 | "minlon": -93.1421853, 263 | "maxlat": 44.8897809, 264 | "maxlon": -93.1419711 265 | }, 266 | "nodes": [ 267 | 5162087417, 268 | 5162087416, 269 | 5162087415, 270 | 5162087414, 271 | 5162087413, 272 | 5162087412, 273 | 5162087411, 274 | 5162087410, 275 | 5162087409, 276 | 5162087408, 277 | 5162087417 278 | ], 279 | "geometry": [ 280 | { "lat": 44.8896387, "lon": -93.1419716 }, 281 | { "lat": 44.8896389, "lon": -93.1421023 }, 282 | { "lat": 44.8896282, "lon": -93.1421024 }, 283 | { "lat": 44.8896283, "lon": -93.1421853 }, 284 | { "lat": 44.8897067, "lon": -93.1421851 }, 285 | { "lat": 44.8897066, "lon": -93.1421091 }, 286 | { "lat": 44.8897212, "lon": -93.1421090 }, 287 | { "lat": 44.8897211, "lon": -93.1420948 }, 288 | { "lat": 44.8897809, "lon": -93.1420946 }, 289 | { "lat": 44.8897807, "lon": -93.1419711 }, 290 | { "lat": 44.8896387, "lon": -93.1419716 } 291 | ], 292 | "tags": { 293 | "addr:city": "Mendota Heights", 294 | "addr:country": "US", 295 | "addr:housenumber": "1832", 296 | "addr:postcode": "55118", 297 | "addr:state": "MN", 298 | "addr:street": "Summit Lane", 299 | "building": "house", 300 | "building:levels": "2" 301 | } 302 | }, 303 | { 304 | "type": "way", 305 | "id": 531867129, 306 | "bounds": { 307 | "minlat": 44.7264060, 308 | "minlon": -92.8581633, 309 | "maxlat": 44.7265940, 310 | "maxlon": -92.8579756 311 | }, 312 | "nodes": [ 313 | 5162251486, 314 | 5162251485, 315 | 5162251484, 316 | 5162251483, 317 | 5162251486 318 | ], 319 | "geometry": [ 320 | { "lat": 44.7265664, "lon": -92.8579756 }, 321 | { "lat": 44.7264060, "lon": -92.8580608 }, 322 | { "lat": 44.7264336, "lon": -92.8581633 }, 323 | { "lat": 44.7265940, "lon": -92.8580781 }, 324 | { "lat": 44.7265664, "lon": -92.8579756 } 325 | ], 326 | "tags": { 327 | "addr:city": "Hastings", 328 | "addr:country": "US", 329 | "addr:housenumber": "1832", 330 | "addr:postcode": "55033", 331 | "addr:state": "MN", 332 | "addr:street": "Forest Street", 333 | "building": "house", 334 | "building:levels": "1" 335 | } 336 | }, 337 | { 338 | "type": "way", 339 | "id": 531867131, 340 | "bounds": { 341 | "minlat": 44.7264279, 342 | "minlon": -92.8593237, 343 | "maxlat": 44.7265871, 344 | "maxlon": -92.8591675 345 | }, 346 | "nodes": [ 347 | 5162251498, 348 | 5162251497, 349 | 5162251496, 350 | 5162251495, 351 | 5162251494, 352 | 5162251493, 353 | 5162251492, 354 | 5162251491, 355 | 5162251498 356 | ], 357 | "geometry": [ 358 | { "lat": 44.7264286, "lon": -92.8591675 }, 359 | { "lat": 44.7264279, "lon": -92.8592787 }, 360 | { "lat": 44.7264699, "lon": -92.8592791 }, 361 | { "lat": 44.7264695, "lon": -92.8593230 }, 362 | { "lat": 44.7265230, "lon": -92.8593237 }, 363 | { "lat": 44.7265234, "lon": -92.8592760 }, 364 | { "lat": 44.7265865, "lon": -92.8592766 }, 365 | { "lat": 44.7265871, "lon": -92.8591693 }, 366 | { "lat": 44.7264286, "lon": -92.8591675 } 367 | ], 368 | "tags": { 369 | "addr:city": "Hastings", 370 | "addr:country": "US", 371 | "addr:housenumber": "1832", 372 | "addr:postcode": "55033", 373 | "addr:state": "MN", 374 | "addr:street": "Walnut Street", 375 | "building": "house", 376 | "building:levels": "1" 377 | } 378 | }, 379 | { 380 | "type": "way", 381 | "id": 531870593, 382 | "bounds": { 383 | "minlat": 44.7345756, 384 | "minlon": -92.8942835, 385 | "maxlat": 44.7347428, 386 | "maxlon": -92.8940517 387 | }, 388 | "nodes": [ 389 | 5162283972, 390 | 5162283971, 391 | 5162283970, 392 | 5162283969, 393 | 5162283968, 394 | 5162283967, 395 | 5162283966, 396 | 5162283965, 397 | 5162283972 398 | ], 399 | "geometry": [ 400 | { "lat": 44.7345878, "lon": -92.8940517 }, 401 | { "lat": 44.7345878, "lon": -92.8941821 }, 402 | { "lat": 44.7345756, "lon": -92.8941820 }, 403 | { "lat": 44.7345765, "lon": -92.8942833 }, 404 | { "lat": 44.7347018, "lon": -92.8942835 }, 405 | { "lat": 44.7347018, "lon": -92.8941622 }, 406 | { "lat": 44.7347428, "lon": -92.8941623 }, 407 | { "lat": 44.7347428, "lon": -92.8940518 }, 408 | { "lat": 44.7345878, "lon": -92.8940517 } 409 | ], 410 | "tags": { 411 | "addr:city": "Hastings", 412 | "addr:country": "US", 413 | "addr:housenumber": "1832", 414 | "addr:postcode": "55033", 415 | "addr:state": "MN", 416 | "addr:street": "14th Street West", 417 | "building": "house", 418 | "building:levels": "2" 419 | } 420 | }, 421 | { 422 | "type": "way", 423 | "id": 544192533, 424 | "bounds": { 425 | "minlat": 44.9642697, 426 | "minlon": -93.3663373, 427 | "maxlat": 44.9643735, 428 | "maxlon": -93.3661597 429 | }, 430 | "nodes": [ 431 | 5260542617, 432 | 5260542618, 433 | 5260542619, 434 | 5260542620, 435 | 5260542721, 436 | 5260542722, 437 | 5260542617 438 | ], 439 | "geometry": [ 440 | { "lat": 44.9643735, "lon": -93.3663363 }, 441 | { "lat": 44.9642703, "lon": -93.3663373 }, 442 | { "lat": 44.9642697, "lon": -93.3662078 }, 443 | { "lat": 44.9643191, "lon": -93.3662073 }, 444 | { "lat": 44.9643189, "lon": -93.3661602 }, 445 | { "lat": 44.9643726, "lon": -93.3661597 }, 446 | { "lat": 44.9643735, "lon": -93.3663363 } 447 | ], 448 | "tags": { 449 | "addr:city": "Saint Louis Park", 450 | "addr:housenumber": "1832", 451 | "addr:postcode": "55426", 452 | "addr:state": "MN", 453 | "addr:street": "Hampshire Avenue South", 454 | "building": "detached" 455 | } 456 | }, 457 | { 458 | "type": "way", 459 | "id": 544217766, 460 | "bounds": { 461 | "minlat": 44.9643122, 462 | "minlon": -93.3647855, 463 | "maxlat": 44.9644530, 464 | "maxlon": -93.3645404 465 | }, 466 | "nodes": [ 467 | 5260759620, 468 | 5260764721, 469 | 9901364600, 470 | 9901364599, 471 | 5260764722, 472 | 5260764723, 473 | 9901364597, 474 | 9901364598, 475 | 5260764724, 476 | 5260764725, 477 | 5260759620 478 | ], 479 | "geometry": [ 480 | { "lat": 44.9643715, "lon": -93.3647855 }, 481 | { "lat": 44.9643122, "lon": -93.3646731 }, 482 | { "lat": 44.9643396, "lon": -93.3646443 }, 483 | { "lat": 44.9643197, "lon": -93.3646066 }, 484 | { "lat": 44.9643825, "lon": -93.3645404 }, 485 | { "lat": 44.9644530, "lon": -93.3646742 }, 486 | { "lat": 44.9644174, "lon": -93.3647117 }, 487 | { "lat": 44.9643909, "lon": -93.3646614 }, 488 | { "lat": 44.9643645, "lon": -93.3646892 }, 489 | { "lat": 44.9643997, "lon": -93.3647558 }, 490 | { "lat": 44.9643715, "lon": -93.3647855 } 491 | ], 492 | "tags": { 493 | "addr:city": "Saint Louis Park", 494 | "addr:housenumber": "1832", 495 | "addr:postcode": "55426", 496 | "addr:state": "MN", 497 | "addr:street": "Georgia Avenue South", 498 | "building": "detached" 499 | } 500 | }, 501 | { 502 | "type": "way", 503 | "id": 902437487, 504 | "bounds": { 505 | "minlat": 44.9984395, 506 | "minlon": -93.3004933, 507 | "maxlat": 44.9986460, 508 | "maxlon": -93.3000728 509 | }, 510 | "nodes": [ 511 | 8381957724, 512 | 8381957736, 513 | 8381957738, 514 | 8381957722, 515 | 8381957735, 516 | 8381957734, 517 | 8381957721, 518 | 8381957733, 519 | 8381957732, 520 | 8381957737, 521 | 8381957723, 522 | 8381957728, 523 | 8381957727, 524 | 8381957726, 525 | 8381957725, 526 | 8381957731, 527 | 8381957730, 528 | 8381957729, 529 | 8381957724 530 | ], 531 | "geometry": [ 532 | { "lat": 44.9984885, "lon": -93.3002817 }, 533 | { "lat": 44.9984885, "lon": -93.3004933 }, 534 | { "lat": 44.9986110, "lon": -93.3004904 }, 535 | { "lat": 44.9986122, "lon": -93.3003256 }, 536 | { "lat": 44.9986452, "lon": -93.3003261 }, 537 | { "lat": 44.9986460, "lon": -93.3002034 }, 538 | { "lat": 44.9986387, "lon": -93.3002033 }, 539 | { "lat": 44.9986390, "lon": -93.3001632 }, 540 | { "lat": 44.9986133, "lon": -93.3001628 }, 541 | { "lat": 44.9986136, "lon": -93.3001314 }, 542 | { "lat": 44.9985898, "lon": -93.3001311 }, 543 | { "lat": 44.9985902, "lon": -93.3000740 }, 544 | { "lat": 44.9985068, "lon": -93.3000728 }, 545 | { "lat": 44.9985066, "lon": -93.3001008 }, 546 | { "lat": 44.9984985, "lon": -93.3001007 }, 547 | { "lat": 44.9984985, "lon": -93.3000983 }, 548 | { "lat": 44.9984408, "lon": -93.3000974 }, 549 | { "lat": 44.9984395, "lon": -93.3002810 }, 550 | { "lat": 44.9984885, "lon": -93.3002817 } 551 | ], 552 | "tags": { 553 | "addr:city": "Minneapolis", 554 | "addr:country": "US", 555 | "addr:housenumber": "1832", 556 | "addr:postcode": "55411", 557 | "addr:state": "MN", 558 | "addr:street": "North James Avenue", 559 | "building": "church" 560 | } 561 | }, 562 | { 563 | "type": "way", 564 | "id": 938640632, 565 | "bounds": { 566 | "minlat": 44.9556792, 567 | "minlon": -93.2466796, 568 | "maxlat": 44.9558206, 569 | "maxlon": -93.2465926 570 | }, 571 | "nodes": [ 572 | 8695590027, 573 | 8695590026, 574 | 8695590025, 575 | 8695590024, 576 | 8695590023, 577 | 8695590022, 578 | 8695590021, 579 | 8695590020, 580 | 8695590019, 581 | 8695590027 582 | ], 583 | "geometry": [ 584 | { "lat": 44.9556792, "lon": -93.2465939 }, 585 | { "lat": 44.9556796, "lon": -93.2466724 }, 586 | { "lat": 44.9556974, "lon": -93.2466722 }, 587 | { "lat": 44.9556974, "lon": -93.2466796 }, 588 | { "lat": 44.9558206, "lon": -93.2466786 }, 589 | { "lat": 44.9558203, "lon": -93.2466072 }, 590 | { "lat": 44.9557807, "lon": -93.2466074 }, 591 | { "lat": 44.9557806, "lon": -93.2465926 }, 592 | { "lat": 44.9557002, "lon": -93.2465939 }, 593 | { "lat": 44.9556792, "lon": -93.2465939 } 594 | ], 595 | "tags": { 596 | "addr:city": "Minneapolis", 597 | "addr:housenumber": "1832", 598 | "addr:postcode": "55404", 599 | "addr:street": "East 26th Street", 600 | "building": "yes", 601 | "start_date": "1900" 602 | } 603 | }, 604 | { 605 | "type": "way", 606 | "id": 945655670, 607 | "bounds": { 608 | "minlat": 44.9655208, 609 | "minlon": -93.3092614, 610 | "maxlat": 44.9657067, 611 | "maxlon": -93.3090093 612 | }, 613 | "nodes": [ 614 | 8754537377, 615 | 8754537376, 616 | 8754537375, 617 | 8754537374, 618 | 8754537373, 619 | 8754537372, 620 | 8754537371, 621 | 8754537370, 622 | 8754537369, 623 | 8754537368, 624 | 8754537367, 625 | 8754537366, 626 | 8754537377 627 | ], 628 | "geometry": [ 629 | { "lat": 44.9656089, "lon": -93.3090093 }, 630 | { "lat": 44.9655208, "lon": -93.3091229 }, 631 | { "lat": 44.9655552, "lon": -93.3091756 }, 632 | { "lat": 44.9655705, "lon": -93.3091560 }, 633 | { "lat": 44.9655896, "lon": -93.3091851 }, 634 | { "lat": 44.9655806, "lon": -93.3091966 }, 635 | { "lat": 44.9656010, "lon": -93.3092282 }, 636 | { "lat": 44.9656128, "lon": -93.3092130 }, 637 | { "lat": 44.9656443, "lon": -93.3092614 }, 638 | { "lat": 44.9657067, "lon": -93.3091809 }, 639 | { "lat": 44.9656683, "lon": -93.3091220 }, 640 | { "lat": 44.9656759, "lon": -93.3091124 }, 641 | { "lat": 44.9656089, "lon": -93.3090093 } 642 | ], 643 | "tags": { 644 | "addr:city": "Minneapolis", 645 | "addr:housenumber": "1832", 646 | "addr:postcode": "55405", 647 | "addr:state": "MN", 648 | "addr:street": "Kenwood Parkway", 649 | "building": "house", 650 | "start_date": "1891" 651 | } 652 | }, 653 | { 654 | "type": "way", 655 | "id": 1080191705, 656 | "bounds": { 657 | "minlat": 44.9646604, 658 | "minlon": -93.3601796, 659 | "maxlat": 44.9647386, 660 | "maxlon": -93.3600583 661 | }, 662 | "nodes": [ 663 | 9901202571, 664 | 9901202572, 665 | 9901202573, 666 | 9901202574, 667 | 9901202571 668 | ], 669 | "geometry": [ 670 | { "lat": 44.9646604, "lon": -93.3601778 }, 671 | { "lat": 44.9647373, "lon": -93.3601796 }, 672 | { "lat": 44.9647386, "lon": -93.3600600 }, 673 | { "lat": 44.9646617, "lon": -93.3600583 }, 674 | { "lat": 44.9646604, "lon": -93.3601778 } 675 | ], 676 | "tags": { 677 | "addr:city": "Saint Louis Park", 678 | "addr:housenumber": "1832", 679 | "addr:postcode": "55416", 680 | "addr:state": "MN", 681 | "addr:street": "Colorado Avenue South", 682 | "building": "detached" 683 | } 684 | }, 685 | { 686 | "type": "way", 687 | "id": 1080462053, 688 | "bounds": { 689 | "minlat": 44.9642897, 690 | "minlon": -93.3689041, 691 | "maxlat": 44.9643713, 692 | "maxlon": -93.3687321 693 | }, 694 | "nodes": [ 695 | 9903487580, 696 | 9903487581, 697 | 9903487582, 698 | 9903487583, 699 | 9903487580 700 | ], 701 | "geometry": [ 702 | { "lat": 44.9642911, "lon": -93.3689041 }, 703 | { "lat": 44.9643713, "lon": -93.3689027 }, 704 | { "lat": 44.9643698, "lon": -93.3687321 }, 705 | { "lat": 44.9642897, "lon": -93.3687335 }, 706 | { "lat": 44.9642911, "lon": -93.3689041 } 707 | ], 708 | "tags": { 709 | "addr:city": "Saint Louis Park", 710 | "addr:housenumber": "1832", 711 | "addr:postcode": "55426", 712 | "addr:state": "MN", 713 | "addr:street": "Jersey Avenue South", 714 | "building": "detached" 715 | } 716 | }, 717 | { 718 | "type": "way", 719 | "id": 1080462076, 720 | "bounds": { 721 | "minlat": 44.9643107, 722 | "minlon": -93.3701926, 723 | "maxlat": 44.9643812, 724 | "maxlon": -93.3700234 725 | }, 726 | "nodes": [ 727 | 9903487708, 728 | 9903487709, 729 | 9903487710, 730 | 9903487711, 731 | 9903487712, 732 | 9903487713, 733 | 9903487708 734 | ], 735 | "geometry": [ 736 | { "lat": 44.9643437, "lon": -93.3701531 }, 737 | { "lat": 44.9643443, "lon": -93.3701926 }, 738 | { "lat": 44.9643812, "lon": -93.3701914 }, 739 | { "lat": 44.9643785, "lon": -93.3700234 }, 740 | { "lat": 44.9643107, "lon": -93.3700256 }, 741 | { "lat": 44.9643127, "lon": -93.3701541 }, 742 | { "lat": 44.9643437, "lon": -93.3701531 } 743 | ], 744 | "tags": { 745 | "addr:city": "Saint Louis Park", 746 | "addr:housenumber": "1832", 747 | "addr:postcode": "55426", 748 | "addr:state": "MN", 749 | "addr:street": "Kentucky Avenue South", 750 | "building": "detached" 751 | } 752 | }, 753 | { 754 | "type": "way", 755 | "id": 1080705526, 756 | "bounds": { 757 | "minlat": 44.9645626, 758 | "minlon": -93.3727330, 759 | "maxlat": 44.9646791, 760 | "maxlon": -93.3726039 761 | }, 762 | "nodes": [ 763 | 9905513851, 764 | 9905513852, 765 | 9905513853, 766 | 9905513854, 767 | 9905513855, 768 | 9905513856, 769 | 9905513851 770 | ], 771 | "geometry": [ 772 | { "lat": 44.9645656, "lon": -93.3727330 }, 773 | { "lat": 44.9646106, "lon": -93.3727308 }, 774 | { "lat": 44.9646102, "lon": -93.3727140 }, 775 | { "lat": 44.9646791, "lon": -93.3727107 }, 776 | { "lat": 44.9646766, "lon": -93.3726039 }, 777 | { "lat": 44.9645626, "lon": -93.3726094 }, 778 | { "lat": 44.9645656, "lon": -93.3727330 } 779 | ], 780 | "tags": { 781 | "addr:city": "Saint Louis Park", 782 | "addr:housenumber": "1832", 783 | "addr:postcode": "55426", 784 | "addr:state": "MN", 785 | "addr:street": "Maryland Avenue South", 786 | "building": "detached" 787 | } 788 | }, 789 | { 790 | "type": "way", 791 | "id": 1080705550, 792 | "bounds": { 793 | "minlat": 44.9644703, 794 | "minlon": -93.3714908, 795 | "maxlat": 44.9646630, 796 | "maxlon": -93.3713498 797 | }, 798 | "nodes": [ 799 | 9905514004, 800 | 9905514005, 801 | 9905514006, 802 | 9905514007, 803 | 9905514008, 804 | 9905514009, 805 | 9905514004 806 | ], 807 | "geometry": [ 808 | { "lat": 44.9644739, "lon": -93.3714908 }, 809 | { "lat": 44.9646630, "lon": -93.3714785 }, 810 | { "lat": 44.9646588, "lon": -93.3713498 }, 811 | { "lat": 44.9645770, "lon": -93.3713552 }, 812 | { "lat": 44.9645775, "lon": -93.3713722 }, 813 | { "lat": 44.9644703, "lon": -93.3713791 }, 814 | { "lat": 44.9644739, "lon": -93.3714908 } 815 | ], 816 | "tags": { 817 | "addr:city": "Saint Louis Park", 818 | "addr:housenumber": "1832", 819 | "addr:postcode": "55426", 820 | "addr:state": "MN", 821 | "addr:street": "Louisiana Avenue South", 822 | "building": "detached" 823 | } 824 | }, 825 | { 826 | "type": "way", 827 | "id": 1086882624, 828 | "bounds": { 829 | "minlat": 44.9643629, 830 | "minlon": -93.4048331, 831 | "maxlat": 44.9644944, 832 | "maxlon": -93.4046859 833 | }, 834 | "nodes": [ 835 | 9958669384, 836 | 9958669385, 837 | 9958669386, 838 | 9958669387, 839 | 9958669384 840 | ], 841 | "geometry": [ 842 | { "lat": 44.9644944, "lon": -93.4048115 }, 843 | { "lat": 44.9643742, "lon": -93.4048331 }, 844 | { "lat": 44.9643629, "lon": -93.4047076 }, 845 | { "lat": 44.9644830, "lon": -93.4046859 }, 846 | { "lat": 44.9644944, "lon": -93.4048115 } 847 | ], 848 | "tags": { 849 | "addr:city": "Saint Louis Park", 850 | "addr:housenumber": "1832", 851 | "addr:postcode": "55426", 852 | "addr:state": "MN", 853 | "addr:street": "Parker Lane", 854 | "building": "detached" 855 | } 856 | }, 857 | { 858 | "type": "way", 859 | "id": 1088783744, 860 | "bounds": { 861 | "minlat": 44.8134146, 862 | "minlon": -93.2006048, 863 | "maxlat": 44.8135502, 864 | "maxlon": -93.2003208 865 | }, 866 | "nodes": [ 867 | 9974709779, 868 | 9974709780, 869 | 9974709781, 870 | 9974709782, 871 | 9974709783, 872 | 9974709784, 873 | 9974709785, 874 | 9974709786, 875 | 9974709779 876 | ], 877 | "geometry": [ 878 | { "lat": 44.8134787, "lon": -93.2006048 }, 879 | { "lat": 44.8135112, "lon": -93.2004711 }, 880 | { "lat": 44.8135245, "lon": -93.2004775 }, 881 | { "lat": 44.8135502, "lon": -93.2003715 }, 882 | { "lat": 44.8134448, "lon": -93.2003208 }, 883 | { "lat": 44.8134188, "lon": -93.2004283 }, 884 | { "lat": 44.8134467, "lon": -93.2004418 }, 885 | { "lat": 44.8134146, "lon": -93.2005740 }, 886 | { "lat": 44.8134787, "lon": -93.2006048 } 887 | ], 888 | "tags": { 889 | "addr:city": "Eagan", 890 | "addr:housenumber": "1832", 891 | "addr:postcode": "55122", 892 | "addr:state": "MN", 893 | "addr:street": "Turquoise Trail", 894 | "building": "house" 895 | } 896 | }, 897 | { 898 | "type": "way", 899 | "id": 1110140867, 900 | "bounds": { 901 | "minlat": 44.9989634, 902 | "minlon": -93.3202440, 903 | "maxlat": 44.9991213, 904 | "maxlon": -93.3199993 905 | }, 906 | "nodes": [ 907 | 10155731205, 908 | 10155731206, 909 | 10155731207, 910 | 10155731208, 911 | 10155731209, 912 | 10155731210, 913 | 10155731211, 914 | 10155731212, 915 | 10155731213, 916 | 10155731214, 917 | 10155731215, 918 | 10155731216, 919 | 10155801017, 920 | 10155801018, 921 | 10155731205 922 | ], 923 | "geometry": [ 924 | { "lat": 44.9990088, "lon": -93.3201216 }, 925 | { "lat": 44.9990393, "lon": -93.3200837 }, 926 | { "lat": 44.9990256, "lon": -93.3200617 }, 927 | { "lat": 44.9990758, "lon": -93.3199993 }, 928 | { "lat": 44.9991213, "lon": -93.3200725 }, 929 | { "lat": 44.9990782, "lon": -93.3201262 }, 930 | { "lat": 44.9990953, "lon": -93.3201536 }, 931 | { "lat": 44.9990228, "lon": -93.3202440 }, 932 | { "lat": 44.9990016, "lon": -93.3202100 }, 933 | { "lat": 44.9989922, "lon": -93.3202218 }, 934 | { "lat": 44.9989832, "lon": -93.3202074 }, 935 | { "lat": 44.9989943, "lon": -93.3201936 }, 936 | { "lat": 44.9989634, "lon": -93.3201440 }, 937 | { "lat": 44.9989968, "lon": -93.3201024 }, 938 | { "lat": 44.9990088, "lon": -93.3201216 } 939 | ], 940 | "tags": { 941 | "addr:city": "Golden Valley", 942 | "addr:housenumber": "1832", 943 | "addr:postcode": "55422", 944 | "addr:state": "MN", 945 | "addr:street": "York Avenue North", 946 | "building": "detached" 947 | } 948 | }, 949 | { 950 | "type": "way", 951 | "id": 1135459656, 952 | "bounds": { 953 | "minlat": 45.0752007, 954 | "minlon": -93.0235753, 955 | "maxlat": 45.0753106, 956 | "maxlon": -93.0234392 957 | }, 958 | "nodes": [ 959 | 10584388450, 960 | 10584388451, 961 | 10584388452, 962 | 10584388453, 963 | 10584388454, 964 | 10584388455, 965 | 10584388456, 966 | 10584388457, 967 | 10584388450 968 | ], 969 | "geometry": [ 970 | { "lat": 45.0753106, "lon": -93.0234656 }, 971 | { "lat": 45.0752989, "lon": -93.0235282 }, 972 | { "lat": 45.0752858, "lon": -93.0235233 }, 973 | { "lat": 45.0752761, "lon": -93.0235753 }, 974 | { "lat": 45.0752007, "lon": -93.0235470 }, 975 | { "lat": 45.0752168, "lon": -93.0234608 }, 976 | { "lat": 45.0752349, "lon": -93.0234676 }, 977 | { "lat": 45.0752402, "lon": -93.0234392 }, 978 | { "lat": 45.0753106, "lon": -93.0234656 } 979 | ], 980 | "tags": { 981 | "addr:city": "White Bear Lake", 982 | "addr:housenumber": "1832", 983 | "addr:postcode": "55110", 984 | "addr:state": "MN", 985 | "addr:street": "Whitaker Street", 986 | "building": "house" 987 | } 988 | } 989 | 990 | ] 991 | } 992 | --------------------------------------------------------------------------------