mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-06-24 17:55:11 +00:00
Compare commits
77 Commits
c++-readme
...
1.18.0
Author | SHA1 | Date | |
---|---|---|---|
7fe3de9cfa | |||
fb6551c59e | |||
30d54ff50d | |||
685e1a4360 | |||
922bef72c8 | |||
9eb3a7f7ec | |||
eab593fea5 | |||
f87a9d1660 | |||
92deeb58f9 | |||
6ec453229c | |||
ad0eba7ccd | |||
acdb5b72db | |||
1669d96510 | |||
63e0c89c4b | |||
dc01d33402 | |||
0ecc6fa1c5 | |||
6173180cee | |||
569fd97475 | |||
6c7a52147b | |||
d2a8761483 | |||
d19680e392 | |||
8b5168cb2b | |||
178b5d0054 | |||
65ee2cf0a5 | |||
242a657fc1 | |||
510247c2fb | |||
e75bb4a16a | |||
198a5a06d4 | |||
a0831cd71e | |||
f4677d5de1 | |||
a394c9e93d | |||
79b73e6317 | |||
ab300c2080 | |||
5ec6ce1743 | |||
63ea7bdc4e | |||
bb365bde44 | |||
7f918bd79b | |||
a7be83381a | |||
da92b93b62 | |||
f558b78380 | |||
1c1ae6a8be | |||
b66ab10252 | |||
682a272f91 | |||
a320248857 | |||
9fb1208b79 | |||
29fa3d8541 | |||
f03b89656c | |||
aee12ac1fe | |||
8777bdf5d3 | |||
1362ac448f | |||
fa56adc530 | |||
8c6f6250b1 | |||
ea77e3db6f | |||
bbf9716361 | |||
9c53268a2b | |||
860189a577 | |||
c46f4cfc75 | |||
cef4d2cd47 | |||
3a1f074c96 | |||
835fafe30a | |||
30a987d9ba | |||
218a2fc75e | |||
638cfef2b6 | |||
5bdbb8a911 | |||
55e7e20a73 | |||
9c1f2b2123 | |||
1b68dcdc22 | |||
1cc65d61ba | |||
62e1018c87 | |||
4517bd6e90 | |||
a1fe858151 | |||
31f254ac99 | |||
28b8f1c326 | |||
c74a9a8325 | |||
c67b5f33bd | |||
5a8f9f11c0 | |||
b3847c1da1 |
14
.gitignore
vendored
14
.gitignore
vendored
@ -4,6 +4,9 @@
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Autogenerated dependencies
|
||||
*.d
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
@ -27,3 +30,14 @@
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
tippecanoe
|
||||
tile-join
|
||||
tippecanoe-decode
|
||||
tippecanoe-enumerate
|
||||
unit
|
||||
|
||||
# Vim
|
||||
*.swp
|
||||
|
||||
# Mac
|
||||
.DS_Store
|
||||
|
92
CHANGELOG.md
92
CHANGELOG.md
@ -1,3 +1,95 @@
|
||||
## 1.18.0
|
||||
|
||||
* Fix compression of tiles in tile-join
|
||||
* Calculate the tileset bounding box in tile-join from the tile boundaries
|
||||
|
||||
## 1.17.7
|
||||
|
||||
* Enforce polygon winding and closure rules in tippecanoe-decode
|
||||
|
||||
## 1.17.6
|
||||
|
||||
* Add tile-join options to set name, attribution, description
|
||||
|
||||
## 1.17.5
|
||||
|
||||
* Preserve the tileset names from the source mbtiles in tile-join
|
||||
|
||||
## 1.17.4
|
||||
|
||||
* Fix RFC 8142 support: Don't try to split *all* memory mapped files
|
||||
|
||||
## 1.17.3
|
||||
|
||||
* Support RFC 8142 GeoJSON text sequences
|
||||
|
||||
## 1.17.2
|
||||
|
||||
* Organize usage output the same way as in the README
|
||||
|
||||
## 1.17.1
|
||||
|
||||
* Add -T option to coerce the types of feature attributes
|
||||
|
||||
## 1.17.0
|
||||
|
||||
* Add -zg option to guess an appropriate maxzoom
|
||||
|
||||
## 1.16.17
|
||||
|
||||
* Clean up JSON parsing at the end of each FeatureCollection
|
||||
to avoid running out of memory
|
||||
|
||||
## 1.16.16
|
||||
|
||||
* Add tile-join options to include or exclude specific layers
|
||||
|
||||
## 1.16.15
|
||||
|
||||
* Add --output-to-directory and --no-tile-compression options
|
||||
|
||||
## 1.16.14
|
||||
|
||||
* Add --description option for mbtiles metadata
|
||||
* Clean up some utility functions
|
||||
|
||||
## 1.16.13
|
||||
|
||||
* Add --detect-longitude-wraparound option
|
||||
|
||||
## 1.16.12
|
||||
|
||||
* Stop processing higher zooms when a feature reaches its explicit maxzoom tag
|
||||
|
||||
## 1.16.11
|
||||
|
||||
* Remove polygon splitting, since polygon cleaning is now fast enough
|
||||
|
||||
## 1.16.10
|
||||
|
||||
* Add a tippecanoe-decode option to specify layer names
|
||||
|
||||
## 1.16.9
|
||||
|
||||
* Clean up layer name handling to fix layer merging crash
|
||||
|
||||
## 1.16.8
|
||||
|
||||
* Fix some code that could sometimes try to divide by zero
|
||||
* Add check for $TIPPECANOE_MAX_THREADS environmental variable
|
||||
|
||||
## 1.16.7
|
||||
|
||||
* Fix area of placeholders for degenerate multipolygons
|
||||
|
||||
## 1.16.6
|
||||
|
||||
* Upgrade Wagyu to 0.3.0; downgrade C++ requirement to C++ 11
|
||||
|
||||
## 1.16.5
|
||||
|
||||
* Add -z and -Z options to tippecanoe-decode
|
||||
|
||||
## 1.16.4
|
||||
|
||||
* Use Wagyu's quick_lr_clip() instead of a separate implementation
|
||||
|
31
Makefile
31
Makefile
@ -7,7 +7,7 @@ SHELL = /bin/bash
|
||||
CC := $(CC)
|
||||
CXX := $(CXX)
|
||||
CFLAGS := $(CFLAGS)
|
||||
CXXFLAGS := $(CXXFLAGS) -std=c++14
|
||||
CXXFLAGS := $(CXXFLAGS) -std=c++11
|
||||
LDFLAGS := $(LDFLAGS)
|
||||
WARNING_FLAGS := -Wall -Wshadow -Wsign-compare
|
||||
RELEASE_FLAGS := -O3 -DNDEBUG
|
||||
@ -46,7 +46,7 @@ C = $(wildcard *.c) $(wildcard *.cpp)
|
||||
INCLUDES = -I/usr/local/include -I.
|
||||
LIBS = -L/usr/local/lib
|
||||
|
||||
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o
|
||||
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o rawtiles.o
|
||||
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
|
||||
|
||||
tippecanoe-enumerate: enumerate.o
|
||||
@ -78,7 +78,7 @@ indent:
|
||||
TESTS = $(wildcard tests/*/out/*.json)
|
||||
SPACE = $(NULL) $(NULL)
|
||||
|
||||
test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) parallel-test pbf-test join-test enumerate-test unit
|
||||
test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test unit
|
||||
./unit
|
||||
|
||||
# Work around Makefile and filename punctuation limits: _ for space, @ for :, % for /
|
||||
@ -99,18 +99,33 @@ parallel-test:
|
||||
./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-file.mbtiles tests/parallel/in[123].json tests/parallel/empty[12].json
|
||||
cat tests/parallel/in[123].json | ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/linear-pipe.mbtiles
|
||||
cat tests/parallel/in[123].json | ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipe.mbtiles
|
||||
cat tests/parallel/in[123].json | sed 's/^/@/' | tr '@' '\036' | ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/implicit-pipe.mbtiles
|
||||
./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipes.mbtiles <(cat tests/parallel/in1.json) <(cat tests/parallel/empty1.json) <(cat tests/parallel/empty2.json) <(cat tests/parallel/in2.json) /dev/null <(cat tests/parallel/in3.json)
|
||||
./tippecanoe-decode tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json
|
||||
./tippecanoe-decode tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json
|
||||
./tippecanoe-decode tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json
|
||||
./tippecanoe-decode tests/parallel/parallel-pipe.mbtiles > tests/parallel/parallel-pipe.json
|
||||
./tippecanoe-decode tests/parallel/implicit-pipe.mbtiles > tests/parallel/implicit-pipe.json
|
||||
./tippecanoe-decode tests/parallel/parallel-pipes.mbtiles > tests/parallel/parallel-pipes.json
|
||||
cmp tests/parallel/linear-file.json tests/parallel/parallel-file.json
|
||||
cmp tests/parallel/linear-file.json tests/parallel/linear-pipe.json
|
||||
cmp tests/parallel/linear-file.json tests/parallel/parallel-pipe.json
|
||||
cmp tests/parallel/linear-file.json tests/parallel/implicit-pipe.json
|
||||
cmp tests/parallel/linear-file.json tests/parallel/parallel-pipes.json
|
||||
rm tests/parallel/*.mbtiles tests/parallel/*.json
|
||||
|
||||
raw-tiles-test:
|
||||
./tippecanoe -e tests/raw-tiles/raw-tiles tests/raw-tiles/hackspots.geojson -pC
|
||||
diff -x '.*' -rq tests/raw-tiles/raw-tiles tests/raw-tiles/compare
|
||||
rm -rf tests/raw-tiles/raw-tiles
|
||||
|
||||
decode-test:
|
||||
mkdir -p tests/muni/decode
|
||||
./tippecanoe -z11 -Z11 -f -o tests/muni/decode/multi.mbtiles tests/muni/*.json
|
||||
./tippecanoe-decode -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check
|
||||
cmp tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles.json
|
||||
rm -f tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles
|
||||
|
||||
pbf-test:
|
||||
./tippecanoe-decode tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.vector.pbf.out
|
||||
cmp tests/pbf/11-328-791.json tests/pbf/11-328-791.vector.pbf.out
|
||||
@ -134,7 +149,7 @@ join-test:
|
||||
./tile-join -f -i -o tests/join-population/joined-i.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles
|
||||
./tile-join -f -o tests/join-population/merged.mbtiles tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles
|
||||
./tile-join -f -c tests/join-population/windows.csv -o tests/join-population/windows.mbtiles tests/join-population/macarthur.mbtiles
|
||||
./tippecanoe-decode tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check
|
||||
./tippecanoe-decode -z11 -Z4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check
|
||||
./tippecanoe-decode tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check
|
||||
./tippecanoe-decode tests/join-population/merged.mbtiles > tests/join-population/merged.mbtiles.json.check
|
||||
./tippecanoe-decode tests/join-population/windows.mbtiles > tests/join-population/windows.mbtiles.json.check
|
||||
@ -142,7 +157,13 @@ join-test:
|
||||
cmp tests/join-population/joined-i.mbtiles.json.check tests/join-population/joined-i.mbtiles.json
|
||||
cmp tests/join-population/merged.mbtiles.json.check tests/join-population/merged.mbtiles.json
|
||||
cmp tests/join-population/windows.mbtiles.json.check tests/join-population/windows.mbtiles.json
|
||||
rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows.mbtiles.json.check
|
||||
./tile-join -f -l macarthur -n "macarthur name" -N "macarthur description" -A "macarthur attribution" -o tests/join-population/just-macarthur.mbtiles tests/join-population/merged.mbtiles
|
||||
./tile-join -f -L macarthur -o tests/join-population/no-macarthur.mbtiles tests/join-population/merged.mbtiles
|
||||
./tippecanoe-decode tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check
|
||||
./tippecanoe-decode tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check
|
||||
cmp tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/just-macarthur.mbtiles.json
|
||||
cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json
|
||||
rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows.mbtiles.json.check tests/join-population/just-macarthur.mbtiles tests/join-population/no-macarthur.mbtiles tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json.check
|
||||
|
||||
# Use this target to regenerate the standards that the tests are compared against
|
||||
# after making a change that legitimately changes their output
|
||||
|
232
README.md
232
README.md
@ -55,97 +55,171 @@ it encounters.
|
||||
Options
|
||||
-------
|
||||
|
||||
### Naming
|
||||
There are a lot of options. A lot of the time you won't want to use any of them
|
||||
other than `-o` _output_`.mbtiles` to name the output file, and probably `-f` to
|
||||
delete the file that already exists with that name.
|
||||
|
||||
* -l _name_ or --layer=_name_: Layer name (default "file" if source is file.json or output is file.mbtiles). If there are multiple input files
|
||||
specified, the files are all merged into the single named layer, even if they try to specify individual names with -L.
|
||||
* -L _name_:_file.json_ or --named-layer=_name_:_file.json_: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like -L _name_:<(cat dir/*.json) to specify a layer name for the output of streamed input.
|
||||
* -n _name_ or --name=_name_: Human-readable name for the tileset (default file.json)
|
||||
* -A _text_ or --attribution=_text_: Attribution (HTML) to be shown with maps that use data from this tileset.
|
||||
If you aren't sure what the right maxzoom is for your data, `-zg` will guess one for you
|
||||
based on the density of features.
|
||||
|
||||
### File control
|
||||
If you are mapping point features, you will often want to use `-Bg` to automatically choose
|
||||
a base zoom level for dot dropping. If that doesn't work out for you, try
|
||||
`-r1 --drop-fraction-as-needed` to turn off the normal dot dropping and instead
|
||||
only drop features if the tiles get too big.
|
||||
|
||||
* -o _file_.mbtiles or --output=_file_.mbtiles: Name the output file.
|
||||
* -f or --force: Delete the mbtiles file if it already exists instead of giving an error
|
||||
* -F or --allow-existing: Proceed (without deleting existing data) if the metadata or tiles table already exists
|
||||
or if metadata fields can't be set
|
||||
* -t _directory_ or --temporary-directory=_directory_: Put the temporary files in _directory_.
|
||||
If you don't specify, it will use `/tmp`.
|
||||
* -P or --read-parallel: Use multiple threads to read different parts of each input file at once.
|
||||
If you are mapping points or polygons, you will often want to use `--drop-densest-as-needed`
|
||||
to drop some of them if necessary to make the low zoom levels work.
|
||||
|
||||
If your features have a lot of attributes, use `-y` to keep only the ones you really need.
|
||||
|
||||
If your input is formatted as newline-delimited GeoJSON, use `-P` to make input parsing a lot faster.
|
||||
|
||||
### Output tileset
|
||||
|
||||
* `-o` _file_`.mbtiles` or `--output=`_file_`.mbtiles`: Name the output file.
|
||||
* `-e` _directory_ or `--output-to-directory`=_directory_: Write tiles to the specified *directory* instead of to an mbtiles file.
|
||||
* `-f` or `--force`: Delete the mbtiles file if it already exists instead of giving an error
|
||||
* `-F` or `--allow-existing`: Proceed (without deleting existing data) if the metadata or tiles table already exists
|
||||
or if metadata fields can't be set. You probably don't want to use this.
|
||||
|
||||
### Tileset description and attribution
|
||||
|
||||
* `-n` _name_ or `--name=`_name_: Human-readable name for the tileset (default file.json)
|
||||
* `-A` _text_ or `--attribution=`_text_: Attribution (HTML) to be shown with maps that use data from this tileset.
|
||||
* `-N` _description_ or `--description=`_description_: Description for the tileset (default file.mbtiles)
|
||||
|
||||
### Input files and layer names
|
||||
|
||||
* _name_`.json` or _name_`.geojson`: Read the named GeoJSON input file into a layer called _name_.
|
||||
* `-l` _name_ or `--layer=`_name_: Use the specified layer name instead of deriving a name from the input filename or output tileset. If there are multiple input files
|
||||
specified, the files are all merged into the single named layer, even if they try to specify individual names with `-L`.
|
||||
* `-L` _name_`:`_file.json_ or `--named-layer=`_name_`:`_file.json_: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like `-L` _name_`:<(cat dir/*.json)` to specify a layer name for the output of streamed input.
|
||||
|
||||
### Parallel processing of input
|
||||
|
||||
* `-P` or `--read-parallel`: Use multiple threads to read different parts of each input file at once.
|
||||
This will only work if the input is line-delimited JSON with each Feature on its
|
||||
own line, because it knows nothing of the top-level structure around the Features. Spurious "EOF" error
|
||||
messages may result otherwise.
|
||||
Performance will be better if the input is a named file that can be mapped into memory
|
||||
rather than a stream that can only be read sequentially.
|
||||
|
||||
### Zoom levels and resolution
|
||||
If the input file begins with the [RFC 8142](https://tools.ietf.org/html/rfc8142) record separator,
|
||||
parallel processing of input will be invoked automatically, splitting at record separators rather
|
||||
than at all newlines.
|
||||
|
||||
* -z _zoom_ or --maximum-zoom=_zoom_: Maxzoom: the highest zoom level for which tiles are generated (default 14)
|
||||
* -Z _zoom_ or --minimum-zoom=_zoom_: Minzoom: the lowest zoom level for which tiles are generated (default 0)
|
||||
* -B _zoom_ or --base-zoom=_zoom_: Base zoom, the level at and above which all points are included in the tiles (default maxzoom).
|
||||
If you use -Bg, it will guess a zoom level that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker-width with -Bg*width* to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or -Bf*number* to allow at most *number* features in the densest tile.
|
||||
* -d _detail_ or --full-detail=_detail_: Detail at max zoom level (default 12, for tile resolution of 4096)
|
||||
* -D _detail_ or --low-detail=_detail_: Detail at lower zoom levels (default 12, for tile resolution of 4096)
|
||||
* -m _detail_ or --minimum-detail=_detail_: Minimum detail that it will try if tiles are too big at regular detail (default 7)
|
||||
* -b _pixels_ or --buffer=_pixels_: Buffer size where features are duplicated from adjacent tiles. Units are "screen pixels"--1/256th of the tile width or height. (default 5)
|
||||
* -s _projection_ or --projection=_projection_: Specify the projection of the input data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
* -M _bytes_ or --maximum-tile-bytes=_bytes_: Use the specified number of _bytes_ as the maximum compressed tile size instead of 500K.
|
||||
### Projection of input
|
||||
|
||||
* `-s` _projection_ or `--projection=`_projection_: Specify the projection of the input data. Currently supported are `EPSG:4326` (WGS84, the default) and `EPSG:3857` (Web Mercator). In general you should use WGS84 for your input files if at all possible.
|
||||
|
||||
### Zoom levels
|
||||
|
||||
* `-z` _zoom_ or `--maximum-zoom=`_zoom_: Maxzoom: the highest zoom level for which tiles are generated (default 14)
|
||||
* `-zg` or `--maximum-zoom=g`: Guess what is probably a reasonable maxzoom based on the spacing of features.
|
||||
* `-Z` _zoom_ or `--minimum-zoom=`_zoom_: Minzoom: the lowest zoom level for which tiles are generated (default 0)
|
||||
|
||||
### Tile resolution
|
||||
|
||||
* `-d` _detail_ or `--full-detail=`_detail_: Detail at max zoom level (default 12, for tile resolution of 4096)
|
||||
* `-D` _detail_ or `--low-detail=`_detail_: Detail at lower zoom levels (default 12, for tile resolution of 4096)
|
||||
* `-m` _detail_ or `--minimum-detail=`_detail_: Minimum detail that it will try if tiles are too big at regular detail (default 7)
|
||||
|
||||
All internal math is done in terms of a 32-bit tile coordinate system, so 1/(2^32) of the size of Earth,
|
||||
or about 1cm, is the smallest distinguishable distance. If _maxzoom_ + _detail_ > 32, no additional
|
||||
resolution is obtained than by using a smaller _maxzoom_ or _detail_.
|
||||
|
||||
### Properties
|
||||
### Filtering feature attributes
|
||||
|
||||
* -x _name_ or --exclude=_name_: Exclude the named properties from all features
|
||||
* -y _name_ or --include=_name_: Include the named properties in all features, excluding all those not explicitly named
|
||||
* -X or --exclude-all: Exclude all properties and encode only geometries
|
||||
* `-x` _name_ or `--exclude=`_name_: Exclude the named properties from all features
|
||||
* `-y` _name_ or `--include=`_name_: Include the named properties in all features, excluding all those not explicitly named
|
||||
* `-X` or `--exclude-all`: Exclude all properties and encode only geometries
|
||||
* `-T`_attribute_`:`_type_ or `--attribute-type=`_attribute_`:`_type_: Coerce the named feature _attribute_ to be of the specified _type_.
|
||||
The _type_ may be `string`, `float`, `int`, or `bool`.
|
||||
If the type is `bool`, then original attributes of `0`, `false`, `null`, or the empty string become `false`, and otherwise become `true`.
|
||||
If the type is `float` or `int` and the original attribute was non-numeric, it becomes `0`.
|
||||
If the type is `int` and the original attribute was floating-point, it is rounded to the nearest integer.
|
||||
|
||||
### Point simplification
|
||||
### Dropping a fixed fraction of features by zoom level
|
||||
|
||||
* -r _rate_ or --drop-rate=_rate_: Rate at which dots are dropped at zoom levels below basezoom (default 2.5).
|
||||
If you use -rg, it will guess a drop rate that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker-width with -rg*width* to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or -rf*number* to allow at most *number* features in the densest tile.
|
||||
* -g _gamma_ or --gamma=_gamma_: Rate at which especially dense dots are dropped (default 0, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number.
|
||||
* `-r` _rate_ or `--drop-rate=`_rate_: Rate at which dots are dropped at zoom levels below basezoom (default 2.5).
|
||||
If you use `-rg`, it will guess a drop rate that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker-width with `-rg`*width* to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or `-rf`*number* to allow at most *number* features in the densest tile.
|
||||
* `-B` _zoom_ or `--base-zoom=`_zoom_: Base zoom, the level at and above which all points are included in the tiles (default maxzoom).
|
||||
If you use `-Bg`, it will guess a zoom level that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker-width with `-Bg`*width* to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or `-Bf`*number* to allow at most *number* features in the densest tile.
|
||||
* `-al` or `--drop-lines`: Let "dot" dropping at lower zooms apply to lines too
|
||||
* `-ap` or `--drop-polygons`: Let "dot" dropping at lower zooms apply to polygons too
|
||||
|
||||
### Dropping a fraction of features to keep under tile size limits
|
||||
|
||||
* `-as` or `--drop-densest-as-needed`: If a tile is too large, try to reduce it to under 500K by increasing the minimum spacing between features. The discovered spacing applies to the entire zoom level.
|
||||
* `-ad` or `--drop-fraction-as-needed`: Dynamically drop some fraction of features from each zoom level to keep large tiles under the 500K size limit. (This is like `-pd` but applies to the entire zoom level, not to each tile.)
|
||||
* `-an` or `--drop-smallest-as-needed`: Dynamically drop the smallest features (physically smallest: the shortest lines or the smallest polygons) from each zoom level to keep large tiles under the 500K size limit. This option will not work for point features.
|
||||
* `-pd` or `--force-feature-limit`: Dynamically drop some fraction of features from large tiles to keep them under the 500K size limit. It will probably look ugly at the tile boundaries. (This is like `-ad` but applies to each tile individually, not to the entire zoom level.) You probably don't want to use this.
|
||||
|
||||
### Dropping tightly overlapping features
|
||||
|
||||
* `-g` _gamma_ or `--gamma=_gamma`_: Rate at which especially dense dots are dropped (default 0, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number.
|
||||
* `-aG` or `--increase-gamma-as-needed`: If a tile is too large, try to reduce it to under 500K by increasing the `-g` gamma. The discovered gamma applies to the entire zoom level. You probably want to use `--drop-densest-as-needed` instead.
|
||||
|
||||
### Line and polygon simplification
|
||||
|
||||
* -S _scale_ or --simplification=_scale_: Multiply the tolerance for line and polygon simplification by _scale_. The standard tolerance tries to keep
|
||||
* `-S` _scale_ or `--simplification=`_scale_: Multiply the tolerance for line and polygon simplification by _scale_. The standard tolerance tries to keep
|
||||
the line or polygon within one tile unit of its proper location. You can probably go up to about 10 without too much visible difference.
|
||||
* `-ps` or `--no-line-simplification`: Don't simplify lines and polygons
|
||||
* `-pS` or `--simplify-only-low-zooms`: Don't simplify lines and polygons at maxzoom (but do simplify at lower zooms)
|
||||
* `-pt` or `--no-tiny-polygon-reduction`: Don't combine the area of very small polygons into small squares that represent their combined area.
|
||||
|
||||
### Doing more
|
||||
### Attempts to improve shared polygon boundaries
|
||||
|
||||
* -ac or --coalesce: Coalesce adjacent line and polygon features that have the same properties.
|
||||
Note that when overlapping polygons are coalesced, the overlapping region is treated as a hole,
|
||||
which may not be what you want.
|
||||
* -ar or --reverse: Try reversing the directions of lines to make them coalesce and compress better
|
||||
* -ao or --reorder: Reorder features to put ones with the same properties in sequence, to try to get them to coalesce
|
||||
* -al or --drop-lines: Let "dot" dropping at lower zooms apply to lines too
|
||||
* -ap or --drop-polygons: Let "dot" dropping at lower zooms apply to polygons too
|
||||
* -ag or --calculate-feature-density: Add a new attribute, `tippecanoe_feature_density`, to each feature, to record how densely features are spaced in that area of the tile. You can use this attribute in the style to produce a glowing effect where points are densely packed. It can range from 0 in the sparsest areas to 255 in the densest.
|
||||
* -ab or --detect-shared-borders: In the manner of [TopoJSON](https://github.com/mbostock/topojson/wiki/Introduction), detect borders that are shared between multiple polygons and simplify them identically in each polygon. This takes more time and memory than considering each polygon individually.
|
||||
* -aG or --increase-gamma-as-needed: If a tile is too large, try to reduce it to under 500K by increasing the `-g` gamma. The discovered gamma applies to the entire zoom level.
|
||||
* -as or --drop-densest-as-needed: If a tile is too large, try to reduce it to under 500K by increasing the minimum spacing between features. The discovered spacing applies to the entire zoom level.
|
||||
* -ad or --drop-fraction-as-needed: Dynamically drop some fraction of features from each zoom level to keep large tiles under the 500K size limit. (This is like `-pd` but applies to the entire zoom level, not to each tile.)
|
||||
* -an or --drop-smallest-as-needed: Dynamically drop the smallest features (physically smallest: the shortest lines or the smallest polygons) from each zoom level to keep large tiles under the 500K size limit. This option will not work for point features.
|
||||
* -aL or --grid-low-zooms: At all zoom levels below _maxzoom_, snap all lines and polygons to a stairstep grid instead of allowing diagonals. You will also want to specify a tile resolution, probably `-D8`. This option provides a way to display continuous parcel, gridded, or binned data at low zooms without overwhelming the tiles with tiny polygons, since features will either get stretched out to the grid unit or lost entirely, depending on how they happened to be aligned in the original data.
|
||||
* `-ab` or `--detect-shared-borders`: In the manner of [TopoJSON](https://github.com/mbostock/topojson/wiki/Introduction), detect borders that are shared between multiple polygons and simplify them identically in each polygon. This takes more time and memory than considering each polygon individually.
|
||||
* `-aL` or `--grid-low-zooms`: At all zoom levels below _maxzoom_, snap all lines and polygons to a stairstep grid instead of allowing diagonals. You will also want to specify a tile resolution, probably `-D8`. This option provides a way to display continuous parcel, gridded, or binned data at low zooms without overwhelming the tiles with tiny polygons, since features will either get stretched out to the grid unit or lost entirely, depending on how they happened to be aligned in the original data. You probably don't want to use this.
|
||||
|
||||
### Doing less
|
||||
### Controlling clipping to tile boundaries
|
||||
|
||||
* -ps or --no-line-simplification: Don't simplify lines
|
||||
* -pS or --simplify-only-low-zooms: Don't simplify lines at maxzoom (but do simplify at lower zooms)
|
||||
* -pf or --no-feature-limit: Don't limit tiles to 200,000 features
|
||||
* -pk or --no-tile-size-limit: Don't limit tiles to 500K bytes
|
||||
* -pd or --force-feature-limit: Dynamically drop some fraction of features from large tiles to keep them under the 500K size limit. It will probably look ugly at the tile boundaries. (This is like `-ad` but applies to each tile individually, not to the entire zoom level.)
|
||||
* -pi or --preserve-input-order: Preserve the original input order of features as the drawing order instead of ordering geographically. (This is implemented as a restoration of the original order at the end, so that dot-dropping is still geographic, which means it also undoes -ao).
|
||||
* -pp or --no-polygon-splitting: Don't split complex polygons (over 700 vertices after simplification) into multiple features.
|
||||
* -pc or --no-clipping: Don't clip features to the size of the tile. If a feature overlaps the tile's bounds or buffer at all, it is included completely. Be careful: this can produce very large tilesets, especially with large polygons.
|
||||
* -pD or --no-duplication: As with --no-clipping, each feature is included intact instead of cut to tile boundaries. In addition, it is included only in a single tile per zoom level rather than potentially in multiple copies. Clients of the tileset must check adjacent tiles (possibly some distance away) to ensure they have all features.
|
||||
* -pt or --no-tiny-polygon-reduction: Don't combine the area of very small polygons into small squares that represent their combined area.
|
||||
* -q or --quiet: Work quietly instead of reporting progress
|
||||
* `-b` _pixels_ or `--buffer=`_pixels_: Buffer size where features are duplicated from adjacent tiles. Units are "screen pixels"—1/256th of the tile width or height. (default 5)
|
||||
* `-pc` or `--no-clipping`: Don't clip features to the size of the tile. If a feature overlaps the tile's bounds or buffer at all, it is included completely. Be careful: this can produce very large tilesets, especially with large polygons.
|
||||
* `-pD` or `--no-duplication`: As with `--no-clipping`, each feature is included intact instead of cut to tile boundaries. In addition, it is included only in a single tile per zoom level rather than potentially in multiple copies. Clients of the tileset must check adjacent tiles (possibly some distance away) to ensure they have all features.
|
||||
|
||||
### Reordering features within each tile
|
||||
|
||||
* `-pi` or `--preserve-input-order`: Preserve the original input order of features as the drawing order instead of ordering geographically. (This is implemented as a restoration of the original order at the end, so that dot-dropping is still geographic, which means it also undoes `-ao`).
|
||||
* `-ao` or `--reorder`: Reorder features to put ones with the same properties in sequence, to try to get them to coalesce. You probably don't want to use this.
|
||||
* `-ac` or `--coalesce`: Coalesce adjacent line and polygon features that have the same properties. You probably don't want to use this.
|
||||
* `-ar` or `--reverse`: Try reversing the directions of lines to make them coalesce and compress better. You probably don't want to use this.
|
||||
|
||||
### Adding calculated attributes
|
||||
|
||||
* `-ag` or `--calculate-feature-density`: Add a new attribute, `tippecanoe_feature_density`, to each feature, to record how densely features are spaced in that area of the tile. You can use this attribute in the style to produce a glowing effect where points are densely packed. It can range from 0 in the sparsest areas to 255 in the densest.
|
||||
|
||||
### Trying to correct bad source geometry
|
||||
|
||||
* `-aw` or `--detect-longitude-wraparound`: Detect when adjacent points within a feature jump to the other side of the world, and try to fix the geometry.
|
||||
|
||||
### Setting or disabling tile size limits
|
||||
|
||||
* `-M` _bytes_ or `--maximum-tile-bytes=`_bytes_: Use the specified number of _bytes_ as the maximum compressed tile size instead of 500K.
|
||||
* `-pf` or `--no-feature-limit`: Don't limit tiles to 200,000 features
|
||||
* `-pk` or `--no-tile-size-limit`: Don't limit tiles to 500K bytes
|
||||
* `-pC` or `--no-tile-compression`: Don't compress the PBF vector tile data.
|
||||
|
||||
### Temporary storage
|
||||
|
||||
* `-t` _directory_ or `--temporary-directory=`_directory_: Put the temporary files in _directory_.
|
||||
If you don't specify, it will use `/tmp`.
|
||||
|
||||
### Progress indicator
|
||||
|
||||
* `-q` or `--quiet`: Work quietly instead of reporting progress
|
||||
* `-v` or `--version`: Report Tippecanoe's version number
|
||||
|
||||
Environment
|
||||
-----------
|
||||
|
||||
Tippecanoe ordinarily uses as many parallel threads as the operating system claims that CPUs are available.
|
||||
You can override this number by setting the `TIPPECANOE_MAX_THREADS` environmental variable.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -251,9 +325,6 @@ have their probability diffused, so that some of them will be drawn as a square
|
||||
this minimum size and others will not be drawn at all, preserving the total area that
|
||||
all of them should have had together.
|
||||
|
||||
Any polygons that have over 700 vertices after line simplification will be split into
|
||||
multiple features so they can be rendered efficiently, unless you use -pp to prevent this.
|
||||
|
||||
Features in the same tile that share the same type and attributes are coalesced
|
||||
together into a single geometry if you use `--coalesce`. You are strongly encouraged to use -x to exclude
|
||||
any unnecessary properties to reduce wasted file size.
|
||||
@ -279,7 +350,7 @@ and perhaps
|
||||
|
||||
make install
|
||||
|
||||
Tippecanoe now requires features from the 2014 C++ standard. If your compiler is older than
|
||||
Tippecanoe now requires features from the 2011 C++ standard. If your compiler is older than
|
||||
that, you will need to install a newer one. On MacOS, updating to the lastest XCode should
|
||||
get you a new enough version of `clang++`. On Linux, you should be able to upgrade `g++` with
|
||||
|
||||
@ -313,12 +384,17 @@ the same tiles, the layers or tiles are merged.
|
||||
|
||||
The options are:
|
||||
|
||||
* -o *out.mbtiles*: Write the new tiles to the specified .mbtiles file
|
||||
* -f: Remove *out.mbtiles* if it already exists
|
||||
* -c *match.csv*: Use *match.csv* as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add.
|
||||
* -x *key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want.
|
||||
* -i: Only include features that matched the CSV.
|
||||
* -pk: Don't skip tiles larger than 500K.
|
||||
* `-o` *out.mbtiles*: Write the new tiles to the specified .mbtiles file
|
||||
* `-f`: Remove *out.mbtiles* if it already exists
|
||||
* `-c` *match*`.csv`: Use *match*`.csv` as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add.
|
||||
* `-x` *key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want.
|
||||
* `-i`: Only include features that matched the CSV.
|
||||
* `-pk`: Don't skip tiles larger than 500K.
|
||||
* `-l` *layer*: Include the named layer in the output. You can specify multiple `-l` options to keep multiple layers. If you don't specify, they will all be retained.
|
||||
* `-L` *layer*: Remove the named layer from the output. You can specify multiple `-L` options to remove multiple layers.
|
||||
* `-A` *attribution*: Set the attribution string.
|
||||
* `-n` *name*: Set the tileset name.
|
||||
* `-N` *description*: Set the tileset description.
|
||||
|
||||
Because tile-join just copies the geometries to the new .mbtiles without processing them
|
||||
(except to rescale the extents if necessary),
|
||||
@ -402,4 +478,8 @@ resolutions.
|
||||
|
||||
### Options
|
||||
|
||||
* -t _projection_: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
* `-t` _projection_: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
* `-z` _maxzoom_: Specify the highest zoom level to decode from the tileset
|
||||
* `-Z` _minzoom_: Specify the lowest zoom level to decode from the tileset
|
||||
* `-l` _layer_: Decode only layers with the specified names. (Multiple `-l` options can be specified.)
|
||||
* `-f`: Decode tiles even if polygon ring order or closure problems are detected
|
||||
|
79
decode.cpp
79
decode.cpp
@ -6,6 +6,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <zlib.h>
|
||||
#include <math.h>
|
||||
#include <fcntl.h>
|
||||
@ -16,6 +17,10 @@
|
||||
#include "projection.hpp"
|
||||
#include "geometry.hpp"
|
||||
|
||||
int minzoom = 0;
|
||||
int maxzoom = 32;
|
||||
bool force = false;
|
||||
|
||||
void printq(const char *s) {
|
||||
putchar('"');
|
||||
for (; *s; s++) {
|
||||
@ -46,12 +51,13 @@ struct lonlat {
|
||||
}
|
||||
};
|
||||
|
||||
void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
void handle(std::string message, int z, unsigned x, unsigned y, int describe, std::set<std::string> const &to_decode) {
|
||||
int within = 0;
|
||||
mvt_tile tile;
|
||||
bool was_compressed;
|
||||
|
||||
try {
|
||||
if (!tile.decode(message)) {
|
||||
if (!tile.decode(message, was_compressed)) {
|
||||
fprintf(stderr, "Couldn't parse tile %d/%u/%u\n", z, x, y);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@ -63,7 +69,12 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
printf("{ \"type\": \"FeatureCollection\"");
|
||||
|
||||
if (describe) {
|
||||
printf(", \"properties\": { \"zoom\": %d, \"x\": %d, \"y\": %d }", z, x, y);
|
||||
printf(", \"properties\": { \"zoom\": %d, \"x\": %d, \"y\": %d", z, x, y);
|
||||
if (!was_compressed) {
|
||||
printf(", \"compressed\": false");
|
||||
}
|
||||
|
||||
printf(" }");
|
||||
|
||||
if (projection != projections) {
|
||||
printf(", \"crs\": { \"type\": \"name\", \"properties\": { \"name\": ");
|
||||
@ -74,12 +85,17 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
|
||||
printf(", \"features\": [\n");
|
||||
|
||||
bool first_layer = true;
|
||||
for (size_t l = 0; l < tile.layers.size(); l++) {
|
||||
mvt_layer &layer = tile.layers[l];
|
||||
int extent = layer.extent;
|
||||
|
||||
if (to_decode.size() != 0 && !to_decode.count(layer.name)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (describe) {
|
||||
if (l != 0) {
|
||||
if (!first_layer) {
|
||||
printf(",\n");
|
||||
}
|
||||
|
||||
@ -90,6 +106,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
printf(" }");
|
||||
printf(", \"features\": [\n");
|
||||
|
||||
first_layer = false;
|
||||
within = 0;
|
||||
}
|
||||
|
||||
@ -251,6 +268,15 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
rings[n].push_back(ops[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (i + 1 >= ops.size() || ops[i + 1].op == VT_MOVETO) {
|
||||
if (ops[i].op != VT_CLOSEPATH) {
|
||||
fprintf(stderr, "Ring does not end with closepath (ends with %d)\n", ops[i].op);
|
||||
if (!force) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int outer = 0;
|
||||
@ -280,6 +306,13 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
|
||||
int state = 0;
|
||||
for (size_t i = 0; i < rings.size(); i++) {
|
||||
if (i == 0 && areas[i] < 0) {
|
||||
fprintf(stderr, "Polygon begins with an inner ring\n");
|
||||
if (!force) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (areas[i] >= 0) {
|
||||
if (state != 0) {
|
||||
// new multipolygon
|
||||
@ -330,7 +363,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
|
||||
printf("] }\n");
|
||||
}
|
||||
|
||||
void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
void decode(char *fname, int z, unsigned x, unsigned y, std::set<std::string> const &to_decode) {
|
||||
sqlite3 *db;
|
||||
int oz = z;
|
||||
unsigned ox = x, oy = y;
|
||||
@ -345,7 +378,7 @@ void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
if (strcmp(map, "SQLite format 3") != 0) {
|
||||
if (z >= 0) {
|
||||
std::string s = std::string(map, st.st_size);
|
||||
handle(s, z, x, y, 1);
|
||||
handle(s, z, x, y, 1, to_decode);
|
||||
munmap(map, st.st_size);
|
||||
return;
|
||||
} else {
|
||||
@ -396,13 +429,16 @@ void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
|
||||
sqlite3_finalize(stmt2);
|
||||
|
||||
const char *sql = "SELECT tile_data, zoom_level, tile_column, tile_row from tiles order by zoom_level, tile_column, tile_row;";
|
||||
const char *sql = "SELECT tile_data, zoom_level, tile_column, tile_row from tiles where zoom_level between ? and ? order by zoom_level, tile_column, tile_row;";
|
||||
sqlite3_stmt *stmt;
|
||||
if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) {
|
||||
fprintf(stderr, "%s: select failed: %s\n", fname, sqlite3_errmsg(db));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
sqlite3_bind_int(stmt, 1, minzoom);
|
||||
sqlite3_bind_int(stmt, 2, maxzoom);
|
||||
|
||||
printf("\n}, \"features\": [\n");
|
||||
|
||||
within = 0;
|
||||
@ -419,7 +455,7 @@ void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
ty = (1LL << tz) - 1 - ty;
|
||||
const char *s = (const char *) sqlite3_column_blob(stmt, 0);
|
||||
|
||||
handle(std::string(s, len), tz, tx, ty, 1);
|
||||
handle(std::string(s, len), tz, tx, ty, 1, to_decode);
|
||||
}
|
||||
|
||||
printf("] }\n");
|
||||
@ -447,7 +483,7 @@ void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
fprintf(stderr, "%s: Warning: using tile %d/%u/%u instead of %d/%u/%u\n", fname, z, x, y, oz, ox, oy);
|
||||
}
|
||||
|
||||
handle(std::string(s, len), z, x, y, 0);
|
||||
handle(std::string(s, len), z, x, y, 0, to_decode);
|
||||
handled = 1;
|
||||
}
|
||||
|
||||
@ -466,7 +502,7 @@ void decode(char *fname, int z, unsigned x, unsigned y) {
|
||||
}
|
||||
|
||||
void usage(char **argv) {
|
||||
fprintf(stderr, "Usage: %s [-t projection] file.mbtiles zoom x y\n", argv[0]);
|
||||
fprintf(stderr, "Usage: %s [-t projection] [-Z minzoom] [-z maxzoom] [-l layer ...] file.mbtiles [zoom x y]\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@ -474,22 +510,39 @@ int main(int argc, char **argv) {
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
int i;
|
||||
std::set<std::string> to_decode;
|
||||
|
||||
while ((i = getopt(argc, argv, "t:")) != -1) {
|
||||
while ((i = getopt(argc, argv, "t:Z:z:l:f")) != -1) {
|
||||
switch (i) {
|
||||
case 't':
|
||||
set_projection_or_exit(optarg);
|
||||
break;
|
||||
|
||||
case 'z':
|
||||
maxzoom = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'Z':
|
||||
minzoom = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
to_decode.insert(optarg);
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
force = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(argv);
|
||||
}
|
||||
}
|
||||
|
||||
if (argc == optind + 4) {
|
||||
decode(argv[optind], atoi(argv[optind + 1]), atoi(argv[optind + 2]), atoi(argv[optind + 3]));
|
||||
decode(argv[optind], atoi(argv[optind + 1]), atoi(argv[optind + 2]), atoi(argv[optind + 3]), to_decode);
|
||||
} else if (argc == optind + 1) {
|
||||
decode(argv[optind], -1, -1, -1);
|
||||
decode(argv[optind], -1, -1, -1, to_decode);
|
||||
} else {
|
||||
usage(argv);
|
||||
}
|
||||
|
169
geojson.cpp
169
geojson.cpp
@ -38,6 +38,7 @@ extern "C" {
|
||||
#include "options.hpp"
|
||||
#include "serial.hpp"
|
||||
#include "text.hpp"
|
||||
#include "mvt.hpp"
|
||||
|
||||
#define GEOM_POINT 0 /* array of positions */
|
||||
#define GEOM_MULTIPOINT 1 /* array of arrays of positions */
|
||||
@ -75,7 +76,7 @@ void json_context(json_object *j) {
|
||||
free(s); // stringify
|
||||
}
|
||||
|
||||
long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, int op, const char *fname, int line, int *initialized, unsigned *initial_x, unsigned *initial_y, json_object *feature) {
|
||||
long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, int op, const char *fname, int line, int *initialized, unsigned *initial_x, unsigned *initial_y, json_object *feature, long long &prev, long long &offset, bool &has_prev) {
|
||||
long long g = 0;
|
||||
|
||||
if (j == NULL || j->type != JSON_ARRAY) {
|
||||
@ -96,7 +97,7 @@ long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, i
|
||||
}
|
||||
}
|
||||
|
||||
g += parse_geometry(within, j->array[i], bbox, out, op, fname, line, initialized, initial_x, initial_y, feature);
|
||||
g += parse_geometry(within, j->array[i], bbox, out, op, fname, line, initialized, initial_x, initial_y, feature, prev, offset, has_prev);
|
||||
}
|
||||
} else {
|
||||
if (j->length >= 2 && j->array[0]->type == JSON_NUMBER && j->array[1]->type == JSON_NUMBER) {
|
||||
@ -116,6 +117,22 @@ long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, i
|
||||
}
|
||||
}
|
||||
|
||||
if (additional[A_DETECT_WRAPAROUND]) {
|
||||
x += offset;
|
||||
if (has_prev) {
|
||||
if (x - prev > (1LL << 31)) {
|
||||
offset -= 1LL << 32;
|
||||
x -= 1LL << 32;
|
||||
} else if (prev - x > (1LL << 31)) {
|
||||
offset += 1LL << 32;
|
||||
x += 1LL << 32;
|
||||
}
|
||||
}
|
||||
|
||||
has_prev = true;
|
||||
prev = x;
|
||||
}
|
||||
|
||||
if (x < bbox[0]) {
|
||||
bbox[0] = x;
|
||||
}
|
||||
@ -167,7 +184,7 @@ long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, i
|
||||
return g;
|
||||
}
|
||||
|
||||
int serialize_geometry(json_object *geometry, json_object *properties, json_object *id, const char *reading, int line, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, const char *fname, int basezoom, int layer, double droprate, long long *file_bbox, json_object *tippecanoe, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, json_object *feature, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma) {
|
||||
int serialize_geometry(json_object *geometry, json_object *properties, json_object *id, const char *reading, int line, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, const char *fname, int basezoom, int layer, double droprate, long long *file_bbox, json_object *tippecanoe, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, json_object *feature, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma, std::map<std::string, int> const *attribute_types) {
|
||||
json_object *geometry_type = json_hash_get(geometry, "type");
|
||||
if (geometry_type == NULL) {
|
||||
static int warned = 0;
|
||||
@ -241,17 +258,32 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
||||
id_value = strtoull(id->string, &err, 10);
|
||||
|
||||
if (err != NULL && *err != '\0') {
|
||||
fprintf(stderr, "Warning: Can't represent non-integer feature ID %s\n", id->string);
|
||||
static bool warned_frac = false;
|
||||
|
||||
if (!warned_frac) {
|
||||
fprintf(stderr, "Warning: Can't represent non-integer feature ID %s\n", id->string);
|
||||
warned_frac = true;
|
||||
}
|
||||
} else {
|
||||
has_id = true;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Warning: Can't represent negative feature ID %s\n", id->string);
|
||||
static bool warned_neg = false;
|
||||
|
||||
if (!warned_neg) {
|
||||
fprintf(stderr, "Warning: Can't represent negative feature ID %s\n", id->string);
|
||||
warned_neg = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
char *s = json_stringify(id);
|
||||
fprintf(stderr, "Warning: Can't represent non-numeric feature ID %s\n", s);
|
||||
free(s); // stringify
|
||||
static bool warned_nan = false;
|
||||
|
||||
if (!warned_nan) {
|
||||
char *s = json_stringify(id);
|
||||
fprintf(stderr, "Warning: Can't represent non-numeric feature ID %s\n", s);
|
||||
free(s); // stringify
|
||||
warned_nan = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,32 +333,79 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
||||
|
||||
metakey[m] = properties->keys[i]->string;
|
||||
|
||||
if (properties->values[i] != NULL && properties->values[i]->type == JSON_STRING) {
|
||||
tas.type = metatype[m] = VT_STRING;
|
||||
metaval[m] = std::string(properties->values[i]->string);
|
||||
std::string err = check_utf8(metaval[m]);
|
||||
if (err != "") {
|
||||
fprintf(stderr, "%s:%d: %s\n", reading, line, err.c_str());
|
||||
json_context(feature);
|
||||
exit(EXIT_FAILURE);
|
||||
if (properties->values[i] != NULL) {
|
||||
int vt = properties->values[i]->type;
|
||||
std::string val;
|
||||
|
||||
if (vt == JSON_STRING || vt == JSON_NUMBER) {
|
||||
val = properties->values[i]->string;
|
||||
} else if (vt == JSON_TRUE) {
|
||||
val = "true";
|
||||
} else if (vt == JSON_FALSE) {
|
||||
val = "false";
|
||||
} else if (vt == JSON_NULL) {
|
||||
val = "null";
|
||||
} else {
|
||||
const char *v = json_stringify(properties->values[i]);
|
||||
val = std::string(v);
|
||||
free((void *) v); // stringify
|
||||
}
|
||||
|
||||
auto a = (*attribute_types).find(properties->keys[i]->string);
|
||||
if (a != attribute_types->end()) {
|
||||
if (a->second == mvt_string) {
|
||||
vt = JSON_STRING;
|
||||
} else if (a->second == mvt_float) {
|
||||
vt = JSON_NUMBER;
|
||||
} else if (a->second == mvt_int) {
|
||||
vt = JSON_NUMBER;
|
||||
|
||||
for (size_t ii = 0; ii < val.size(); ii++) {
|
||||
char c = val[ii];
|
||||
if (c < '0' || c > '9') {
|
||||
val = std::to_string(round(atof(val.c_str())));
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (a->second == mvt_bool) {
|
||||
if (val == "false" || val == "0" || val == "null" || val.size() == 0) {
|
||||
vt = JSON_FALSE;
|
||||
val = "false";
|
||||
} else {
|
||||
vt = JSON_TRUE;
|
||||
val = "true";
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Can't happen: attribute type %d\n", a->second);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (vt == JSON_STRING) {
|
||||
tas.type = metatype[m] = mvt_string;
|
||||
metaval[m] = val;
|
||||
std::string err = check_utf8(metaval[m]);
|
||||
if (err != "") {
|
||||
fprintf(stderr, "%s:%d: %s\n", reading, line, err.c_str());
|
||||
json_context(feature);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
m++;
|
||||
} else if (vt == JSON_NUMBER) {
|
||||
tas.type = metatype[m] = mvt_double;
|
||||
metaval[m] = val;
|
||||
m++;
|
||||
} else if (vt == JSON_TRUE || vt == JSON_FALSE) {
|
||||
tas.type = metatype[m] = mvt_bool;
|
||||
metaval[m] = val;
|
||||
m++;
|
||||
} else if (vt == JSON_NULL) {
|
||||
;
|
||||
} else {
|
||||
tas.type = metatype[m] = mvt_string;
|
||||
metaval[m] = val;
|
||||
m++;
|
||||
}
|
||||
m++;
|
||||
} else if (properties->values[i] != NULL && properties->values[i]->type == JSON_NUMBER) {
|
||||
tas.type = metatype[m] = VT_NUMBER;
|
||||
metaval[m] = std::string(properties->values[i]->string);
|
||||
m++;
|
||||
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_TRUE || properties->values[i]->type == JSON_FALSE)) {
|
||||
tas.type = metatype[m] = VT_BOOLEAN;
|
||||
metaval[m] = std::string(properties->values[i]->type == JSON_TRUE ? "true" : "false");
|
||||
m++;
|
||||
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_NULL)) {
|
||||
;
|
||||
} else {
|
||||
tas.type = metatype[m] = VT_STRING;
|
||||
const char *v = json_stringify(properties->values[i]);
|
||||
metaval[m] = std::string(v);
|
||||
free((void *) v); // stringify
|
||||
m++;
|
||||
}
|
||||
|
||||
if (tas.type >= 0) {
|
||||
@ -336,8 +415,12 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
||||
}
|
||||
}
|
||||
|
||||
bool has_prev = false;
|
||||
long long prev = 0;
|
||||
long long offset = 0;
|
||||
|
||||
drawvec dv;
|
||||
long long g = parse_geometry(t, coordinates, bbox, dv, VT_MOVETO, fname, line, initialized, initial_x, initial_y, feature);
|
||||
long long g = parse_geometry(t, coordinates, bbox, dv, VT_MOVETO, fname, line, initialized, initial_x, initial_y, feature, prev, offset, has_prev);
|
||||
if (mb_geometry[t] == VT_POLYGON) {
|
||||
dv = fix_polygon(dv);
|
||||
}
|
||||
@ -429,13 +512,13 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
||||
if (inline_meta) {
|
||||
sf.metapos = -1;
|
||||
for (size_t i = 0; i < m; i++) {
|
||||
sf.keys.push_back(addpool(poolfile, treefile, metakey[i], VT_STRING));
|
||||
sf.keys.push_back(addpool(poolfile, treefile, metakey[i], mvt_string));
|
||||
sf.values.push_back(addpool(poolfile, treefile, metaval[i].c_str(), metatype[i]));
|
||||
}
|
||||
} else {
|
||||
sf.metapos = *metapos;
|
||||
for (size_t i = 0; i < m; i++) {
|
||||
serialize_long_long(metafile, addpool(poolfile, treefile, metakey[i], VT_STRING), metapos, fname);
|
||||
serialize_long_long(metafile, addpool(poolfile, treefile, metakey[i], mvt_string), metapos, fname);
|
||||
serialize_long_long(metafile, addpool(poolfile, treefile, metaval[i].c_str(), metatype[i]), metapos, fname);
|
||||
}
|
||||
}
|
||||
@ -484,14 +567,15 @@ void check_crs(json_object *j, const char *reading) {
|
||||
json_object *name = json_hash_get(properties, "name");
|
||||
if (name->type == JSON_STRING) {
|
||||
if (strcmp(name->string, projection->alias) != 0) {
|
||||
fprintf(stderr, "%s: Warning: GeoJSON specified projection \"%s\", not \"%s\".\n", reading, name->string, projection->alias);
|
||||
fprintf(stderr, "%s: Warning: GeoJSON specified projection \"%s\", not the expected \"%s\".\n", reading, name->string, projection->alias);
|
||||
fprintf(stderr, "%s: If \"%s\" is not the expected projection, use -s to specify the right one.\n", reading, projection->alias);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma) {
|
||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma, std::map<std::string, int> const *attribute_types) {
|
||||
long long found_hashes = 0;
|
||||
long long found_features = 0;
|
||||
long long found_geometries = 0;
|
||||
@ -559,7 +643,7 @@ void parse_json(json_pull *jp, const char *reading, volatile long long *layer_se
|
||||
}
|
||||
found_geometries++;
|
||||
|
||||
serialize_geometry(j, NULL, NULL, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, NULL, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma);
|
||||
serialize_geometry(j, NULL, NULL, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, NULL, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma, attribute_types);
|
||||
json_free(j);
|
||||
continue;
|
||||
}
|
||||
@ -568,6 +652,7 @@ void parse_json(json_pull *jp, const char *reading, volatile long long *layer_se
|
||||
if (strcmp(type->string, "Feature") != 0) {
|
||||
if (strcmp(type->string, "FeatureCollection") == 0) {
|
||||
check_crs(j, reading);
|
||||
json_free(j);
|
||||
}
|
||||
|
||||
continue;
|
||||
@ -601,10 +686,10 @@ void parse_json(json_pull *jp, const char *reading, volatile long long *layer_se
|
||||
if (geometries != NULL) {
|
||||
size_t g;
|
||||
for (g = 0; g < geometries->length; g++) {
|
||||
serialize_geometry(geometries->array[g], properties, id, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, tippecanoe, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma);
|
||||
serialize_geometry(geometries->array[g], properties, id, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, tippecanoe, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma, attribute_types);
|
||||
}
|
||||
} else {
|
||||
serialize_geometry(geometry, properties, id, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, tippecanoe, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma);
|
||||
serialize_geometry(geometry, properties, id, reading, jp->line, layer_seq, progress_seq, metapos, geompos, indexpos, exclude, include, exclude_all, metafile, geomfile, indexfile, poolfile, treefile, fname, basezoom, layer, droprate, file_bbox, tippecanoe, segment, initialized, initial_x, initial_y, readers, maxzoom, j, layermap, layername, uses_gamma, attribute_types);
|
||||
}
|
||||
|
||||
json_free(j);
|
||||
@ -616,7 +701,7 @@ void parse_json(json_pull *jp, const char *reading, volatile long long *layer_se
|
||||
void *run_parse_json(void *v) {
|
||||
struct parse_json_args *pja = (struct parse_json_args *) v;
|
||||
|
||||
parse_json(pja->jp, pja->reading, pja->layer_seq, pja->progress_seq, pja->metapos, pja->geompos, pja->indexpos, pja->exclude, pja->include, pja->exclude_all, pja->metafile, pja->geomfile, pja->indexfile, pja->poolfile, pja->treefile, pja->fname, pja->basezoom, pja->layer, pja->droprate, pja->file_bbox, pja->segment, pja->initialized, pja->initial_x, pja->initial_y, pja->readers, pja->maxzoom, pja->layermap, *pja->layername, pja->uses_gamma);
|
||||
parse_json(pja->jp, pja->reading, pja->layer_seq, pja->progress_seq, pja->metapos, pja->geompos, pja->indexpos, pja->exclude, pja->include, pja->exclude_all, pja->metafile, pja->geomfile, pja->indexfile, pja->poolfile, pja->treefile, pja->fname, pja->basezoom, pja->layer, pja->droprate, pja->file_bbox, pja->segment, pja->initialized, pja->initial_x, pja->initial_y, pja->readers, pja->maxzoom, pja->layermap, *pja->layername, pja->uses_gamma, pja->attribute_types);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -28,10 +28,11 @@ struct parse_json_args {
|
||||
std::map<std::string, layermap_entry> *layermap;
|
||||
std::string *layername;
|
||||
bool uses_gamma;
|
||||
std::map<std::string, int> const *attribute_types;
|
||||
};
|
||||
|
||||
struct json_pull *json_begin_map(char *map, long long len);
|
||||
void json_end_map(struct json_pull *jp);
|
||||
|
||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma);
|
||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, int maxzoom, std::map<std::string, layermap_entry> *layermap, std::string layername, bool uses_gamma, std::map<std::string, int> const *attribute_types);
|
||||
void *run_parse_json(void *v);
|
||||
|
85
geometry.cpp
85
geometry.cpp
@ -9,9 +9,11 @@
|
||||
#include <cmath>
|
||||
#include <limits.h>
|
||||
#include <sqlite3.h>
|
||||
#include <mapbox/geometry.hpp>
|
||||
#include <mapbox/geometry/point.hpp>
|
||||
#include <mapbox/geometry/multi_polygon.hpp>
|
||||
#include <mapbox/geometry/wagyu/wagyu.hpp>
|
||||
#include <mapbox/geometry/wagyu/quick_clip.hpp>
|
||||
#include <mapbox/geometry/snap_rounding.hpp>
|
||||
#include "geometry.hpp"
|
||||
#include "projection.hpp"
|
||||
#include "serial.hpp"
|
||||
@ -165,6 +167,27 @@ double get_area(drawvec &geom, size_t i, size_t j) {
|
||||
return area;
|
||||
}
|
||||
|
||||
double get_mp_area(drawvec &geom) {
|
||||
double ret = 0;
|
||||
|
||||
for (size_t i = 0; i < geom.size(); i++) {
|
||||
if (geom[i].op == VT_MOVETO) {
|
||||
size_t j;
|
||||
|
||||
for (j = i + 1; j < geom.size(); j++) {
|
||||
if (geom[j].op != VT_LINETO) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ret += get_area(geom, i, j);
|
||||
i = j - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void decode_clipped(mapbox::geometry::multi_polygon<long long> &t, drawvec &out) {
|
||||
out.clear();
|
||||
|
||||
@ -322,29 +345,41 @@ static int pnpoly(drawvec &vert, size_t start, size_t nvert, long long testx, lo
|
||||
}
|
||||
|
||||
void check_polygon(drawvec &geom, drawvec &before) {
|
||||
for (size_t i = 0; i + 1 < geom.size(); i++) {
|
||||
for (size_t j = i + 1; j + 1 < geom.size(); j++) {
|
||||
if (geom[i + 1].op == VT_LINETO && geom[j + 1].op == VT_LINETO) {
|
||||
double s1_x = geom[i + 1].x - geom[i + 0].x;
|
||||
double s1_y = geom[i + 1].y - geom[i + 0].y;
|
||||
double s2_x = geom[j + 1].x - geom[j + 0].x;
|
||||
double s2_y = geom[j + 1].y - geom[j + 0].y;
|
||||
geom = remove_noop(geom, VT_POLYGON, 0);
|
||||
|
||||
double s, t;
|
||||
s = (-s1_y * (geom[i + 0].x - geom[j + 0].x) + s1_x * (geom[i + 0].y - geom[j + 0].y)) / (-s2_x * s1_y + s1_x * s2_y);
|
||||
t = (s2_x * (geom[i + 0].y - geom[j + 0].y) - s2_y * (geom[i + 0].x - geom[j + 0].x)) / (-s2_x * s1_y + s1_x * s2_y);
|
||||
|
||||
if (t > 0 && t < 1 && s > 0 && s < 1) {
|
||||
printf("Internal error: self-intersecting polygon. %lld,%lld to %lld,%lld intersects %lld,%lld to %lld,%lld\n",
|
||||
geom[i + 0].x, geom[i + 0].y,
|
||||
geom[i + 1].x, geom[i + 1].y,
|
||||
geom[j + 0].x, geom[j + 0].y,
|
||||
geom[j + 1].x, geom[j + 1].y);
|
||||
mapbox::geometry::multi_polygon<long long> mp;
|
||||
for (size_t i = 0; i < geom.size(); i++) {
|
||||
if (geom[i].op == VT_MOVETO) {
|
||||
size_t j;
|
||||
for (j = i + 1; j < geom.size(); j++) {
|
||||
if (geom[j].op != VT_LINETO) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j >= i + 4) {
|
||||
mapbox::geometry::linear_ring<long long> lr;
|
||||
|
||||
for (size_t k = i; k < j; k++) {
|
||||
lr.push_back(mapbox::geometry::point<long long>(geom[k].x, geom[k].y));
|
||||
}
|
||||
|
||||
if (lr.size() >= 3) {
|
||||
mapbox::geometry::polygon<long long> p;
|
||||
p.push_back(lr);
|
||||
mp.push_back(p);
|
||||
}
|
||||
}
|
||||
|
||||
i = j - 1;
|
||||
}
|
||||
}
|
||||
|
||||
mapbox::geometry::multi_polygon<long long> mp2 = mapbox::geometry::snap_round(mp, true, true);
|
||||
if (mp != mp2) {
|
||||
fprintf(stderr, "Internal error: self-intersecting polygon\n");
|
||||
}
|
||||
|
||||
size_t outer_start = -1;
|
||||
size_t outer_len = 0;
|
||||
|
||||
@ -445,19 +480,19 @@ drawvec simple_clip_poly(drawvec &geom, long long minx, long long miny, long lon
|
||||
ring.push_back(mapbox::geometry::point<long long>(geom[k].x, geom[k].y));
|
||||
}
|
||||
|
||||
optional_linear_ring<long long> lr = mapbox::geometry::wagyu::quick_clip::quick_lr_clip(ring, bbox);
|
||||
mapbox::geometry::linear_ring<long long> lr = mapbox::geometry::wagyu::quick_clip::quick_lr_clip(ring, bbox);
|
||||
|
||||
if (lr) {
|
||||
for (size_t k = 0; k < lr->size(); k++) {
|
||||
if (lr.size() > 0) {
|
||||
for (size_t k = 0; k < lr.size(); k++) {
|
||||
if (k == 0) {
|
||||
out.push_back(draw(VT_MOVETO, (*lr)[k].x, (*lr)[k].y));
|
||||
out.push_back(draw(VT_MOVETO, lr[k].x, lr[k].y));
|
||||
} else {
|
||||
out.push_back(draw(VT_LINETO, (*lr)[k].x, (*lr)[k].y));
|
||||
out.push_back(draw(VT_LINETO, lr[k].x, lr[k].y));
|
||||
}
|
||||
}
|
||||
|
||||
if (lr->size() > 0 && (*lr)[0] != (*lr)[lr->size() - 1]) {
|
||||
out.push_back(draw(VT_LINETO, (*lr)[0].x, (*lr)[0].y));
|
||||
if (lr.size() > 0 && lr[0] != lr[lr.size() - 1]) {
|
||||
out.push_back(draw(VT_LINETO, lr[0].x, lr[0].y));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,10 +7,6 @@
|
||||
#define VT_LINETO 2
|
||||
#define VT_CLOSEPATH 7
|
||||
|
||||
#define VT_STRING 1
|
||||
#define VT_NUMBER 2
|
||||
#define VT_BOOLEAN 7
|
||||
|
||||
// The bitfield is to make sizeof(draw) be 16 instead of 24
|
||||
// at the cost, apparently, of a 0.7% increase in running time
|
||||
// for packing and unpacking.
|
||||
@ -71,3 +67,4 @@ drawvec fix_polygon(drawvec &geom);
|
||||
std::vector<drawvec> chop_polygon(std::vector<drawvec> &geoms);
|
||||
void check_polygon(drawvec &geom, drawvec &before);
|
||||
double get_area(drawvec &geom, size_t i, size_t j);
|
||||
double get_mp_area(drawvec &geom);
|
||||
|
@ -295,7 +295,7 @@ again:
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} while (c == ' ' || c == '\t' || c == '\r' || c == '\n');
|
||||
} while (c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == 0x1E);
|
||||
|
||||
/////////////////////////// Arrays
|
||||
|
||||
|
478
main.cpp
478
main.cpp
@ -20,6 +20,7 @@
|
||||
#include <sys/resource.h>
|
||||
#include <pthread.h>
|
||||
#include <getopt.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <set>
|
||||
@ -50,6 +51,7 @@ extern "C" {
|
||||
#include "geometry.hpp"
|
||||
#include "serial.hpp"
|
||||
#include "options.hpp"
|
||||
#include "mvt.hpp"
|
||||
|
||||
static int low_detail = 12;
|
||||
static int full_detail = -1;
|
||||
@ -117,7 +119,14 @@ void checkdisk(struct reader *r, int nreader) {
|
||||
};
|
||||
|
||||
void init_cpus() {
|
||||
CPUS = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
const char *TIPPECANOE_MAX_THREADS = getenv("TIPPECANOE_MAX_THREADS");
|
||||
|
||||
if (TIPPECANOE_MAX_THREADS != NULL) {
|
||||
CPUS = atoi(TIPPECANOE_MAX_THREADS);
|
||||
} else {
|
||||
CPUS = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
}
|
||||
|
||||
if (CPUS < 1) {
|
||||
CPUS = 1;
|
||||
}
|
||||
@ -363,7 +372,7 @@ void *run_sort(void *v) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma) {
|
||||
void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map<std::string, int> const *attribute_types, int separator) {
|
||||
long long segs[CPUS + 1];
|
||||
segs[0] = 0;
|
||||
segs[CPUS] = len;
|
||||
@ -371,7 +380,7 @@ void do_read_parallel(char *map, long long len, long long initial_offset, const
|
||||
for (size_t i = 1; i < CPUS; i++) {
|
||||
segs[i] = len * i / CPUS;
|
||||
|
||||
while (segs[i] < len && map[segs[i]] != '\n') {
|
||||
while (segs[i] < len && map[segs[i]] != separator) {
|
||||
segs[i]++;
|
||||
}
|
||||
}
|
||||
@ -409,7 +418,7 @@ void do_read_parallel(char *map, long long len, long long initial_offset, const
|
||||
pja[i].treefile = reader[i].treefile;
|
||||
pja[i].fname = fname;
|
||||
pja[i].basezoom = basezoom;
|
||||
pja[i].layer = source < nlayers ? source : 0;
|
||||
pja[i].layer = source;
|
||||
pja[i].droprate = droprate;
|
||||
pja[i].file_bbox = reader[i].file_bbox;
|
||||
pja[i].segment = i;
|
||||
@ -421,6 +430,7 @@ void do_read_parallel(char *map, long long len, long long initial_offset, const
|
||||
pja[i].layermap = &(*layermaps)[i];
|
||||
pja[i].layername = &layername;
|
||||
pja[i].uses_gamma = uses_gamma;
|
||||
pja[i].attribute_types = attribute_types;
|
||||
|
||||
if (pthread_create(&pthreads[i], NULL, run_parse_json, &pja[i]) != 0) {
|
||||
perror("pthread_create");
|
||||
@ -445,6 +455,7 @@ struct read_parallel_arg {
|
||||
long long offset;
|
||||
long long len;
|
||||
volatile int *is_parsing;
|
||||
int separator;
|
||||
|
||||
const char *reading;
|
||||
struct reader *reader;
|
||||
@ -464,6 +475,7 @@ struct read_parallel_arg {
|
||||
unsigned *initial_y;
|
||||
std::string layername;
|
||||
bool uses_gamma;
|
||||
std::map<std::string, int> const *attribute_types;
|
||||
};
|
||||
|
||||
void *run_read_parallel(void *v) {
|
||||
@ -485,7 +497,7 @@ void *run_read_parallel(void *v) {
|
||||
}
|
||||
madvise(map, rpa->len, MADV_RANDOM); // sequential, but from several pointers at once
|
||||
|
||||
do_read_parallel(map, rpa->len, rpa->offset, rpa->reading, rpa->reader, rpa->progress_seq, rpa->exclude, rpa->include, rpa->exclude_all, rpa->fname, rpa->basezoom, rpa->source, rpa->nlayers, rpa->layermaps, rpa->droprate, rpa->initialized, rpa->initial_x, rpa->initial_y, rpa->maxzoom, rpa->layername, rpa->uses_gamma);
|
||||
do_read_parallel(map, rpa->len, rpa->offset, rpa->reading, rpa->reader, rpa->progress_seq, rpa->exclude, rpa->include, rpa->exclude_all, rpa->fname, rpa->basezoom, rpa->source, rpa->nlayers, rpa->layermaps, rpa->droprate, rpa->initialized, rpa->initial_x, rpa->initial_y, rpa->maxzoom, rpa->layername, rpa->uses_gamma, rpa->attribute_types, rpa->separator);
|
||||
|
||||
madvise(map, rpa->len, MADV_DONTNEED);
|
||||
if (munmap(map, rpa->len) != 0) {
|
||||
@ -502,7 +514,7 @@ void *run_read_parallel(void *v) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma) {
|
||||
void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map<std::string, int> const *attribute_types, int separator) {
|
||||
// This has to kick off an intermediate thread to start the parser threads,
|
||||
// so the main thread can get back to reading the next input stage while
|
||||
// the intermediate thread waits for the completion of the parser threads.
|
||||
@ -520,6 +532,7 @@ void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile i
|
||||
rpa->offset = offset;
|
||||
rpa->len = len;
|
||||
rpa->is_parsing = is_parsing;
|
||||
rpa->separator = separator;
|
||||
|
||||
rpa->reading = reading;
|
||||
rpa->reader = reader;
|
||||
@ -539,6 +552,7 @@ void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile i
|
||||
rpa->maxzoom = maxzoom;
|
||||
rpa->layername = layername;
|
||||
rpa->uses_gamma = uses_gamma;
|
||||
rpa->attribute_types = attribute_types;
|
||||
|
||||
if (pthread_create(parallel_parser, NULL, run_read_parallel, rpa) != 0) {
|
||||
perror("pthread_create");
|
||||
@ -708,6 +722,9 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split
|
||||
unit = max_unit;
|
||||
}
|
||||
unit = ((unit + page - 1) / page) * page;
|
||||
if (unit < page) {
|
||||
unit = page;
|
||||
}
|
||||
|
||||
size_t nmerges = (indexpos + unit - 1) / unit;
|
||||
struct mergelist merges[nmerges];
|
||||
@ -994,7 +1011,7 @@ void choose_first_zoom(long long *file_bbox, struct reader *reader, unsigned *iz
|
||||
}
|
||||
}
|
||||
|
||||
int read_input(std::vector<source> &sources, char *fname, const char *layername, int maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox) {
|
||||
int read_input(std::vector<source> &sources, char *fname, int &maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, const char *outdir, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, const char *description, bool guess_maxzoom, std::map<std::string, int> const *attribute_types) {
|
||||
int ret = EXIT_SUCCESS;
|
||||
|
||||
struct reader reader[CPUS];
|
||||
@ -1101,26 +1118,12 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
initialized[i] = initial_x[i] = initial_y[i] = 0;
|
||||
}
|
||||
|
||||
size_t nlayers;
|
||||
if (layername != NULL) {
|
||||
nlayers = 1;
|
||||
} else {
|
||||
nlayers = sources.size();
|
||||
if (nlayers == 0) {
|
||||
nlayers = 1;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::string> layernames;
|
||||
size_t nlayers = sources.size();
|
||||
for (size_t l = 0; l < nlayers; l++) {
|
||||
if (layername != NULL) {
|
||||
layernames.push_back(std::string(layername));
|
||||
} else {
|
||||
if (sources[l].layer.size() == 0) {
|
||||
const char *src;
|
||||
if (sources.size() < 1) {
|
||||
if (sources[l].file.size() == 0) {
|
||||
src = fname;
|
||||
} else if (sources[l].layer.size() != 0) {
|
||||
src = sources[l].layer.c_str();
|
||||
} else {
|
||||
src = sources[l].file.c_str();
|
||||
}
|
||||
@ -1152,7 +1155,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
out.append(trunc, p, 1);
|
||||
}
|
||||
}
|
||||
layernames.push_back(out);
|
||||
sources[l].layer = out;
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "For layer %d, using name \"%s\"\n", (int) l, out.c_str());
|
||||
@ -1162,25 +1165,21 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
|
||||
std::map<std::string, layermap_entry> layermap;
|
||||
for (size_t l = 0; l < nlayers; l++) {
|
||||
layermap.insert(std::pair<std::string, layermap_entry>(layernames[l], layermap_entry(l)));
|
||||
layermap.insert(std::pair<std::string, layermap_entry>(sources[l].layer, layermap_entry(l)));
|
||||
}
|
||||
std::vector<std::map<std::string, layermap_entry> > layermaps;
|
||||
for (size_t l = 0; l < CPUS; l++) {
|
||||
layermaps.push_back(layermap);
|
||||
}
|
||||
|
||||
size_t nsources = sources.size();
|
||||
if (nsources == 0) {
|
||||
nsources = 1;
|
||||
}
|
||||
|
||||
long overall_offset = 0;
|
||||
|
||||
size_t nsources = sources.size();
|
||||
for (size_t source = 0; source < nsources; source++) {
|
||||
std::string reading;
|
||||
int fd;
|
||||
|
||||
if (source >= sources.size()) {
|
||||
if (sources[source].file.size() == 0) {
|
||||
reading = "standard input";
|
||||
fd = 0;
|
||||
} else {
|
||||
@ -1192,11 +1191,20 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
}
|
||||
|
||||
auto a = layermap.find(sources[source].layer);
|
||||
if (a == layermap.end()) {
|
||||
fprintf(stderr, "Internal error: couldn't find layer %s", sources[source].layer.c_str());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
size_t layer = a->second.id;
|
||||
|
||||
struct stat st;
|
||||
char *map = NULL;
|
||||
off_t off = 0;
|
||||
|
||||
if (read_parallel) {
|
||||
int read_parallel_this = read_parallel ? '\n' : 0;
|
||||
|
||||
if (1) {
|
||||
if (fstat(fd, &st) == 0) {
|
||||
off = lseek(fd, 0, SEEK_CUR);
|
||||
if (off >= 0) {
|
||||
@ -1209,19 +1217,36 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
}
|
||||
|
||||
if (map != NULL && map != MAP_FAILED) {
|
||||
do_read_parallel(map, st.st_size - off, overall_offset, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, source, nlayers, &layermaps, droprate, initialized, initial_x, initial_y, maxzoom, layernames[source < nlayers ? source : 0], uses_gamma);
|
||||
if (map != NULL && map != MAP_FAILED && st.st_size - off > 0) {
|
||||
if (map[0] == 0x1E) {
|
||||
read_parallel_this = 0x1E;
|
||||
}
|
||||
|
||||
if (!read_parallel_this) {
|
||||
// Not a GeoJSON text sequence, so unmap and read serially
|
||||
|
||||
if (munmap(map, st.st_size - off) != 0) {
|
||||
perror("munmap source file");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
map = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (map != NULL && map != MAP_FAILED && read_parallel_this) {
|
||||
do_read_parallel(map, st.st_size - off, overall_offset, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, &layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, uses_gamma, attribute_types, read_parallel_this);
|
||||
overall_offset += st.st_size - off;
|
||||
checkdisk(reader, CPUS);
|
||||
|
||||
if (munmap(map, st.st_size - off) != 0) {
|
||||
madvise(map, st.st_size, MADV_DONTNEED);
|
||||
perror("munmap source file");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
} else {
|
||||
FILE *fp = fdopen(fd, "r");
|
||||
if (fp == NULL) {
|
||||
perror(sources[source].file.c_str());
|
||||
perror(sources[layer].file.c_str());
|
||||
if (close(fd) != 0) {
|
||||
perror("close source file");
|
||||
exit(EXIT_FAILURE);
|
||||
@ -1229,7 +1254,15 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (read_parallel) {
|
||||
int c = getc(fp);
|
||||
if (c != EOF) {
|
||||
ungetc(c, fp);
|
||||
}
|
||||
if (c == 0x1E) {
|
||||
read_parallel_this = 0x1E;
|
||||
}
|
||||
|
||||
if (read_parallel_this) {
|
||||
// Serial reading of chunks that are then parsed in parallel
|
||||
|
||||
char readname[strlen(tmpdir) + strlen("/read.XXXXXXXX") + 1];
|
||||
@ -1263,7 +1296,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
fwrite_check(buf, sizeof(char), n, readfp, reading.c_str());
|
||||
ahead += n;
|
||||
|
||||
if (buf[n - 1] == '\n' && ahead > PARSE_MIN) {
|
||||
if (buf[n - 1] == read_parallel_this && ahead > PARSE_MIN) {
|
||||
// Don't let the streaming reader get too far ahead of the parsers.
|
||||
// If the buffered input gets huge, even if the parsers are still running,
|
||||
// wait for the parser thread instead of continuing to stream input.
|
||||
@ -1278,7 +1311,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
|
||||
fflush(readfp);
|
||||
start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, source, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, layernames[source < nlayers ? source : 0], gamma != 0);
|
||||
start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this);
|
||||
|
||||
initial_offset += ahead;
|
||||
overall_offset += ahead;
|
||||
@ -1315,7 +1348,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
fflush(readfp);
|
||||
|
||||
if (ahead > 0) {
|
||||
start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, source, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, layernames[source < nlayers ? source : 0], gamma != 0);
|
||||
start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), reader, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this);
|
||||
|
||||
if (parser_created) {
|
||||
if (pthread_join(parallel_parser, NULL) != 0) {
|
||||
@ -1332,7 +1365,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
|
||||
long long layer_seq = overall_offset;
|
||||
json_pull *jp = json_begin_file(fp);
|
||||
parse_json(jp, reading.c_str(), &layer_seq, &progress_seq, &reader[0].metapos, &reader[0].geompos, &reader[0].indexpos, exclude, include, exclude_all, reader[0].metafile, reader[0].geomfile, reader[0].indexfile, reader[0].poolfile, reader[0].treefile, fname, basezoom, source < nlayers ? source : 0, droprate, reader[0].file_bbox, 0, &initialized[0], &initial_x[0], &initial_y[0], reader, maxzoom, &layermaps[0], layernames[source < nlayers ? source : 0], uses_gamma);
|
||||
parse_json(jp, reading.c_str(), &layer_seq, &progress_seq, &reader[0].metapos, &reader[0].geompos, &reader[0].indexpos, exclude, include, exclude_all, reader[0].metafile, reader[0].geomfile, reader[0].indexfile, reader[0].poolfile, reader[0].treefile, fname, basezoom, layer, droprate, reader[0].file_bbox, 0, &initialized[0], &initial_x[0], &initial_y[0], reader, maxzoom, &layermaps[0], sources[layer].layer, uses_gamma, attribute_types);
|
||||
json_end(jp);
|
||||
overall_offset = layer_seq;
|
||||
checkdisk(reader, CPUS);
|
||||
@ -1554,15 +1587,75 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (basezoom < 0 || droprate < 0) {
|
||||
struct index *map = (struct index *) mmap(NULL, indexpos, PROT_READ, MAP_PRIVATE, indexfd, 0);
|
||||
if (map == MAP_FAILED) {
|
||||
perror("mmap index for basezoom");
|
||||
struct index *map = (struct index *) mmap(NULL, indexpos, PROT_READ, MAP_PRIVATE, indexfd, 0);
|
||||
if (map == MAP_FAILED) {
|
||||
perror("mmap index for basezoom");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
madvise(map, indexpos, MADV_SEQUENTIAL);
|
||||
madvise(map, indexpos, MADV_WILLNEED);
|
||||
long long indices = indexpos / sizeof(struct index);
|
||||
bool fix_dropping = false;
|
||||
|
||||
if (guess_maxzoom) {
|
||||
double sum = 0;
|
||||
size_t count = 0;
|
||||
|
||||
long long progress = -1;
|
||||
long long ip;
|
||||
for (ip = 1; ip < indices; ip++) {
|
||||
if (map[ip].index != map[ip - 1].index) {
|
||||
count++;
|
||||
sum += log(map[ip].index - map[ip - 1].index);
|
||||
}
|
||||
|
||||
long long nprogress = 100 * ip / indices;
|
||||
if (nprogress != progress) {
|
||||
progress = nprogress;
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Maxzoom: %lld%% \r", progress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 0) {
|
||||
// Geometric mean is appropriate because distances between features
|
||||
// are typically lognormally distributed
|
||||
double avg = exp(sum / count);
|
||||
|
||||
// Convert approximately from tile units to feet
|
||||
double dist_ft = sqrt(avg) / 33;
|
||||
double want = dist_ft / 250;
|
||||
|
||||
maxzoom = ceil(log(360 / (.00000274 * want)) / log(2) - full_detail);
|
||||
if (maxzoom < 0) {
|
||||
maxzoom = 0;
|
||||
}
|
||||
if (maxzoom > MAX_ZOOM) {
|
||||
maxzoom = MAX_ZOOM;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Choosing a maxzoom of -z%d for features about %d feet apart\n", maxzoom, (int) ceil(dist_ft));
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Can't guess maxzoom (-zg) without at least two distinct feature locations\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
madvise(map, indexpos, MADV_SEQUENTIAL);
|
||||
madvise(map, indexpos, MADV_WILLNEED);
|
||||
|
||||
if (maxzoom < minzoom) {
|
||||
fprintf(stderr, "Can't use %d for maxzoom because minzoom is %d\n", maxzoom, minzoom);
|
||||
maxzoom = minzoom;
|
||||
}
|
||||
|
||||
fix_dropping = true;
|
||||
|
||||
if (basezoom == -1) {
|
||||
basezoom = maxzoom;
|
||||
}
|
||||
}
|
||||
|
||||
if (basezoom < 0 || droprate < 0) {
|
||||
struct tile {
|
||||
unsigned x;
|
||||
unsigned y;
|
||||
@ -1582,7 +1675,6 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
|
||||
long long progress = -1;
|
||||
|
||||
long long indices = indexpos / sizeof(struct index);
|
||||
long long ip;
|
||||
for (ip = 0; ip < indices; ip++) {
|
||||
unsigned xx, yy;
|
||||
@ -1723,6 +1815,10 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
}
|
||||
|
||||
fix_dropping = true;
|
||||
}
|
||||
|
||||
if (fix_dropping) {
|
||||
// Fix up the minzooms for features, now that we really know the base zoom
|
||||
// and drop rate.
|
||||
|
||||
@ -1742,7 +1838,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
struct drop_state ds[maxzoom + 1];
|
||||
prep_drop_states(ds, maxzoom, basezoom, droprate);
|
||||
|
||||
for (ip = 0; ip < indices; ip++) {
|
||||
for (long long ip = 0; ip < indices; ip++) {
|
||||
if (ip > 0 && map[ip].start != map[ip - 1].end) {
|
||||
fprintf(stderr, "Mismatched index at %lld: %lld vs %lld\n", ip, map[ip].start, map[ip].end);
|
||||
}
|
||||
@ -1751,10 +1847,11 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
|
||||
munmap(geom, geomst.st_size);
|
||||
madvise(map, indexpos, MADV_DONTNEED);
|
||||
munmap(map, indexpos);
|
||||
}
|
||||
|
||||
madvise(map, indexpos, MADV_DONTNEED);
|
||||
munmap(map, indexpos);
|
||||
|
||||
if (close(indexfd) != 0) {
|
||||
perror("close sorted index");
|
||||
}
|
||||
@ -1779,7 +1876,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
}
|
||||
|
||||
unsigned midx = 0, midy = 0;
|
||||
int written = traverse_zooms(fd, size, meta, stringpool, &midx, &midy, maxzoom, minzoom, basezoom, outdb, droprate, buffer, fname, tmpdir, gamma, full_detail, low_detail, min_detail, meta_off, pool_off, initial_x, initial_y, simplification, layermaps);
|
||||
int written = traverse_zooms(fd, size, meta, stringpool, &midx, &midy, maxzoom, minzoom, basezoom, outdb, outdir, droprate, buffer, fname, tmpdir, gamma, full_detail, low_detail, min_detail, meta_off, pool_off, initial_x, initial_y, simplification, layermaps);
|
||||
|
||||
if (maxzoom != written) {
|
||||
fprintf(stderr, "\n\n\n*** NOTE TILES ONLY COMPLETE THROUGH ZOOM %d ***\n\n\n", written);
|
||||
@ -1833,7 +1930,7 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
if (additional[A_CALCULATE_FEATURE_DENSITY]) {
|
||||
for (auto ai = merged_lm.begin(); ai != merged_lm.end(); ++ai) {
|
||||
type_and_string tas;
|
||||
tas.type = VT_NUMBER;
|
||||
tas.type = mvt_double;
|
||||
tas.string = "tippecanoe_feature_density";
|
||||
ai->second.file_keys.insert(tas);
|
||||
}
|
||||
@ -1843,7 +1940,8 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
||||
ai->second.minzoom = minzoom;
|
||||
ai->second.maxzoom = maxzoom;
|
||||
}
|
||||
mbtiles_write_metadata(outdb, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm);
|
||||
|
||||
mbtiles_write_metadata(outdb, outdir, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm, true, description);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1858,6 +1956,33 @@ static bool has_name(struct option *long_options, int *pl) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void set_attribute_type(std::map<std::string, int> &attribute_types, const char *arg) {
|
||||
const char *s = strchr(arg, ':');
|
||||
if (s == NULL) {
|
||||
fprintf(stderr, "-T%s option must be in the form -Tname:type\n", arg);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
std::string name = std::string(arg, s - arg);
|
||||
std::string type = std::string(s + 1);
|
||||
int t = -1;
|
||||
|
||||
if (type == "int") {
|
||||
t = mvt_int;
|
||||
} else if (type == "float") {
|
||||
t = mvt_float;
|
||||
} else if (type == "string") {
|
||||
t = mvt_string;
|
||||
} else if (type == "bool") {
|
||||
t = mvt_bool;
|
||||
} else {
|
||||
fprintf(stderr, "Attribute type (%s) must be int, float, string, or bool\n", type.c_str());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
attribute_types.insert(std::pair<std::string, int>(name, t));
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
#ifdef MTRACE
|
||||
mtrace();
|
||||
@ -1870,8 +1995,11 @@ int main(int argc, char **argv) {
|
||||
int i;
|
||||
|
||||
char *name = NULL;
|
||||
char *layer = NULL;
|
||||
char *outdir = NULL;
|
||||
char *description = NULL;
|
||||
char *layername = NULL;
|
||||
char *out_mbtiles = NULL;
|
||||
char *out_directory = NULL;
|
||||
sqlite3 *outdb = NULL;
|
||||
int maxzoom = 14;
|
||||
int minzoom = 0;
|
||||
int basezoom = -1;
|
||||
@ -1884,8 +2012,10 @@ int main(int argc, char **argv) {
|
||||
const char *tmpdir = "/tmp";
|
||||
const char *attribution = NULL;
|
||||
std::vector<source> sources;
|
||||
bool guess_maxzoom = false;
|
||||
|
||||
std::set<std::string> exclude, include;
|
||||
std::map<std::string, int> attribute_types;
|
||||
int exclude_all = 0;
|
||||
int read_parallel = 0;
|
||||
int files_open_at_start;
|
||||
@ -1895,68 +2025,131 @@ int main(int argc, char **argv) {
|
||||
additional[i] = 0;
|
||||
}
|
||||
|
||||
static struct option long_options[] = {
|
||||
static struct option long_options_orig[] = {
|
||||
{"Output tileset", 0, 0, 0},
|
||||
{"output", required_argument, 0, 'o'},
|
||||
{"output-to-directory", required_argument, 0, 'e'},
|
||||
{"force", no_argument, 0, 'f'},
|
||||
{"allow-existing", no_argument, 0, 'F'},
|
||||
|
||||
{"Tileset description and attribution", 0, 0, 0},
|
||||
{"name", required_argument, 0, 'n'},
|
||||
{"layer", required_argument, 0, 'l'},
|
||||
{"attribution", required_argument, 0, 'A'},
|
||||
{"description", required_argument, 0, 'N'},
|
||||
|
||||
{"Input files and layer names", 0, 0, 0},
|
||||
{"layer", required_argument, 0, 'l'},
|
||||
{"named-layer", required_argument, 0, 'L'},
|
||||
|
||||
{"Parallel processing of input", 0, 0, 0},
|
||||
{"read-parallel", no_argument, 0, 'P'},
|
||||
|
||||
{"Projection of input", 0, 0, 0},
|
||||
{"projection", required_argument, 0, 's'},
|
||||
|
||||
{"Zoom levels", 0, 0, 0},
|
||||
{"maximum-zoom", required_argument, 0, 'z'},
|
||||
{"minimum-zoom", required_argument, 0, 'Z'},
|
||||
{"base-zoom", required_argument, 0, 'B'},
|
||||
|
||||
{"Tile resolution", 0, 0, 0},
|
||||
{"full-detail", required_argument, 0, 'd'},
|
||||
{"low-detail", required_argument, 0, 'D'},
|
||||
{"minimum-detail", required_argument, 0, 'm'},
|
||||
|
||||
{"Filtering feature attributes", 0, 0, 0},
|
||||
{"exclude", required_argument, 0, 'x'},
|
||||
{"include", required_argument, 0, 'y'},
|
||||
{"drop-rate", required_argument, 0, 'r'},
|
||||
{"buffer", required_argument, 0, 'b'},
|
||||
{"temporary-directory", required_argument, 0, 't'},
|
||||
{"gamma", required_argument, 0, 'g'},
|
||||
{"prevent", required_argument, 0, 'p'},
|
||||
{"additional", required_argument, 0, 'a'},
|
||||
{"projection", required_argument, 0, 's'},
|
||||
{"simplification", required_argument, 0, 'S'},
|
||||
{"maximum-tile-bytes", required_argument, 0, 'M'},
|
||||
|
||||
{"exclude-all", no_argument, 0, 'X'},
|
||||
{"force", no_argument, 0, 'f'},
|
||||
{"allow-existing", no_argument, 0, 'F'},
|
||||
{"quiet", no_argument, 0, 'q'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{"read-parallel", no_argument, 0, 'P'},
|
||||
{"attribute-type", required_argument, 0, 'T'},
|
||||
|
||||
{"coalesce", no_argument, &additional[A_COALESCE], 1},
|
||||
{"reverse", no_argument, &additional[A_REVERSE], 1},
|
||||
{"reorder", no_argument, &additional[A_REORDER], 1},
|
||||
{"Dropping a fixed fraction of features by zoom level", 0, 0, 0},
|
||||
{"drop-rate", required_argument, 0, 'r'},
|
||||
{"base-zoom", required_argument, 0, 'B'},
|
||||
{"drop-lines", no_argument, &additional[A_LINE_DROP], 1},
|
||||
{"check-polygons", no_argument, &additional[A_DEBUG_POLYGON], 1},
|
||||
{"drop-polygons", no_argument, &additional[A_POLYGON_DROP], 1},
|
||||
{"prefer-radix-sort", no_argument, &additional[A_PREFER_RADIX_SORT], 1},
|
||||
{"calculate-feature-density", no_argument, &additional[A_CALCULATE_FEATURE_DENSITY], 1},
|
||||
{"detect-shared-borders", no_argument, &additional[A_DETECT_SHARED_BORDERS], 1},
|
||||
{"increase-gamma-as-needed", no_argument, &additional[A_INCREASE_GAMMA_AS_NEEDED], 1},
|
||||
|
||||
{"Dropping a fraction of features to keep under tile size limits", 0, 0, 0},
|
||||
{"drop-densest-as-needed", no_argument, &additional[A_DROP_DENSEST_AS_NEEDED], 1},
|
||||
{"drop-fraction-as-needed", no_argument, &additional[A_DROP_FRACTION_AS_NEEDED], 1},
|
||||
{"drop-smallest-as-needed", no_argument, &additional[A_DROP_SMALLEST_AS_NEEDED], 1},
|
||||
{"grid-low-zooms", no_argument, &additional[A_GRID_LOW_ZOOMS], 1},
|
||||
{"force-feature-limit", no_argument, &prevent[P_DYNAMIC_DROP], 1},
|
||||
|
||||
{"Dropping tightly overlapping features", 0, 0, 0},
|
||||
{"gamma", required_argument, 0, 'g'},
|
||||
{"increase-gamma-as-needed", no_argument, &additional[A_INCREASE_GAMMA_AS_NEEDED], 1},
|
||||
|
||||
{"Line and polygon simplification", 0, 0, 0},
|
||||
{"simplification", required_argument, 0, 'S'},
|
||||
{"no-line-simplification", no_argument, &prevent[P_SIMPLIFY], 1},
|
||||
{"simplify-only-low-zooms", no_argument, &prevent[P_SIMPLIFY_LOW], 1},
|
||||
{"no-feature-limit", no_argument, &prevent[P_FEATURE_LIMIT], 1},
|
||||
{"no-tile-size-limit", no_argument, &prevent[P_KILOBYTE_LIMIT], 1},
|
||||
{"force-feature-limit", no_argument, &prevent[P_DYNAMIC_DROP], 1},
|
||||
{"preserve-input-order", no_argument, &prevent[P_INPUT_ORDER], 1},
|
||||
{"no-polygon-splitting", no_argument, &prevent[P_POLYGON_SPLIT], 1},
|
||||
{"no-tiny-polygon-reduction", no_argument, &prevent[P_TINY_POLYGON_REDUCTION], 1},
|
||||
|
||||
{"Attempts to improve shared polygon boundaries", 0, 0, 0},
|
||||
{"detect-shared-borders", no_argument, &additional[A_DETECT_SHARED_BORDERS], 1},
|
||||
{"grid-low-zooms", no_argument, &additional[A_GRID_LOW_ZOOMS], 1},
|
||||
|
||||
{"Controlling clipping to tile boundaries", 0, 0, 0},
|
||||
{"buffer", required_argument, 0, 'b'},
|
||||
{"no-clipping", no_argument, &prevent[P_CLIPPING], 1},
|
||||
{"no-duplication", no_argument, &prevent[P_DUPLICATION], 1},
|
||||
{"no-tiny-polygon-reduction", no_argument, &prevent[P_TINY_POLYGON_REDUCTION], 1},
|
||||
|
||||
{"Reordering features within each tile", 0, 0, 0},
|
||||
{"preserve-input-order", no_argument, &prevent[P_INPUT_ORDER], 1},
|
||||
{"reorder", no_argument, &additional[A_REORDER], 1},
|
||||
{"coalesce", no_argument, &additional[A_COALESCE], 1},
|
||||
{"reverse", no_argument, &additional[A_REVERSE], 1},
|
||||
|
||||
{"Adding calculated attributes", 0, 0, 0},
|
||||
{"calculate-feature-density", no_argument, &additional[A_CALCULATE_FEATURE_DENSITY], 1},
|
||||
|
||||
{"Trying to correct bad source geometry", 0, 0, 0},
|
||||
{"detect-longitude-wraparound", no_argument, &additional[A_DETECT_WRAPAROUND], 1},
|
||||
|
||||
{"Setting or disabling tile size limits", 0, 0, 0},
|
||||
{"maximum-tile-bytes", required_argument, 0, 'M'},
|
||||
{"no-feature-limit", no_argument, &prevent[P_FEATURE_LIMIT], 1},
|
||||
{"no-tile-size-limit", no_argument, &prevent[P_KILOBYTE_LIMIT], 1},
|
||||
{"no-tile-compression", no_argument, &prevent[P_TILE_COMPRESSION], 1},
|
||||
|
||||
{"Temporary storage", 0, 0, 0},
|
||||
{"temporary-directory", required_argument, 0, 't'},
|
||||
|
||||
{"Progress indicator", 0, 0, 0},
|
||||
{"quiet", no_argument, 0, 'q'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
|
||||
{"", 0, 0, 0},
|
||||
{"prevent", required_argument, 0, 'p'},
|
||||
{"additional", required_argument, 0, 'a'},
|
||||
{"check-polygons", no_argument, &additional[A_DEBUG_POLYGON], 1},
|
||||
{"no-polygon-splitting", no_argument, &prevent[P_POLYGON_SPLIT], 1},
|
||||
{"prefer-radix-sort", no_argument, &additional[A_PREFER_RADIX_SORT], 1},
|
||||
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
|
||||
static struct option long_options[sizeof(long_options_orig) / sizeof(long_options_orig[0])];
|
||||
static char getopt_str[sizeof(long_options_orig) / sizeof(long_options_orig[0]) * 2 + 1];
|
||||
|
||||
{
|
||||
size_t out = 0;
|
||||
size_t cout = 0;
|
||||
for (size_t lo = 0; long_options_orig[lo].name != NULL; lo++) {
|
||||
if (long_options_orig[lo].val != 0) {
|
||||
long_options[out++] = long_options_orig[lo];
|
||||
|
||||
if (long_options_orig[lo].val > ' ') {
|
||||
getopt_str[cout++] = long_options_orig[lo].val;
|
||||
|
||||
if (long_options_orig[lo].has_arg == required_argument) {
|
||||
getopt_str[cout++] = ':';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
long_options[out] = {0, 0, 0, 0};
|
||||
getopt_str[cout] = '\0';
|
||||
|
||||
for (size_t lo = 0; long_options[lo].name != NULL; lo++) {
|
||||
if (long_options[lo].flag != NULL) {
|
||||
if (*long_options[lo].flag != 0) {
|
||||
@ -1974,7 +2167,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
}
|
||||
|
||||
while ((i = getopt_long(argc, argv, "n:l:z:Z:B:d:D:m:o:x:y:r:b:t:g:p:a:XfFqvPL:A:s:S:M:", long_options, NULL)) != -1) {
|
||||
while ((i = getopt_long(argc, argv, getopt_str, long_options, NULL)) != -1) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
break;
|
||||
@ -1983,8 +2176,12 @@ int main(int argc, char **argv) {
|
||||
name = optarg;
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
description = optarg;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
layer = optarg;
|
||||
layername = optarg;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
@ -2004,7 +2201,12 @@ int main(int argc, char **argv) {
|
||||
} break;
|
||||
|
||||
case 'z':
|
||||
maxzoom = atoi(optarg);
|
||||
if (strcmp(optarg, "g") == 0) {
|
||||
maxzoom = MAX_ZOOM;
|
||||
guess_maxzoom = true;
|
||||
} else {
|
||||
maxzoom = atoi(optarg);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Z':
|
||||
@ -2047,7 +2249,11 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
outdir = optarg;
|
||||
out_mbtiles = optarg;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
out_directory = optarg;
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
@ -2157,33 +2363,42 @@ int main(int argc, char **argv) {
|
||||
max_tile_size = atoll(optarg);
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
set_attribute_type(attribute_types, optarg);
|
||||
break;
|
||||
|
||||
default: {
|
||||
int width = 7 + strlen(argv[0]);
|
||||
fprintf(stderr, "Unknown option -%c\n", i);
|
||||
fprintf(stderr, "Usage: %s", argv[0]);
|
||||
for (size_t lo = 0; long_options[lo].name != NULL; lo++) {
|
||||
if (width + strlen(long_options[lo].name) + 9 >= 80) {
|
||||
fprintf(stderr, "Usage: %s [options] [file.json ...]", argv[0]);
|
||||
for (size_t lo = 0; long_options_orig[lo].name != NULL && strlen(long_options_orig[lo].name) > 0; lo++) {
|
||||
if (long_options_orig[lo].val == 0) {
|
||||
fprintf(stderr, "\n %s\n ", long_options_orig[lo].name);
|
||||
width = 8;
|
||||
continue;
|
||||
}
|
||||
if (width + strlen(long_options_orig[lo].name) + 9 >= 80) {
|
||||
fprintf(stderr, "\n ");
|
||||
width = 8;
|
||||
}
|
||||
width += strlen(long_options[lo].name) + 9;
|
||||
if (strcmp(long_options[lo].name, "output") == 0) {
|
||||
fprintf(stderr, " --%s=output.mbtiles", long_options[lo].name);
|
||||
width += strlen(long_options_orig[lo].name) + 9;
|
||||
if (strcmp(long_options_orig[lo].name, "output") == 0) {
|
||||
fprintf(stderr, " --%s=output.mbtiles", long_options_orig[lo].name);
|
||||
width += 9;
|
||||
} else if (long_options[lo].has_arg) {
|
||||
fprintf(stderr, " [--%s=...]", long_options[lo].name);
|
||||
} else if (long_options_orig[lo].has_arg) {
|
||||
fprintf(stderr, " [--%s=...]", long_options_orig[lo].name);
|
||||
} else {
|
||||
fprintf(stderr, " [--%s]", long_options[lo].name);
|
||||
fprintf(stderr, " [--%s]", long_options_orig[lo].name);
|
||||
}
|
||||
}
|
||||
if (width + 16 >= 80) {
|
||||
fprintf(stderr, "\n ");
|
||||
width = 8;
|
||||
}
|
||||
fprintf(stderr, " [file.json ...]\n");
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
files_open_at_start = open("/dev/null", O_RDONLY);
|
||||
@ -2200,9 +2415,11 @@ int main(int argc, char **argv) {
|
||||
|
||||
// Need two checks: one for geometry representation, the other for
|
||||
// index traversal when guessing base zoom and drop rate
|
||||
if (maxzoom > 32 - full_detail) {
|
||||
maxzoom = 32 - full_detail;
|
||||
fprintf(stderr, "Highest supported zoom with detail %d is %d\n", full_detail, maxzoom);
|
||||
if (!guess_maxzoom) {
|
||||
if (maxzoom > 32 - full_detail) {
|
||||
maxzoom = 32 - full_detail;
|
||||
fprintf(stderr, "Highest supported zoom with detail %d is %d\n", full_detail, maxzoom);
|
||||
}
|
||||
}
|
||||
if (maxzoom > MAX_ZOOM) {
|
||||
maxzoom = MAX_ZOOM;
|
||||
@ -2215,13 +2432,17 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
if (basezoom == -1) {
|
||||
basezoom = maxzoom;
|
||||
if (!guess_maxzoom) {
|
||||
basezoom = maxzoom;
|
||||
}
|
||||
}
|
||||
|
||||
geometry_scale = 32 - (full_detail + maxzoom);
|
||||
if (geometry_scale < 0) {
|
||||
geometry_scale = 0;
|
||||
fprintf(stderr, "Full detail + maxzoom > 32, so you are asking for more detail than is available.\n");
|
||||
if (!guess_maxzoom) {
|
||||
fprintf(stderr, "Full detail + maxzoom > 32, so you are asking for more detail than is available.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if ((basezoom < 0 || droprate < 0) && (gamma < 0)) {
|
||||
@ -2231,16 +2452,24 @@ int main(int argc, char **argv) {
|
||||
fprintf(stderr, "Forcing -g0 since -B or -r is not known\n");
|
||||
}
|
||||
|
||||
if (outdir == NULL) {
|
||||
fprintf(stderr, "%s: must specify -o out.mbtiles\n", argv[0]);
|
||||
if (out_mbtiles == NULL && out_directory == NULL) {
|
||||
fprintf(stderr, "%s: must specify -o out.mbtiles or -e directory\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (force) {
|
||||
unlink(outdir);
|
||||
if (out_mbtiles != NULL && out_directory != NULL) {
|
||||
fprintf(stderr, "%s: Options -o and -e cannot be used together\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (out_mbtiles != NULL) {
|
||||
if (force) {
|
||||
unlink(out_mbtiles);
|
||||
}
|
||||
|
||||
outdb = mbtiles_open(out_mbtiles, argv, forcetable);
|
||||
}
|
||||
|
||||
sqlite3 *outdb = mbtiles_open(outdir, argv, forcetable);
|
||||
int ret = EXIT_SUCCESS;
|
||||
|
||||
for (i = optind; i < argc; i++) {
|
||||
@ -2250,11 +2479,26 @@ int main(int argc, char **argv) {
|
||||
sources.push_back(src);
|
||||
}
|
||||
|
||||
if (sources.size() == 0) {
|
||||
struct source src;
|
||||
src.layer = "";
|
||||
src.file = ""; // standard input
|
||||
sources.push_back(src);
|
||||
}
|
||||
|
||||
if (layername != NULL) {
|
||||
for (size_t a = 0; a < sources.size(); a++) {
|
||||
sources[a].layer = layername;
|
||||
}
|
||||
}
|
||||
|
||||
long long file_bbox[4] = {UINT_MAX, UINT_MAX, 0, 0};
|
||||
|
||||
ret = read_input(sources, name ? name : outdir, layer, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, &exclude, &include, exclude_all, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox);
|
||||
ret = read_input(sources, name ? name : out_mbtiles ? out_mbtiles : out_directory, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, out_directory, &exclude, &include, exclude_all, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox, description, guess_maxzoom, &attribute_types);
|
||||
|
||||
mbtiles_close(outdb, argv);
|
||||
if (outdb != NULL) {
|
||||
mbtiles_close(outdb, argv);
|
||||
}
|
||||
|
||||
#ifdef MTRACE
|
||||
muntrace();
|
||||
|
286
man/tippecanoe.1
286
man/tippecanoe.1
@ -49,145 +49,224 @@ You can concatenate multiple GeoJSON features or files together,
|
||||
and it will parse out the features and ignore whatever other objects
|
||||
it encounters.
|
||||
.SH Options
|
||||
.SS Naming
|
||||
.PP
|
||||
There are a lot of options. A lot of the time you won't want to use any of them
|
||||
other than \fB\fC\-o\fR \fIoutput\fP\fB\fC\&.mbtiles\fR to name the output file, and probably \fB\fC\-f\fR to
|
||||
delete the file that already exists with that name.
|
||||
.PP
|
||||
If you aren't sure what the right maxzoom is for your data, \fB\fC\-zg\fR will guess one for you
|
||||
based on the density of features.
|
||||
.PP
|
||||
If you are mapping point features, you will often want to use \fB\fC\-Bg\fR to automatically choose
|
||||
a base zoom level for dot dropping. If that doesn't work out for you, try
|
||||
\fB\fC\-r1 \-\-drop\-fraction\-as\-needed\fR to turn off the normal dot dropping and instead
|
||||
only drop features if the tiles get too big.
|
||||
.PP
|
||||
If you are mapping points or polygons, you will often want to use \fB\fC\-\-drop\-densest\-as\-needed\fR
|
||||
to drop some of them if necessary to make the low zoom levels work.
|
||||
.PP
|
||||
If your features have a lot of attributes, use \fB\fC\-y\fR to keep only the ones you really need.
|
||||
.PP
|
||||
If your input is formatted as newline\-delimited GeoJSON, use \fB\fC\-P\fR to make input parsing a lot faster.
|
||||
.SS Output tileset
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-l \fIname\fP or \-\-layer=\fIname\fP: Layer name (default "file" if source is file.json or output is file.mbtiles). If there are multiple input files
|
||||
specified, the files are all merged into the single named layer, even if they try to specify individual names with \-L.
|
||||
\fB\fC\-o\fR \fIfile\fP\fB\fC\&.mbtiles\fR or \fB\fC\-\-output=\fR\fIfile\fP\fB\fC\&.mbtiles\fR: Name the output file.
|
||||
.IP \(bu 2
|
||||
\-L \fIname\fP:\fIfile.json\fP or \-\-named\-layer=\fIname\fP:\fIfile.json\fP: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like \-L \fIname\fP:<(cat dir/*.json) to specify a layer name for the output of streamed input.
|
||||
\fB\fC\-e\fR \fIdirectory\fP or \fB\fC\-\-output\-to\-directory\fR=\fIdirectory\fP: Write tiles to the specified \fIdirectory\fP instead of to an mbtiles file.
|
||||
.IP \(bu 2
|
||||
\-n \fIname\fP or \-\-name=\fIname\fP: Human\-readable name for the tileset (default file.json)
|
||||
\fB\fC\-f\fR or \fB\fC\-\-force\fR: Delete the mbtiles file if it already exists instead of giving an error
|
||||
.IP \(bu 2
|
||||
\-A \fItext\fP or \-\-attribution=\fItext\fP: Attribution (HTML) to be shown with maps that use data from this tileset.
|
||||
\fB\fC\-F\fR or \fB\fC\-\-allow\-existing\fR: Proceed (without deleting existing data) if the metadata or tiles table already exists
|
||||
or if metadata fields can't be set. You probably don't want to use this.
|
||||
.RE
|
||||
.SS File control
|
||||
.SS Tileset description and attribution
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-o \fIfile\fP\&.mbtiles or \-\-output=\fIfile\fP\&.mbtiles: Name the output file.
|
||||
\fB\fC\-n\fR \fIname\fP or \fB\fC\-\-name=\fR\fIname\fP: Human\-readable name for the tileset (default file.json)
|
||||
.IP \(bu 2
|
||||
\-f or \-\-force: Delete the mbtiles file if it already exists instead of giving an error
|
||||
\fB\fC\-A\fR \fItext\fP or \fB\fC\-\-attribution=\fR\fItext\fP: Attribution (HTML) to be shown with maps that use data from this tileset.
|
||||
.IP \(bu 2
|
||||
\-F or \-\-allow\-existing: Proceed (without deleting existing data) if the metadata or tiles table already exists
|
||||
or if metadata fields can't be set
|
||||
\fB\fC\-N\fR \fIdescription\fP or \fB\fC\-\-description=\fR\fIdescription\fP: Description for the tileset (default file.mbtiles)
|
||||
.RE
|
||||
.SS Input files and layer names
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-t \fIdirectory\fP or \-\-temporary\-directory=\fIdirectory\fP: Put the temporary files in \fIdirectory\fP\&.
|
||||
If you don't specify, it will use \fB\fC/tmp\fR\&.
|
||||
\fIname\fP\fB\fC\&.json\fR or \fIname\fP\fB\fC\&.geojson\fR: Read the named GeoJSON input file into a layer called \fIname\fP\&.
|
||||
.IP \(bu 2
|
||||
\-P or \-\-read\-parallel: Use multiple threads to read different parts of each input file at once.
|
||||
\fB\fC\-l\fR \fIname\fP or \fB\fC\-\-layer=\fR\fIname\fP: Use the specified layer name instead of deriving a name from the input filename or output tileset. If there are multiple input files
|
||||
specified, the files are all merged into the single named layer, even if they try to specify individual names with \fB\fC\-L\fR\&.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-L\fR \fIname\fP\fB\fC:\fR\fIfile.json\fP or \fB\fC\-\-named\-layer=\fR\fIname\fP\fB\fC:\fR\fIfile.json\fP: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like \fB\fC\-L\fR \fIname\fP\fB\fC:<(cat dir/*.json)\fR to specify a layer name for the output of streamed input.
|
||||
.RE
|
||||
.SS Parallel processing of input
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-P\fR or \fB\fC\-\-read\-parallel\fR: Use multiple threads to read different parts of each input file at once.
|
||||
This will only work if the input is line\-delimited JSON with each Feature on its
|
||||
own line, because it knows nothing of the top\-level structure around the Features. Spurious "EOF" error
|
||||
messages may result otherwise.
|
||||
Performance will be better if the input is a named file that can be mapped into memory
|
||||
rather than a stream that can only be read sequentially.
|
||||
.RE
|
||||
.SS Zoom levels and resolution
|
||||
.PP
|
||||
If the input file begins with the RFC 8142 \[la]https://tools.ietf.org/html/rfc8142\[ra] record separator,
|
||||
parallel processing of input will be invoked automatically, splitting at record separators rather
|
||||
than at all newlines.
|
||||
.SS Projection of input
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-z \fIzoom\fP or \-\-maximum\-zoom=\fIzoom\fP: Maxzoom: the highest zoom level for which tiles are generated (default 14)
|
||||
\fB\fC\-s\fR \fIprojection\fP or \fB\fC\-\-projection=\fR\fIprojection\fP: Specify the projection of the input data. Currently supported are \fB\fCEPSG:4326\fR (WGS84, the default) and \fB\fCEPSG:3857\fR (Web Mercator). In general you should use WGS84 for your input files if at all possible.
|
||||
.RE
|
||||
.SS Zoom levels
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-Z \fIzoom\fP or \-\-minimum\-zoom=\fIzoom\fP: Minzoom: the lowest zoom level for which tiles are generated (default 0)
|
||||
\fB\fC\-z\fR \fIzoom\fP or \fB\fC\-\-maximum\-zoom=\fR\fIzoom\fP: Maxzoom: the highest zoom level for which tiles are generated (default 14)
|
||||
.IP \(bu 2
|
||||
\-B \fIzoom\fP or \-\-base\-zoom=\fIzoom\fP: Base zoom, the level at and above which all points are included in the tiles (default maxzoom).
|
||||
If you use \-Bg, it will guess a zoom level that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker\-width with \-Bg\fIwidth\fP to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or \-Bf\fInumber\fP to allow at most \fInumber\fP features in the densest tile.
|
||||
\fB\fC\-zg\fR or \fB\fC\-\-maximum\-zoom=g\fR: Guess what is probably a reasonable maxzoom based on the spacing of features.
|
||||
.IP \(bu 2
|
||||
\-d \fIdetail\fP or \-\-full\-detail=\fIdetail\fP: Detail at max zoom level (default 12, for tile resolution of 4096)
|
||||
\fB\fC\-Z\fR \fIzoom\fP or \fB\fC\-\-minimum\-zoom=\fR\fIzoom\fP: Minzoom: the lowest zoom level for which tiles are generated (default 0)
|
||||
.RE
|
||||
.SS Tile resolution
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-D \fIdetail\fP or \-\-low\-detail=\fIdetail\fP: Detail at lower zoom levels (default 12, for tile resolution of 4096)
|
||||
\fB\fC\-d\fR \fIdetail\fP or \fB\fC\-\-full\-detail=\fR\fIdetail\fP: Detail at max zoom level (default 12, for tile resolution of 4096)
|
||||
.IP \(bu 2
|
||||
\-m \fIdetail\fP or \-\-minimum\-detail=\fIdetail\fP: Minimum detail that it will try if tiles are too big at regular detail (default 7)
|
||||
\fB\fC\-D\fR \fIdetail\fP or \fB\fC\-\-low\-detail=\fR\fIdetail\fP: Detail at lower zoom levels (default 12, for tile resolution of 4096)
|
||||
.IP \(bu 2
|
||||
\-b \fIpixels\fP or \-\-buffer=\fIpixels\fP: Buffer size where features are duplicated from adjacent tiles. Units are "screen pixels"\-\-1/256th of the tile width or height. (default 5)
|
||||
.IP \(bu 2
|
||||
\-s \fIprojection\fP or \-\-projection=\fIprojection\fP: Specify the projection of the input data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
.IP \(bu 2
|
||||
\-M \fIbytes\fP or \-\-maximum\-tile\-bytes=\fIbytes\fP: Use the specified number of \fIbytes\fP as the maximum compressed tile size instead of 500K.
|
||||
\fB\fC\-m\fR \fIdetail\fP or \fB\fC\-\-minimum\-detail=\fR\fIdetail\fP: Minimum detail that it will try if tiles are too big at regular detail (default 7)
|
||||
.RE
|
||||
.PP
|
||||
All internal math is done in terms of a 32\-bit tile coordinate system, so 1/(2 of the size of Earth,
|
||||
or about 1cm, is the smallest distinguishable distance. If \fImaxzoom\fP + \fIdetail\fP > 32, no additional
|
||||
resolution is obtained than by using a smaller \fImaxzoom\fP or \fIdetail\fP\&.
|
||||
.SS Properties
|
||||
.SS Filtering feature attributes
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-x \fIname\fP or \-\-exclude=\fIname\fP: Exclude the named properties from all features
|
||||
\fB\fC\-x\fR \fIname\fP or \fB\fC\-\-exclude=\fR\fIname\fP: Exclude the named properties from all features
|
||||
.IP \(bu 2
|
||||
\-y \fIname\fP or \-\-include=\fIname\fP: Include the named properties in all features, excluding all those not explicitly named
|
||||
\fB\fC\-y\fR \fIname\fP or \fB\fC\-\-include=\fR\fIname\fP: Include the named properties in all features, excluding all those not explicitly named
|
||||
.IP \(bu 2
|
||||
\-X or \-\-exclude\-all: Exclude all properties and encode only geometries
|
||||
\fB\fC\-X\fR or \fB\fC\-\-exclude\-all\fR: Exclude all properties and encode only geometries
|
||||
.IP \(bu 2
|
||||
\fB\fC\-T\fR\fIattribute\fP\fB\fC:\fR\fItype\fP or \fB\fC\-\-attribute\-type=\fR\fIattribute\fP\fB\fC:\fR\fItype\fP: Coerce the named feature \fIattribute\fP to be of the specified \fItype\fP\&.
|
||||
The \fItype\fP may be \fB\fCstring\fR, \fB\fCfloat\fR, \fB\fCint\fR, or \fB\fCbool\fR\&.
|
||||
If the type is \fB\fCbool\fR, then original attributes of \fB\fC0\fR, \fB\fCfalse\fR, \fB\fCnull\fR, or the empty string become \fB\fCfalse\fR, and otherwise become \fB\fCtrue\fR\&.
|
||||
If the type is \fB\fCfloat\fR or \fB\fCint\fR and the original attribute was non\-numeric, it becomes \fB\fC0\fR\&.
|
||||
If the type is \fB\fCint\fR and the original attribute was floating\-point, it is rounded to the nearest integer.
|
||||
.RE
|
||||
.SS Point simplification
|
||||
.SS Dropping a fixed fraction of features by zoom level
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-r \fIrate\fP or \-\-drop\-rate=\fIrate\fP: Rate at which dots are dropped at zoom levels below basezoom (default 2.5).
|
||||
If you use \-rg, it will guess a drop rate that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker\-width with \-rg\fIwidth\fP to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or \-rf\fInumber\fP to allow at most \fInumber\fP features in the densest tile.
|
||||
\fB\fC\-r\fR \fIrate\fP or \fB\fC\-\-drop\-rate=\fR\fIrate\fP: Rate at which dots are dropped at zoom levels below basezoom (default 2.5).
|
||||
If you use \fB\fC\-rg\fR, it will guess a drop rate that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker\-width with \fB\fC\-rg\fR\fIwidth\fP to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or \fB\fC\-rf\fR\fInumber\fP to allow at most \fInumber\fP features in the densest tile.
|
||||
.IP \(bu 2
|
||||
\-g \fIgamma\fP or \-\-gamma=\fIgamma\fP: Rate at which especially dense dots are dropped (default 0, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number.
|
||||
\fB\fC\-B\fR \fIzoom\fP or \fB\fC\-\-base\-zoom=\fR\fIzoom\fP: Base zoom, the level at and above which all points are included in the tiles (default maxzoom).
|
||||
If you use \fB\fC\-Bg\fR, it will guess a zoom level that will keep at most 50,000 features in the densest tile.
|
||||
You can also specify a marker\-width with \fB\fC\-Bg\fR\fIwidth\fP to allow fewer features in the densest tile to
|
||||
compensate for the larger marker, or \fB\fC\-Bf\fR\fInumber\fP to allow at most \fInumber\fP features in the densest tile.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-al\fR or \fB\fC\-\-drop\-lines\fR: Let "dot" dropping at lower zooms apply to lines too
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ap\fR or \fB\fC\-\-drop\-polygons\fR: Let "dot" dropping at lower zooms apply to polygons too
|
||||
.RE
|
||||
.SS Dropping a fraction of features to keep under tile size limits
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-as\fR or \fB\fC\-\-drop\-densest\-as\-needed\fR: If a tile is too large, try to reduce it to under 500K by increasing the minimum spacing between features. The discovered spacing applies to the entire zoom level.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ad\fR or \fB\fC\-\-drop\-fraction\-as\-needed\fR: Dynamically drop some fraction of features from each zoom level to keep large tiles under the 500K size limit. (This is like \fB\fC\-pd\fR but applies to the entire zoom level, not to each tile.)
|
||||
.IP \(bu 2
|
||||
\fB\fC\-an\fR or \fB\fC\-\-drop\-smallest\-as\-needed\fR: Dynamically drop the smallest features (physically smallest: the shortest lines or the smallest polygons) from each zoom level to keep large tiles under the 500K size limit. This option will not work for point features.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pd\fR or \fB\fC\-\-force\-feature\-limit\fR: Dynamically drop some fraction of features from large tiles to keep them under the 500K size limit. It will probably look ugly at the tile boundaries. (This is like \fB\fC\-ad\fR but applies to each tile individually, not to the entire zoom level.) You probably don't want to use this.
|
||||
.RE
|
||||
.SS Dropping tightly overlapping features
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-g\fR \fIgamma\fP or \fB\fC\-\-gamma=_gamma\fR_: Rate at which especially dense dots are dropped (default 0, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-aG\fR or \fB\fC\-\-increase\-gamma\-as\-needed\fR: If a tile is too large, try to reduce it to under 500K by increasing the \fB\fC\-g\fR gamma. The discovered gamma applies to the entire zoom level. You probably want to use \fB\fC\-\-drop\-densest\-as\-needed\fR instead.
|
||||
.RE
|
||||
.SS Line and polygon simplification
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-S \fIscale\fP or \-\-simplification=\fIscale\fP: Multiply the tolerance for line and polygon simplification by \fIscale\fP\&. The standard tolerance tries to keep
|
||||
\fB\fC\-S\fR \fIscale\fP or \fB\fC\-\-simplification=\fR\fIscale\fP: Multiply the tolerance for line and polygon simplification by \fIscale\fP\&. The standard tolerance tries to keep
|
||||
the line or polygon within one tile unit of its proper location. You can probably go up to about 10 without too much visible difference.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ps\fR or \fB\fC\-\-no\-line\-simplification\fR: Don't simplify lines and polygons
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pS\fR or \fB\fC\-\-simplify\-only\-low\-zooms\fR: Don't simplify lines and polygons at maxzoom (but do simplify at lower zooms)
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pt\fR or \fB\fC\-\-no\-tiny\-polygon\-reduction\fR: Don't combine the area of very small polygons into small squares that represent their combined area.
|
||||
.RE
|
||||
.SS Doing more
|
||||
.SS Attempts to improve shared polygon boundaries
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-ac or \-\-coalesce: Coalesce adjacent line and polygon features that have the same properties.
|
||||
Note that when overlapping polygons are coalesced, the overlapping region is treated as a hole,
|
||||
which may not be what you want.
|
||||
\fB\fC\-ab\fR or \fB\fC\-\-detect\-shared\-borders\fR: In the manner of TopoJSON \[la]https://github.com/mbostock/topojson/wiki/Introduction\[ra], detect borders that are shared between multiple polygons and simplify them identically in each polygon. This takes more time and memory than considering each polygon individually.
|
||||
.IP \(bu 2
|
||||
\-ar or \-\-reverse: Try reversing the directions of lines to make them coalesce and compress better
|
||||
.IP \(bu 2
|
||||
\-ao or \-\-reorder: Reorder features to put ones with the same properties in sequence, to try to get them to coalesce
|
||||
.IP \(bu 2
|
||||
\-al or \-\-drop\-lines: Let "dot" dropping at lower zooms apply to lines too
|
||||
.IP \(bu 2
|
||||
\-ap or \-\-drop\-polygons: Let "dot" dropping at lower zooms apply to polygons too
|
||||
.IP \(bu 2
|
||||
\-ag or \-\-calculate\-feature\-density: Add a new attribute, \fB\fCtippecanoe_feature_density\fR, to each feature, to record how densely features are spaced in that area of the tile. You can use this attribute in the style to produce a glowing effect where points are densely packed. It can range from 0 in the sparsest areas to 255 in the densest.
|
||||
.IP \(bu 2
|
||||
\-ab or \-\-detect\-shared\-borders: In the manner of TopoJSON \[la]https://github.com/mbostock/topojson/wiki/Introduction\[ra], detect borders that are shared between multiple polygons and simplify them identically in each polygon. This takes more time and memory than considering each polygon individually.
|
||||
.IP \(bu 2
|
||||
\-aG or \-\-increase\-gamma\-as\-needed: If a tile is too large, try to reduce it to under 500K by increasing the \fB\fC\-g\fR gamma. The discovered gamma applies to the entire zoom level.
|
||||
.IP \(bu 2
|
||||
\-as or \-\-drop\-densest\-as\-needed: If a tile is too large, try to reduce it to under 500K by increasing the minimum spacing between features. The discovered spacing applies to the entire zoom level.
|
||||
.IP \(bu 2
|
||||
\-ad or \-\-drop\-fraction\-as\-needed: Dynamically drop some fraction of features from each zoom level to keep large tiles under the 500K size limit. (This is like \fB\fC\-pd\fR but applies to the entire zoom level, not to each tile.)
|
||||
.IP \(bu 2
|
||||
\-an or \-\-drop\-smallest\-as\-needed: Dynamically drop the smallest features (physically smallest: the shortest lines or the smallest polygons) from each zoom level to keep large tiles under the 500K size limit. This option will not work for point features.
|
||||
.IP \(bu 2
|
||||
\-aL or \-\-grid\-low\-zooms: At all zoom levels below \fImaxzoom\fP, snap all lines and polygons to a stairstep grid instead of allowing diagonals. You will also want to specify a tile resolution, probably \fB\fC\-D8\fR\&. This option provides a way to display continuous parcel, gridded, or binned data at low zooms without overwhelming the tiles with tiny polygons, since features will either get stretched out to the grid unit or lost entirely, depending on how they happened to be aligned in the original data.
|
||||
\fB\fC\-aL\fR or \fB\fC\-\-grid\-low\-zooms\fR: At all zoom levels below \fImaxzoom\fP, snap all lines and polygons to a stairstep grid instead of allowing diagonals. You will also want to specify a tile resolution, probably \fB\fC\-D8\fR\&. This option provides a way to display continuous parcel, gridded, or binned data at low zooms without overwhelming the tiles with tiny polygons, since features will either get stretched out to the grid unit or lost entirely, depending on how they happened to be aligned in the original data. You probably don't want to use this.
|
||||
.RE
|
||||
.SS Doing less
|
||||
.SS Controlling clipping to tile boundaries
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-ps or \-\-no\-line\-simplification: Don't simplify lines
|
||||
\fB\fC\-b\fR \fIpixels\fP or \fB\fC\-\-buffer=\fR\fIpixels\fP: Buffer size where features are duplicated from adjacent tiles. Units are "screen pixels"—1/256th of the tile width or height. (default 5)
|
||||
.IP \(bu 2
|
||||
\-pS or \-\-simplify\-only\-low\-zooms: Don't simplify lines at maxzoom (but do simplify at lower zooms)
|
||||
\fB\fC\-pc\fR or \fB\fC\-\-no\-clipping\fR: Don't clip features to the size of the tile. If a feature overlaps the tile's bounds or buffer at all, it is included completely. Be careful: this can produce very large tilesets, especially with large polygons.
|
||||
.IP \(bu 2
|
||||
\-pf or \-\-no\-feature\-limit: Don't limit tiles to 200,000 features
|
||||
.IP \(bu 2
|
||||
\-pk or \-\-no\-tile\-size\-limit: Don't limit tiles to 500K bytes
|
||||
.IP \(bu 2
|
||||
\-pd or \-\-force\-feature\-limit: Dynamically drop some fraction of features from large tiles to keep them under the 500K size limit. It will probably look ugly at the tile boundaries. (This is like \fB\fC\-ad\fR but applies to each tile individually, not to the entire zoom level.)
|
||||
.IP \(bu 2
|
||||
\-pi or \-\-preserve\-input\-order: Preserve the original input order of features as the drawing order instead of ordering geographically. (This is implemented as a restoration of the original order at the end, so that dot\-dropping is still geographic, which means it also undoes \-ao).
|
||||
.IP \(bu 2
|
||||
\-pp or \-\-no\-polygon\-splitting: Don't split complex polygons (over 700 vertices after simplification) into multiple features.
|
||||
.IP \(bu 2
|
||||
\-pc or \-\-no\-clipping: Don't clip features to the size of the tile. If a feature overlaps the tile's bounds or buffer at all, it is included completely. Be careful: this can produce very large tilesets, especially with large polygons.
|
||||
.IP \(bu 2
|
||||
\-pD or \-\-no\-duplication: As with \-\-no\-clipping, each feature is included intact instead of cut to tile boundaries. In addition, it is included only in a single tile per zoom level rather than potentially in multiple copies. Clients of the tileset must check adjacent tiles (possibly some distance away) to ensure they have all features.
|
||||
.IP \(bu 2
|
||||
\-pt or \-\-no\-tiny\-polygon\-reduction: Don't combine the area of very small polygons into small squares that represent their combined area.
|
||||
.IP \(bu 2
|
||||
\-q or \-\-quiet: Work quietly instead of reporting progress
|
||||
\fB\fC\-pD\fR or \fB\fC\-\-no\-duplication\fR: As with \fB\fC\-\-no\-clipping\fR, each feature is included intact instead of cut to tile boundaries. In addition, it is included only in a single tile per zoom level rather than potentially in multiple copies. Clients of the tileset must check adjacent tiles (possibly some distance away) to ensure they have all features.
|
||||
.RE
|
||||
.SS Reordering features within each tile
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pi\fR or \fB\fC\-\-preserve\-input\-order\fR: Preserve the original input order of features as the drawing order instead of ordering geographically. (This is implemented as a restoration of the original order at the end, so that dot\-dropping is still geographic, which means it also undoes \fB\fC\-ao\fR).
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ao\fR or \fB\fC\-\-reorder\fR: Reorder features to put ones with the same properties in sequence, to try to get them to coalesce. You probably don't want to use this.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ac\fR or \fB\fC\-\-coalesce\fR: Coalesce adjacent line and polygon features that have the same properties. You probably don't want to use this.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ar\fR or \fB\fC\-\-reverse\fR: Try reversing the directions of lines to make them coalesce and compress better. You probably don't want to use this.
|
||||
.RE
|
||||
.SS Adding calculated attributes
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-ag\fR or \fB\fC\-\-calculate\-feature\-density\fR: Add a new attribute, \fB\fCtippecanoe_feature_density\fR, to each feature, to record how densely features are spaced in that area of the tile. You can use this attribute in the style to produce a glowing effect where points are densely packed. It can range from 0 in the sparsest areas to 255 in the densest.
|
||||
.RE
|
||||
.SS Trying to correct bad source geometry
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-aw\fR or \fB\fC\-\-detect\-longitude\-wraparound\fR: Detect when adjacent points within a feature jump to the other side of the world, and try to fix the geometry.
|
||||
.RE
|
||||
.SS Setting or disabling tile size limits
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-M\fR \fIbytes\fP or \fB\fC\-\-maximum\-tile\-bytes=\fR\fIbytes\fP: Use the specified number of \fIbytes\fP as the maximum compressed tile size instead of 500K.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pf\fR or \fB\fC\-\-no\-feature\-limit\fR: Don't limit tiles to 200,000 features
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pk\fR or \fB\fC\-\-no\-tile\-size\-limit\fR: Don't limit tiles to 500K bytes
|
||||
.IP \(bu 2
|
||||
\fB\fC\-pC\fR or \fB\fC\-\-no\-tile\-compression\fR: Don't compress the PBF vector tile data.
|
||||
.RE
|
||||
.SS Temporary storage
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-t\fR \fIdirectory\fP or \fB\fC\-\-temporary\-directory=\fR\fIdirectory\fP: Put the temporary files in \fIdirectory\fP\&.
|
||||
If you don't specify, it will use \fB\fC/tmp\fR\&.
|
||||
.RE
|
||||
.SS Progress indicator
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\fB\fC\-q\fR or \fB\fC\-\-quiet\fR: Work quietly instead of reporting progress
|
||||
.IP \(bu 2
|
||||
\fB\fC\-v\fR or \fB\fC\-\-version\fR: Report Tippecanoe's version number
|
||||
.RE
|
||||
.SH Environment
|
||||
.PP
|
||||
Tippecanoe ordinarily uses as many parallel threads as the operating system claims that CPUs are available.
|
||||
You can override this number by setting the \fB\fCTIPPECANOE_MAX_THREADS\fR environmental variable.
|
||||
.SH Example
|
||||
.PP
|
||||
.RS
|
||||
@ -297,9 +376,6 @@ have their probability diffused, so that some of them will be drawn as a square
|
||||
this minimum size and others will not be drawn at all, preserving the total area that
|
||||
all of them should have had together.
|
||||
.PP
|
||||
Any polygons that have over 700 vertices after line simplification will be split into
|
||||
multiple features so they can be rendered efficiently, unless you use \-pp to prevent this.
|
||||
.PP
|
||||
Features in the same tile that share the same type and attributes are coalesced
|
||||
together into a single geometry if you use \fB\fC\-\-coalesce\fR\&. You are strongly encouraged to use \-x to exclude
|
||||
any unnecessary properties to reduce wasted file size.
|
||||
@ -335,7 +411,7 @@ make install
|
||||
.fi
|
||||
.RE
|
||||
.PP
|
||||
Tippecanoe now requires features from the 2014 C++ standard. If your compiler is older than
|
||||
Tippecanoe now requires features from the 2011 C++ standard. If your compiler is older than
|
||||
that, you will need to install a newer one. On MacOS, updating to the lastest XCode should
|
||||
get you a new enough version of \fB\fCclang++\fR\&. On Linux, you should be able to upgrade \fB\fCg++\fR with
|
||||
.PP
|
||||
@ -366,17 +442,27 @@ the same tiles, the layers or tiles are merged.
|
||||
The options are:
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-o \fIout.mbtiles\fP: Write the new tiles to the specified .mbtiles file
|
||||
\fB\fC\-o\fR \fIout.mbtiles\fP: Write the new tiles to the specified .mbtiles file
|
||||
.IP \(bu 2
|
||||
\-f: Remove \fIout.mbtiles\fP if it already exists
|
||||
\fB\fC\-f\fR: Remove \fIout.mbtiles\fP if it already exists
|
||||
.IP \(bu 2
|
||||
\-c \fImatch.csv\fP: Use \fImatch.csv\fP as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add.
|
||||
\fB\fC\-c\fR \fImatch\fP\fB\fC\&.csv\fR: Use \fImatch\fP\fB\fC\&.csv\fR as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add.
|
||||
.IP \(bu 2
|
||||
\-x \fIkey\fP: Remove attributes of type \fIkey\fP from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want.
|
||||
\fB\fC\-x\fR \fIkey\fP: Remove attributes of type \fIkey\fP from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want.
|
||||
.IP \(bu 2
|
||||
\-i: Only include features that matched the CSV.
|
||||
\fB\fC\-i\fR: Only include features that matched the CSV.
|
||||
.IP \(bu 2
|
||||
\-pk: Don't skip tiles larger than 500K.
|
||||
\fB\fC\-pk\fR: Don't skip tiles larger than 500K.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-l\fR \fIlayer\fP: Include the named layer in the output. You can specify multiple \fB\fC\-l\fR options to keep multiple layers. If you don't specify, they will all be retained.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-L\fR \fIlayer\fP: Remove the named layer from the output. You can specify multiple \fB\fC\-L\fR options to remove multiple layers.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-A\fR \fIattribution\fP: Set the attribution string.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-n\fR \fIname\fP: Set the tileset name.
|
||||
.IP \(bu 2
|
||||
\fB\fC\-N\fR \fIdescription\fP: Set the tileset description.
|
||||
.RE
|
||||
.PP
|
||||
Because tile\-join just copies the geometries to the new .mbtiles without processing them
|
||||
@ -475,5 +561,13 @@ resolutions.
|
||||
.SS Options
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
\-t \fIprojection\fP: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
\fB\fC\-t\fR \fIprojection\fP: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator).
|
||||
.IP \(bu 2
|
||||
\fB\fC\-z\fR \fImaxzoom\fP: Specify the highest zoom level to decode from the tileset
|
||||
.IP \(bu 2
|
||||
\fB\fC\-Z\fR \fIminzoom\fP: Specify the lowest zoom level to decode from the tileset
|
||||
.IP \(bu 2
|
||||
\fB\fC\-l\fR \fIlayer\fP: Decode only layers with the specified names. (Multiple \fB\fC\-l\fR options can be specified.)
|
||||
.IP \(bu 2
|
||||
\fB\fC\-f\fR: Decode tiles even if polygon ring order or closure problems are detected
|
||||
.RE
|
||||
|
466
mapbox/geometry/snap_rounding.hpp
Normal file
466
mapbox/geometry/snap_rounding.hpp
Normal file
@ -0,0 +1,466 @@
|
||||
#include <mapbox/geometry/geometry.hpp>
|
||||
#include <math.h>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
namespace mapbox {
|
||||
namespace geometry {
|
||||
|
||||
template <typename T>
|
||||
void add_vertical(size_t intermediate, size_t which_end, size_t into, std::vector<std::vector<point<T>>> &segments, bool &again, std::vector<size_t> &nexts) {
|
||||
again = true;
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(segments[intermediate][which_end]);
|
||||
dv.push_back(segments[into][1]);
|
||||
segments.push_back(dv);
|
||||
segments[into][1] = segments[intermediate][which_end];
|
||||
nexts.push_back(nexts[into]);
|
||||
nexts[into] = nexts.size() - 1;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void add_horizontal(size_t intermediate, size_t which_end, size_t into, std::vector<std::vector<point<T>>> &segments, bool &again, std::vector<size_t> &nexts) {
|
||||
again = true;
|
||||
|
||||
T x = segments[intermediate][which_end].x;
|
||||
T y = segments[intermediate][0].y +
|
||||
(segments[intermediate][which_end].x - segments[intermediate][0].x) *
|
||||
(segments[intermediate][1].y - segments[intermediate][0].y) /
|
||||
(segments[intermediate][1].x - segments[intermediate][0].x);
|
||||
point<T> d(x, y);
|
||||
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(d);
|
||||
dv.push_back(segments[into][1]);
|
||||
segments.push_back(dv);
|
||||
segments[into][1] = d;
|
||||
nexts.push_back(nexts[into]);
|
||||
nexts[into] = nexts.size() - 1;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void warn(std::vector<std::vector<point<T>>> &segments, size_t a, size_t b, bool do_warn) {
|
||||
if (do_warn) {
|
||||
fprintf(stderr, "%lld,%lld to %lld,%lld intersects %lld,%lld to %lld,%lld\n",
|
||||
(long long) segments[a][0].x, (long long) segments[a][0].y,
|
||||
(long long) segments[a][1].x, (long long) segments[a][1].y,
|
||||
(long long) segments[b][0].x, (long long) segments[b][0].y,
|
||||
(long long) segments[b][1].x, (long long) segments[b][1].y);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void check_intersection(std::vector<std::vector<point<T>>> &segments, size_t a, size_t b, bool &again, std::vector<size_t> &nexts, bool do_warn, bool endpoint_ok) {
|
||||
T s10_x = segments[a][1].x - segments[a][0].x;
|
||||
T s10_y = segments[a][1].y - segments[a][0].y;
|
||||
T s32_x = segments[b][1].x - segments[b][0].x;
|
||||
T s32_y = segments[b][1].y - segments[b][0].y;
|
||||
|
||||
// http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect
|
||||
T denom = s10_x * s32_y - s32_x * s10_y;
|
||||
|
||||
if (denom == 0) {
|
||||
// They are parallel or collinear. Find out if they are collinear.
|
||||
// http://www.cpsc.ucalgary.ca/~marina/papers/Segment_intersection.ps
|
||||
|
||||
T ccw =
|
||||
segments[a][0].x * segments[a][1].y +
|
||||
segments[a][1].x * segments[b][0].y +
|
||||
segments[b][0].x * segments[a][0].y -
|
||||
segments[a][0].x * segments[b][0].y -
|
||||
segments[a][1].x * segments[a][0].y -
|
||||
segments[b][0].x * segments[a][1].y;
|
||||
|
||||
if (ccw == 0) {
|
||||
if (segments[a][0].x == segments[a][1].x) {
|
||||
// Vertical
|
||||
|
||||
T amin, amax, bmin, bmax;
|
||||
if (segments[a][0].y < segments[a][1].y) {
|
||||
amin = segments[a][0].y;
|
||||
amax = segments[a][1].y;
|
||||
} else {
|
||||
amin = segments[a][1].y;
|
||||
amax = segments[a][0].y;
|
||||
}
|
||||
if (segments[b][0].y < segments[b][1].y) {
|
||||
bmin = segments[b][0].y;
|
||||
bmax = segments[b][1].y;
|
||||
} else {
|
||||
bmin = segments[b][1].y;
|
||||
bmax = segments[b][0].y;
|
||||
}
|
||||
|
||||
// All of these transformations preserve verticality so we can check multiple cases
|
||||
if (segments[b][0].y > amin && segments[b][0].y < amax) {
|
||||
// B0 is in A
|
||||
warn(segments, a, b, do_warn);
|
||||
add_vertical(b, 0, a, segments, again, nexts);
|
||||
}
|
||||
if (segments[b][1].y > amin && segments[b][1].y < amax) {
|
||||
// B1 is in A
|
||||
warn(segments, a, b, do_warn);
|
||||
add_vertical(b, 1, a, segments, again, nexts);
|
||||
}
|
||||
if (segments[a][0].y > bmin && segments[a][0].y < bmax) {
|
||||
// A0 is in B
|
||||
warn(segments, a, b, do_warn);
|
||||
add_vertical(a, 0, b, segments, again, nexts);
|
||||
}
|
||||
if (segments[a][1].y > bmin && segments[a][1].y < bmax) {
|
||||
// A1 is in B
|
||||
warn(segments, a, b, do_warn);
|
||||
add_vertical(a, 1, b, segments, again, nexts);
|
||||
}
|
||||
} else {
|
||||
// Horizontal or diagonal
|
||||
|
||||
T amin, amax, bmin, bmax;
|
||||
if (segments[a][0].x < segments[a][1].x) {
|
||||
amin = segments[a][0].x;
|
||||
amax = segments[a][1].x;
|
||||
} else {
|
||||
amin = segments[a][1].x;
|
||||
amax = segments[a][0].x;
|
||||
}
|
||||
if (segments[b][0].x < segments[b][1].x) {
|
||||
bmin = segments[b][0].x;
|
||||
bmax = segments[b][1].x;
|
||||
} else {
|
||||
bmin = segments[b][1].x;
|
||||
bmax = segments[b][0].x;
|
||||
}
|
||||
|
||||
// Don't check multiples, because rounding may corrupt collinearity
|
||||
if (segments[b][0].x > amin && segments[b][0].x < amax) {
|
||||
// B0 is in A
|
||||
add_horizontal(b, 0, a, segments, again, nexts);
|
||||
warn(segments, a, b, do_warn);
|
||||
} else if (segments[b][1].x > amin && segments[b][1].x < amax) {
|
||||
// B1 is in A
|
||||
add_horizontal(b, 1, a, segments, again, nexts);
|
||||
warn(segments, a, b, do_warn);
|
||||
} else if (segments[a][0].x > bmin && segments[a][0].x < bmax) {
|
||||
// A0 is in B
|
||||
warn(segments, a, b, do_warn);
|
||||
add_horizontal(a, 0, b, segments, again, nexts);
|
||||
} else if (segments[a][1].x > bmin && segments[a][1].x < bmax) {
|
||||
// A1 is in B
|
||||
warn(segments, a, b, do_warn);
|
||||
add_horizontal(a, 1, b, segments, again, nexts);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Neither parallel nor collinear, so may intersect at a single point
|
||||
|
||||
T s02_x = segments[a][0].x - segments[b][0].x;
|
||||
T s02_y = segments[a][0].y - segments[b][0].y;
|
||||
|
||||
double s = (s10_x * s02_y - s10_y * s02_x) / (long double) denom;
|
||||
double t = (s32_x * s02_y - s32_y * s02_x) / (long double) denom;
|
||||
|
||||
if (t >= 0 && t <= 1 && s >= 0 && s <= 1) {
|
||||
T x = (T) round(segments[a][0].x + t * s10_x);
|
||||
T y = (T) round(segments[a][0].y + t * s10_y);
|
||||
|
||||
if ((t > 0 && t < 1 && s > 0 && s < 1) || !endpoint_ok) {
|
||||
if (t >= 0 && t <= 1) {
|
||||
if ((x != segments[a][0].x || y != segments[a][0].y) && (x != segments[a][1].x || y != segments[a][1].y)) {
|
||||
warn(segments, a, b, do_warn);
|
||||
// splitting a
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(point<T>(x, y));
|
||||
dv.push_back(segments[a][1]);
|
||||
segments.push_back(dv);
|
||||
segments[a][1] = point<T>(x, y);
|
||||
nexts.push_back(nexts[a]);
|
||||
nexts[a] = nexts.size() - 1;
|
||||
again = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (s >= 0 && s <= 1) {
|
||||
if ((x != segments[b][0].x || y != segments[b][0].y) && (x != segments[b][1].x || y != segments[b][1].y)) {
|
||||
// splitting b
|
||||
warn(segments, a, b, do_warn);
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(point<T>(x, y));
|
||||
dv.push_back(segments[b][1]);
|
||||
segments.push_back(dv);
|
||||
segments[b][1] = point<T>(x, y);
|
||||
nexts.push_back(nexts[b]);
|
||||
nexts[b] = nexts.size() - 1;
|
||||
again = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void partition(std::vector<std::vector<point<T>>> &segs, std::vector<size_t> &subset, int direction, std::set<std::pair<size_t, size_t>> &possible) {
|
||||
std::vector<T> points;
|
||||
|
||||
// List of X or Y midpoints of edges, so we can find the median
|
||||
|
||||
if (direction == 0) {
|
||||
for (size_t i = 0; i < subset.size(); i++) {
|
||||
points.push_back((segs[subset[i]][0].x + segs[subset[i]][1].x) / 2);
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < subset.size(); i++) {
|
||||
points.push_back((segs[subset[i]][0].y + segs[subset[i]][1].y) / 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (points.size() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
size_t mid = points.size() / 2;
|
||||
std::nth_element(points.begin(), points.begin() + mid, points.end());
|
||||
T median = points[mid];
|
||||
|
||||
// Partition into sets that are above or below, or to the left or to the right of, the median.
|
||||
// Segments that cross the median appear in both.
|
||||
|
||||
std::vector<size_t> one;
|
||||
std::vector<size_t> two;
|
||||
|
||||
if (direction == 0) {
|
||||
for (size_t i = 0; i < subset.size(); i++) {
|
||||
if (segs[subset[i]][0].x <= median || segs[subset[i]][1].x <= median) {
|
||||
one.push_back(subset[i]);
|
||||
}
|
||||
if (segs[subset[i]][0].x >= median || segs[subset[i]][1].x >= median) {
|
||||
two.push_back(subset[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < subset.size(); i++) {
|
||||
if (segs[subset[i]][0].y <= median || segs[subset[i]][1].y <= median) {
|
||||
one.push_back(subset[i]);
|
||||
}
|
||||
if (segs[subset[i]][0].y >= median || segs[subset[i]][1].y >= median) {
|
||||
two.push_back(subset[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (one.size() >= subset.size() || two.size() >= subset.size()) {
|
||||
for (size_t i = 0; i < subset.size(); i++) {
|
||||
for (size_t j = i + 1; j < subset.size(); j++) {
|
||||
possible.insert(std::pair<size_t, size_t>(subset[i], subset[j]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// By experiment, stopping at 10 is a little faster than either 5 or 20
|
||||
|
||||
if (one.size() < 10) {
|
||||
for (size_t i = 0; i < one.size(); i++) {
|
||||
for (size_t j = i + 1; j < one.size(); j++) {
|
||||
possible.insert(std::pair<size_t, size_t>(one[i], one[j]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partition(segs, one, !direction, possible);
|
||||
}
|
||||
|
||||
if (two.size() < 10) {
|
||||
for (size_t i = 0; i < two.size(); i++) {
|
||||
for (size_t j = i + 1; j < two.size(); j++) {
|
||||
possible.insert(std::pair<size_t, size_t>(two[i], two[j]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partition(segs, two, !direction, possible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::vector<std::vector<point<T>>> intersect_segments(std::vector<std::vector<point<T>>> segments, std::vector<size_t> &nexts, bool do_warn, bool endpoint_ok) {
|
||||
bool again = true;
|
||||
|
||||
while (again) {
|
||||
again = false;
|
||||
|
||||
std::set<std::pair<size_t, size_t>> possible;
|
||||
|
||||
std::vector<size_t> subset;
|
||||
for (size_t i = 0; i < segments.size(); i++) {
|
||||
subset.push_back(i);
|
||||
}
|
||||
|
||||
partition(segments, subset, 0, possible);
|
||||
|
||||
for (auto it = possible.begin(); it != possible.end(); ++it) {
|
||||
check_intersection(segments, it->first, it->second, again, nexts, do_warn, endpoint_ok);
|
||||
}
|
||||
}
|
||||
|
||||
return segments;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
linear_ring<T> remove_collinear(linear_ring<T> ring) {
|
||||
linear_ring<T> out;
|
||||
|
||||
size_t len = ring.size() - 1; // Exclude duplicated last point
|
||||
for (size_t j = 0; j < len; j++) {
|
||||
long long ccw =
|
||||
ring[(j + len - 1) % len].x * ring[(j + len - 0) % len].y +
|
||||
ring[(j + len - 0) % len].x * ring[(j + len + 1) % len].y +
|
||||
ring[(j + len + 1) % len].x * ring[(j + len - 1) % len].y -
|
||||
ring[(j + len - 1) % len].x * ring[(j + len + 1) % len].y -
|
||||
ring[(j + len - 0) % len].x * ring[(j + len - 1) % len].y -
|
||||
ring[(j + len + 1) % len].x * ring[(j + len - 0) % len].y;
|
||||
|
||||
if (ccw != 0) {
|
||||
out.push_back(ring[j]);
|
||||
}
|
||||
|
||||
if (ring.size() > 0 && ring[0] != ring[ring.size() - 1]) {
|
||||
ring.push_back(ring[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
multi_polygon<T> snap_round(multi_polygon<T> geom, bool do_warn, bool endpoint_ok) {
|
||||
std::vector<std::vector<point<T>>> segments;
|
||||
std::vector<size_t> nexts;
|
||||
std::vector<std::vector<size_t>> ring_starts;
|
||||
|
||||
// Crunch out any 0-length segments
|
||||
for (size_t i = 0; i < geom.size(); i++) {
|
||||
for (size_t j = 0; j < geom[i].size(); j++) {
|
||||
for (ssize_t k = geom[i][j].size() - 1; k > 0; k--) {
|
||||
if (geom[i][j][k] == geom[i][j][k - 1]) {
|
||||
geom[i][j].erase(geom[i][j].begin() + k);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < geom.size(); i++) {
|
||||
ring_starts.push_back(std::vector<size_t>());
|
||||
|
||||
for (size_t j = 0; j < geom[i].size(); j++) {
|
||||
size_t s = geom[i][j].size();
|
||||
|
||||
if (s > 1) {
|
||||
ring_starts[i].push_back(segments.size());
|
||||
size_t first = nexts.size();
|
||||
|
||||
for (size_t k = 0; k + 1 < s; k++) {
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(geom[i][j][k]);
|
||||
dv.push_back(geom[i][j][k + 1]);
|
||||
|
||||
segments.push_back(dv);
|
||||
nexts.push_back(nexts.size() + 1);
|
||||
}
|
||||
|
||||
// Fabricate a point if ring was not closed
|
||||
if (geom[i][j][0] != geom[i][j][s - 1]) {
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(geom[i][j][s - 1]);
|
||||
dv.push_back(geom[i][j][0]);
|
||||
|
||||
segments.push_back(dv);
|
||||
nexts.push_back(nexts.size() + 1);
|
||||
}
|
||||
|
||||
// Last point of ring points back to first
|
||||
nexts[nexts.size() - 1] = first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
segments = intersect_segments(segments, nexts, do_warn, endpoint_ok);
|
||||
|
||||
multi_polygon<T> mp;
|
||||
for (size_t i = 0; i < ring_starts.size(); i++) {
|
||||
mp.push_back(polygon<T>());
|
||||
|
||||
for (size_t j = 0; j < ring_starts[i].size(); j++) {
|
||||
mp[i].push_back(linear_ring<T>());
|
||||
|
||||
size_t k = ring_starts[i][j];
|
||||
do {
|
||||
mp[i][j].push_back(segments[k][0]);
|
||||
k = nexts[k];
|
||||
} while (k != ring_starts[i][j]);
|
||||
|
||||
mp[i][j].push_back(segments[ring_starts[i][j]][0]);
|
||||
}
|
||||
}
|
||||
|
||||
return mp;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
multi_line_string<T> snap_round(multi_line_string<T> geom, bool do_warn, bool endpoint_ok) {
|
||||
std::vector<std::vector<point<T>>> segments;
|
||||
std::vector<size_t> nexts;
|
||||
std::vector<size_t> ring_starts;
|
||||
|
||||
// Crunch out any 0-length segments
|
||||
for (size_t j = 0; j < geom.size(); j++) {
|
||||
for (ssize_t k = geom[j].size() - 1; k > 0; k--) {
|
||||
if (geom[j][k] == geom[j][k - 1]) {
|
||||
geom[j].erase(geom[j].begin() + k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < geom.size(); j++) {
|
||||
size_t s = geom[j].size();
|
||||
|
||||
if (s > 1) {
|
||||
ring_starts.push_back(segments.size());
|
||||
size_t first = nexts.size();
|
||||
|
||||
for (size_t k = 0; k + 1 < s; k++) {
|
||||
std::vector<point<T>> dv;
|
||||
dv.push_back(geom[j][k]);
|
||||
dv.push_back(geom[j][k + 1]);
|
||||
|
||||
segments.push_back(dv);
|
||||
nexts.push_back(nexts.size() + 1);
|
||||
}
|
||||
|
||||
// Last point of ring points back to first
|
||||
nexts[nexts.size() - 1] = first;
|
||||
}
|
||||
}
|
||||
|
||||
segments = intersect_segments(segments, nexts, do_warn, endpoint_ok);
|
||||
|
||||
multi_line_string<T> mp;
|
||||
for (size_t j = 0; j < ring_starts.size(); j++) {
|
||||
mp.push_back(line_string<T>());
|
||||
|
||||
size_t k = ring_starts[j];
|
||||
size_t last = k;
|
||||
do {
|
||||
mp[j].push_back(segments[k][0]);
|
||||
last = k;
|
||||
k = nexts[k];
|
||||
} while (k != ring_starts[j]);
|
||||
|
||||
mp[j].push_back(segments[last][1]);
|
||||
}
|
||||
|
||||
return mp;
|
||||
}
|
||||
}
|
||||
}
|
@ -5,11 +5,6 @@
|
||||
#include <mapbox/geometry/polygon.hpp>
|
||||
#include <mapbox/geometry/wagyu/wagyu.hpp>
|
||||
|
||||
#include <experimental/optional>
|
||||
|
||||
template <typename T>
|
||||
using optional_linear_ring = std::experimental::optional<mapbox::geometry::linear_ring<T>>;
|
||||
|
||||
namespace mapbox {
|
||||
namespace geometry {
|
||||
namespace wagyu {
|
||||
@ -61,7 +56,7 @@ bool inside(mapbox::geometry::point<T> p, size_t edge, mapbox::geometry::box<T>
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
optional_linear_ring<T> quick_lr_clip(mapbox::geometry::linear_ring<T> const& ring,
|
||||
mapbox::geometry::linear_ring<T> quick_lr_clip(mapbox::geometry::linear_ring<T> const& ring,
|
||||
mapbox::geometry::box<T> const& b) {
|
||||
mapbox::geometry::linear_ring<T> out = ring;
|
||||
|
||||
@ -89,13 +84,14 @@ optional_linear_ring<T> quick_lr_clip(mapbox::geometry::linear_ring<T> const& ri
|
||||
}
|
||||
|
||||
if (out.size() < 3) {
|
||||
return optional_linear_ring<T>();
|
||||
out.clear();
|
||||
return out;
|
||||
}
|
||||
// Close the ring if the first/last point was outside
|
||||
if (out[0] != out[out.size() - 1]) {
|
||||
out.push_back(out[0]);
|
||||
}
|
||||
return optional_linear_ring<T>(std::move(out));
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,8 +103,8 @@ mapbox::geometry::multi_polygon<T> clip(mapbox::geometry::polygon<T> const& poly
|
||||
wagyu<T> clipper;
|
||||
for (auto const& lr : poly) {
|
||||
auto new_lr = quick_clip::quick_lr_clip(lr, b);
|
||||
if (new_lr) {
|
||||
clipper.add_ring(*new_lr, polygon_type_subject);
|
||||
if (!new_lr.empty()) {
|
||||
clipper.add_ring(new_lr, polygon_type_subject);
|
||||
}
|
||||
}
|
||||
clipper.execute(clip_type_union, result, subject_fill_type, fill_type_even_odd);
|
||||
@ -124,8 +120,8 @@ mapbox::geometry::multi_polygon<T> clip(mapbox::geometry::multi_polygon<T> const
|
||||
for (auto const& poly : mp) {
|
||||
for (auto const& lr : poly) {
|
||||
auto new_lr = quick_clip::quick_lr_clip(lr, b);
|
||||
if (new_lr) {
|
||||
clipper.add_ring(*new_lr, polygon_type_subject);
|
||||
if (!new_lr.empty()) {
|
||||
clipper.add_ring(new_lr, polygon_type_subject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,12 @@
|
||||
#include <mapbox/geometry/wagyu/topology_correction.hpp>
|
||||
#include <mapbox/geometry/wagyu/vatti.hpp>
|
||||
|
||||
#define WAGYU_MAJOR_VERSION 0
|
||||
#define WAGYU_MINOR_VERSION 3
|
||||
#define WAGYU_PATCH_VERSION 0
|
||||
|
||||
#define WAGYU_VERSION (WAGYU_MAJOR_VERSION * 100000) + (WAGYU_MINOR_VERSION * 100) + (WAGYU_PATCH_VERSION)
|
||||
|
||||
namespace mapbox {
|
||||
namespace geometry {
|
||||
namespace wagyu {
|
||||
|
159
mbtiles.cpp
159
mbtiles.cpp
@ -11,10 +11,8 @@
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include "main.hpp"
|
||||
#include "pool.hpp"
|
||||
#include "mvt.hpp"
|
||||
#include "mbtiles.hpp"
|
||||
#include "geometry.hpp"
|
||||
|
||||
sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable) {
|
||||
sqlite3 *outdb;
|
||||
@ -133,11 +131,23 @@ bool type_and_string::operator<(const type_and_string &o) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap) {
|
||||
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description) {
|
||||
char *sql, *err;
|
||||
|
||||
sqlite3 *db = outdb;
|
||||
if (outdb == NULL) {
|
||||
if (sqlite3_open("", &db) != SQLITE_OK) {
|
||||
fprintf(stderr, "Temporary db: %s\n", sqlite3_errmsg(db));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (sqlite3_exec(db, "CREATE TABLE metadata (name text, value text);", NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "Create metadata table: %s\n", err);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('name', %Q);", fname);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set name in metadata: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -145,8 +155,8 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
}
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('description', %Q);", fname);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('description', %Q);", description != NULL ? description : fname);
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set description in metadata: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -155,7 +165,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('version', %d);", 2);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set version : %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -164,7 +174,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('minzoom', %d);", minzoom);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set minzoom: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -173,7 +183,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('maxzoom', %d);", maxzoom);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set maxzoom: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -182,7 +192,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('center', '%f,%f,%d');", midlon, midlat, maxzoom);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set center: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -191,7 +201,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('bounds', '%f,%f,%f,%f');", minlon, minlat, maxlon, maxlat);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set bounds: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -200,7 +210,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('type', %Q);", "overlay");
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set type: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -210,7 +220,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
|
||||
if (attribution != NULL) {
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('attribution', %Q);", attribution);
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set type: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -219,8 +229,8 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
sqlite3_free(sql);
|
||||
}
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('format', %Q);", "pbf");
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('format', %Q);", vector ? "pbf" : "png");
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set format: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
@ -228,58 +238,103 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int
|
||||
}
|
||||
sqlite3_free(sql);
|
||||
|
||||
std::string buf("{");
|
||||
aprintf(&buf, "\"vector_layers\": [ ");
|
||||
if (vector) {
|
||||
std::string buf("{");
|
||||
aprintf(&buf, "\"vector_layers\": [ ");
|
||||
|
||||
std::vector<std::string> lnames;
|
||||
for (auto ai = layermap.begin(); ai != layermap.end(); ++ai) {
|
||||
lnames.push_back(ai->first);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < lnames.size(); i++) {
|
||||
if (i != 0) {
|
||||
aprintf(&buf, ", ");
|
||||
std::vector<std::string> lnames;
|
||||
for (auto ai = layermap.begin(); ai != layermap.end(); ++ai) {
|
||||
lnames.push_back(ai->first);
|
||||
}
|
||||
|
||||
auto fk = layermap.find(lnames[i]);
|
||||
aprintf(&buf, "{ \"id\": \"");
|
||||
quote(&buf, lnames[i].c_str());
|
||||
aprintf(&buf, "\", \"description\": \"\", \"minzoom\": %d, \"maxzoom\": %d, \"fields\": {", fk->second.minzoom, fk->second.maxzoom);
|
||||
|
||||
std::set<type_and_string>::iterator j;
|
||||
bool first = true;
|
||||
for (j = fk->second.file_keys.begin(); j != fk->second.file_keys.end(); ++j) {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
for (size_t i = 0; i < lnames.size(); i++) {
|
||||
if (i != 0) {
|
||||
aprintf(&buf, ", ");
|
||||
}
|
||||
|
||||
aprintf(&buf, "\"");
|
||||
quote(&buf, j->string.c_str());
|
||||
auto fk = layermap.find(lnames[i]);
|
||||
aprintf(&buf, "{ \"id\": \"");
|
||||
quote(&buf, lnames[i].c_str());
|
||||
aprintf(&buf, "\", \"description\": \"\", \"minzoom\": %d, \"maxzoom\": %d, \"fields\": {", fk->second.minzoom, fk->second.maxzoom);
|
||||
|
||||
if (j->type == VT_NUMBER) {
|
||||
aprintf(&buf, "\": \"Number\"");
|
||||
} else if (j->type == VT_BOOLEAN) {
|
||||
aprintf(&buf, "\": \"Boolean\"");
|
||||
} else {
|
||||
aprintf(&buf, "\": \"String\"");
|
||||
std::set<type_and_string>::iterator j;
|
||||
bool first = true;
|
||||
for (j = fk->second.file_keys.begin(); j != fk->second.file_keys.end(); ++j) {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
aprintf(&buf, ", ");
|
||||
}
|
||||
|
||||
aprintf(&buf, "\"");
|
||||
quote(&buf, j->string.c_str());
|
||||
|
||||
if (j->type == mvt_double ||
|
||||
j->type == mvt_float ||
|
||||
j->type == mvt_double ||
|
||||
j->type == mvt_uint ||
|
||||
j->type == mvt_sint) {
|
||||
aprintf(&buf, "\": \"Number\"");
|
||||
} else if (j->type == mvt_bool) {
|
||||
aprintf(&buf, "\": \"Boolean\"");
|
||||
} else {
|
||||
aprintf(&buf, "\": \"String\"");
|
||||
}
|
||||
}
|
||||
|
||||
aprintf(&buf, "} }");
|
||||
}
|
||||
|
||||
aprintf(&buf, "} }");
|
||||
aprintf(&buf, " ] }");
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('json', %Q);", buf.c_str());
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set json: %s\n", err);
|
||||
if (!forcetable) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
sqlite3_free(sql);
|
||||
}
|
||||
|
||||
aprintf(&buf, " ] }");
|
||||
if (outdir != NULL) {
|
||||
std::string metadata = std::string(outdir) + "/metadata.json";
|
||||
FILE *fp = fopen(metadata.c_str(), "w");
|
||||
if (fp == NULL) {
|
||||
perror(metadata.c_str());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('json', %Q);", buf.c_str());
|
||||
if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {
|
||||
fprintf(stderr, "set json: %s\n", err);
|
||||
if (!forcetable) {
|
||||
fprintf(fp, "{\n");
|
||||
|
||||
sqlite3_stmt *stmt;
|
||||
bool first = true;
|
||||
if (sqlite3_prepare_v2(db, "SELECT name, value from metadata;", -1, &stmt, NULL) == SQLITE_OK) {
|
||||
while (sqlite3_step(stmt) == SQLITE_ROW) {
|
||||
std::string key, value;
|
||||
|
||||
quote(&key, (const char *) sqlite3_column_text(stmt, 0));
|
||||
quote(&value, (const char *) sqlite3_column_text(stmt, 1));
|
||||
|
||||
if (!first) {
|
||||
fprintf(fp, ",\n");
|
||||
}
|
||||
fprintf(fp, " \"%s\": \"%s\"", key.c_str(), value.c_str());
|
||||
first = false;
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
}
|
||||
|
||||
fprintf(fp, "\n}\n");
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
if (outdb == NULL) {
|
||||
if (sqlite3_close(db) != SQLITE_OK) {
|
||||
fprintf(stderr, "Could not close temp database: %s\n", sqlite3_errmsg(db));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
sqlite3_free(sql);
|
||||
}
|
||||
|
||||
void mbtiles_close(sqlite3 *outdb, char **argv) {
|
||||
|
@ -20,7 +20,7 @@ sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable);
|
||||
|
||||
void mbtiles_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size);
|
||||
|
||||
void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap);
|
||||
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description);
|
||||
|
||||
void mbtiles_close(sqlite3 *outdb, char **argv);
|
||||
|
||||
|
9
mvt.cpp
9
mvt.cpp
@ -79,7 +79,7 @@ int compress(std::string const &input, std::string &output) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool mvt_tile::decode(std::string &message) {
|
||||
bool mvt_tile::decode(std::string &message, bool &was_compressed) {
|
||||
layers.clear();
|
||||
std::string src;
|
||||
|
||||
@ -87,8 +87,10 @@ bool mvt_tile::decode(std::string &message) {
|
||||
std::string uncompressed;
|
||||
decompress(message, uncompressed);
|
||||
src = uncompressed;
|
||||
was_compressed = true;
|
||||
} else {
|
||||
src = message;
|
||||
was_compressed = false;
|
||||
}
|
||||
|
||||
protozero::pbf_reader reader(src);
|
||||
@ -367,10 +369,7 @@ std::string mvt_tile::encode() {
|
||||
writer.add_message(3, layer_string);
|
||||
}
|
||||
|
||||
std::string compressed;
|
||||
compress(data, compressed);
|
||||
|
||||
return compressed;
|
||||
return data;
|
||||
}
|
||||
|
||||
bool mvt_value::operator<(const mvt_value &o) const {
|
||||
|
14
mvt.hpp
14
mvt.hpp
@ -13,6 +13,18 @@ struct mvt_geometry {
|
||||
int /* mvt_operation */ op;
|
||||
|
||||
mvt_geometry(int op, long long x, long long y);
|
||||
|
||||
bool operator<(mvt_geometry const &s) const {
|
||||
if (y < s.y || (y == s.y && x < s.x)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool operator==(mvt_geometry const &s) const {
|
||||
return y == s.y && x == s.x;
|
||||
}
|
||||
};
|
||||
|
||||
enum mvt_geometry_type {
|
||||
@ -79,7 +91,7 @@ struct mvt_tile {
|
||||
std::vector<mvt_layer> layers;
|
||||
|
||||
std::string encode();
|
||||
bool decode(std::string &message);
|
||||
bool decode(std::string &message, bool &was_compressed);
|
||||
};
|
||||
|
||||
bool is_compressed(std::string const &data);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define A_DROP_FRACTION_AS_NEEDED ((int) 'd')
|
||||
#define A_DROP_SMALLEST_AS_NEEDED ((int) 'n')
|
||||
#define A_GRID_LOW_ZOOMS ((int) 'L')
|
||||
#define A_DETECT_WRAPAROUND ((int) 'w')
|
||||
|
||||
#define P_SIMPLIFY ((int) 's')
|
||||
#define P_SIMPLIFY_LOW ((int) 'S')
|
||||
@ -24,6 +25,7 @@
|
||||
#define P_CLIPPING ((int) 'c')
|
||||
#define P_DUPLICATION ((int) 'D')
|
||||
#define P_TINY_POLYGON_REDUCTION ((int) 't')
|
||||
#define P_TILE_COMPRESSION ((int) 'C')
|
||||
|
||||
extern int prevent[256];
|
||||
extern int additional[256];
|
||||
|
@ -83,13 +83,32 @@ unsigned long long encode(unsigned int wx, unsigned int wy) {
|
||||
return out;
|
||||
}
|
||||
|
||||
static unsigned char decodex[256];
|
||||
static unsigned char decodey[256];
|
||||
|
||||
void decode(unsigned long long index, unsigned *wx, unsigned *wy) {
|
||||
static int initialized = 0;
|
||||
if (!initialized) {
|
||||
for (size_t ix = 0; ix < 256; ix++) {
|
||||
size_t xx = 0, yy = 0;
|
||||
|
||||
for (size_t i = 0; i < 32; i++) {
|
||||
xx |= ((ix >> (64 - 2 * (i + 1) + 1)) & 1) << (32 - (i + 1));
|
||||
yy |= ((ix >> (64 - 2 * (i + 1) + 0)) & 1) << (32 - (i + 1));
|
||||
}
|
||||
|
||||
decodex[ix] = xx;
|
||||
decodey[ix] = yy;
|
||||
}
|
||||
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
*wx = *wy = 0;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 32; i++) {
|
||||
*wx |= ((index >> (64 - 2 * (i + 1) + 1)) & 1) << (32 - (i + 1));
|
||||
*wy |= ((index >> (64 - 2 * (i + 1) + 0)) & 1) << (32 - (i + 1));
|
||||
for (size_t i = 0; i < 8; i++) {
|
||||
*wx |= ((unsigned) decodex[(index >> (8 * i)) & 0xFF]) << (4 * i);
|
||||
*wy |= ((unsigned) decodey[(index >> (8 * i)) & 0xFF]) << (4 * i);
|
||||
}
|
||||
}
|
||||
|
||||
|
20
rawtiles.cpp
Normal file
20
rawtiles.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <sys/stat.h>
|
||||
#include "rawtiles.hpp"
|
||||
|
||||
void write_raw_tile(const char *outdir, int z, int tx, int ty, std::string const &pbf) {
|
||||
mkdir(outdir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
std::string curdir(outdir);
|
||||
std::string slash("/");
|
||||
std::string newdir = curdir + slash + std::to_string(z);
|
||||
mkdir(newdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
newdir = newdir + "/" + std::to_string(tx);
|
||||
mkdir(newdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
newdir = newdir + "/" + std::to_string(ty) + ".pbf";
|
||||
|
||||
std::ofstream pbfFile(newdir, std::ios::out | std::ios::binary);
|
||||
pbfFile.write(pbf.data(), pbf.size());
|
||||
pbfFile.close();
|
||||
}
|
1
rawtiles.hpp
Normal file
1
rawtiles.hpp
Normal file
@ -0,0 +1 @@
|
||||
void write_raw_tile(const char *outdir, int z, int tx, int ty, std::string const &pbf);
|
39
tests/attribute-type/in.json
Normal file
39
tests/attribute-type/in.json
Normal file
@ -0,0 +1,39 @@
|
||||
{ "type": "Feature", "properties": { "booltype": null, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": "null", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": "", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": 0, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": "0", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": "false", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": 1, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": 0.0, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": "yes", "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "booltype": [ 2, 3 ], "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": null, "expect": "null" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": 2, "expect": "2" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": 2.5, "expect": "2.5" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": true, "expect": "true" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": false, "expect": "false" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": "something", "expect": "something" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "stringtype": [ 2, 3 ], "expect": "[2,3]" }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": null, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": "5", "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": "5.6", "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": 5.6, "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": true, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": false, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": "", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": "yes", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": " 3", "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "inttype": [ 2, 3 ], "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": null, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": "5", "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": "5.6", "expect": 5.6 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": 5.6, "expect": 5.6 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": true, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": false, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": "", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": "yes", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": " 3", "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
||||
{ "type": "Feature", "properties": { "floattype": [ 2, 3 ], "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0,0 ] } }
|
@ -0,0 +1,94 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "0.000000,0.000000,0.000000,0.000000",
|
||||
"center": "0.000000,0.000000,0",
|
||||
"description": "tests/attribute-type/out/-z0_-Tinttype@int_-Tfloattype@float_-Tbooltype@bool_-Tstringtype@string.json.check.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"booltype\": \"Boolean\", \"expect\": \"String\", \"expect\": \"Number\", \"expect\": \"Boolean\", \"floattype\": \"Number\", \"inttype\": \"Number\", \"stringtype\": \"String\"} } ] }",
|
||||
"maxzoom": "0",
|
||||
"minzoom": "0",
|
||||
"name": "tests/attribute-type/out/-z0_-Tinttype@int_-Tfloattype@float_-Tbooltype@bool_-Tstringtype@string.json.check.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "null", "expect": "null" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "2", "expect": "2" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "2.5", "expect": "2.5" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "true", "expect": "true" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "false", "expect": "false" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "something", "expect": "something" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "stringtype": "[2,3]", "expect": "[2,3]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 5, "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 6, "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 6, "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 3, "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "inttype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 5, "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 5.6, "expect": 5.6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 5.6, "expect": 5.6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 3, "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "floattype": 0, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
] }
|
2
tests/islands/in.json
Normal file
2
tests/islands/in.json
Normal file
File diff suppressed because one or more lines are too long
224
tests/islands/out/-d7_-z7_-pt_-pp.json
Normal file
224
tests/islands/out/-d7_-z7_-pt_-pp.json
Normal file
@ -0,0 +1,224 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-174.543406,-10.009861,174.245779,9.775580",
|
||||
"center": "172.968750,1.405686,7",
|
||||
"description": "tests/islands/out/-d7_-z7_-pt_-pp.json.check.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 7, \"fields\": {\"OBJECTID_1\": \"Number\", \"adm0_a3\": \"String\", \"adm0_label\": \"Number\", \"adm0_sr\": \"Number\", \"adm1_cod_1\": \"String\", \"adm1_code\": \"String\", \"admin\": \"String\", \"area_sqkm\": \"Number\", \"check_me\": \"Number\", \"code_hasc\": \"String\", \"datarank\": \"Number\", \"diss_me\": \"Number\", \"featurecla\": \"String\", \"fips\": \"String\", \"gadm_level\": \"Number\", \"geonunit\": \"String\", \"gn_a1_code\": \"String\", \"gn_id\": \"Number\", \"gn_level\": \"Number\", \"gn_name\": \"String\", \"gns_adm1\": \"String\", \"gns_id\": \"Number\", \"gns_level\": \"Number\", \"gns_name\": \"String\", \"gu_a3\": \"String\", \"iso_3166_2\": \"String\", \"iso_a2\": \"String\", \"labelrank\": \"Number\", \"latitude\": \"Number\", \"longitude\": \"Number\", \"mapcolor13\": \"Number\", \"mapcolor9\": \"Number\", \"name\": \"String\", \"name_len\": \"Number\", \"note\": \"String\", \"provnum_ne\": \"Number\", \"sameascity\": \"Number\", \"scalerank\": \"Number\", \"sov_a3\": \"String\", \"wikipedia\": \"String\", \"woe_id\": \"Number\", \"woe_label\": \"String\", \"woe_name\": \"String\"} } ] }",
|
||||
"maxzoom": "7",
|
||||
"minzoom": "0",
|
||||
"name": "tests/islands/out/-d7_-z7_-pt_-pp.json.check.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -43.242188, -3.951941 ], [ -43.154297, -3.951941 ], [ -43.154297, -4.039618 ], [ -43.242188, -4.039618 ], [ -43.242188, -3.951941 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 142.294922, 8.320212 ], [ 142.382812, 8.320212 ], [ 142.382812, 8.146243 ], [ 142.294922, 8.146243 ], [ 142.294922, 8.320212 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 0, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.572250 ], [ -155.874023, -5.615986 ], [ -155.961914, -5.615986 ], [ -155.917969, -5.572250 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 174.199219, -0.483393 ], [ 174.243164, -0.527336 ], [ 174.199219, -0.527336 ], [ 174.199219, -0.483393 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 174.199219, -0.483393 ], [ 174.243164, -0.527336 ], [ 174.199219, -0.527336 ], [ 174.199219, -0.483393 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.164062, 9.622414 ], [ 138.164062, 9.535749 ], [ 138.032227, 9.449062 ], [ 138.164062, 9.622414 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 0, "y": 2 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.917969, -5.594118 ] ] ], [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 3, "y": 2 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 3, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.208008, 9.557417 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 0, "y": 4 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.506836, -4.674980 ] ] ], [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.550781, -4.653080 ], [ -174.528809, -4.653080 ] ] ], [ [ [ -171.276855, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 7, "y": 4 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 7, "y": 3 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.186035, 9.600750 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.579084 ], [ 138.186035, 9.600750 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 0, "y": 8 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ], [ [ [ -171.254883, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ], [ -171.254883, -4.434044 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 1, "y": 8 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 14, "y": 7 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.164062, 9.579084 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.535749 ], [ 138.186035, 9.514079 ], [ 138.164062, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.120117, 9.514079 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.076172, 9.514079 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.164062, 9.579084 ] ] ], [ [ [ 138.186035, 9.579084 ], [ 138.164062, 9.579084 ], [ 138.164062, 9.600750 ], [ 138.186035, 9.600750 ], [ 138.186035, 9.579084 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 15, "y": 8 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.219726 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.373533 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 15, "y": 7 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.219726 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.373533 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 0, "y": 16 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ], [ [ [ -171.254883, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ], [ -171.254883, -4.434044 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 2, "y": 16 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 28, "y": 15 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.164062, 9.579084 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.535749 ], [ 138.186035, 9.514079 ], [ 138.164062, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.120117, 9.514079 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.076172, 9.514079 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.164062, 9.579084 ] ] ], [ [ [ 138.186035, 9.579084 ], [ 138.164062, 9.579084 ], [ 138.164062, 9.600750 ], [ 138.186035, 9.600750 ], [ 138.186035, 9.579084 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 31, "y": 16 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.219726 ], [ 173.408203, 0.219726 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 31, "y": 15 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.219726 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.373533 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 0, "y": 32 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 1, "y": 32 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -171.254883, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ], [ -171.254883, -4.434044 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 4, "y": 33 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 4, "y": 32 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 56, "y": 30 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.164062, 9.579084 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.535749 ], [ 138.186035, 9.514079 ], [ 138.164062, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.120117, 9.514079 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.076172, 9.514079 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.164062, 9.579084 ] ] ], [ [ [ 138.186035, 9.579084 ], [ 138.164062, 9.579084 ], [ 138.164062, 9.600750 ], [ 138.186035, 9.600750 ], [ 138.186035, 9.579084 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 62, "y": 32 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 62, "y": 31 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.219726 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.373533 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 1, "y": 65 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 3, "y": 65 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -171.188965, -3.754634 ], [ -171.166992, -3.754634 ], [ -171.166992, -3.798484 ], [ -171.188965, -3.798484 ], [ -171.188965, -3.754634 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 8, "y": 66 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 8, "y": 65 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.917969, -5.594118 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 113, "y": 60 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.58101, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.208008, 9.557417 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 125, "y": 64 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 125, "y": 63 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
|
||||
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.68967, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
] }
|
@ -1,12 +1,12 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-122.334735,37.877356,-122.281639,37.898925",
|
||||
"bounds": "-122.343750,37.857507,-122.255859,37.926868",
|
||||
"center": "-122.299805,37.892187,12",
|
||||
"description": "tests/join-population/joined-i.mbtiles",
|
||||
"description": "tests/join-population/tabblock_06001420.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }",
|
||||
"maxzoom": "12",
|
||||
"minzoom": "0",
|
||||
"name": "tests/join-population/joined-i.mbtiles",
|
||||
"name": "tests/join-population/tabblock_06001420.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
|
@ -1,21 +1,15 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-122.334735,37.877356,-122.281639,37.898925",
|
||||
"bounds": "-122.343750,37.857507,-122.255859,37.926868",
|
||||
"center": "-122.299805,37.892187,12",
|
||||
"description": "tests/join-population/joined.mbtiles",
|
||||
"description": "tests/join-population/tabblock_06001420.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }",
|
||||
"maxzoom": "12",
|
||||
"minzoom": "0",
|
||||
"name": "tests/join-population/joined.mbtiles",
|
||||
"name": "tests/join-population/tabblock_06001420.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 1, "y": 3 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "tabblock_06001420", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1012", "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "R", "FUNCSTAT10": "S", "ALAND10": 0, "AWATER10": 1632801, "INTPTLAT10": "+37.8842028", "INTPTLON10": "-122.3237534" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.321777, 37.892196 ], [ -122.321777, 37.874853 ], [ -122.343750, 37.874853 ], [ -122.343750, 37.892196 ], [ -122.321777, 37.892196 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 2, "y": 6 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "tabblock_06001420", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3008", "NAME10": "Block 3008", "MTFCC10": "G5040", "UR10": "R", "FUNCSTAT10": "S", "ALAND10": 0, "AWATER10": 1111196, "INTPTLAT10": "+37.8928912", "INTPTLON10": "-122.3202957" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.316284, 37.900865 ], [ -122.310791, 37.896530 ], [ -122.310791, 37.892196 ], [ -122.338257, 37.892196 ], [ -122.316284, 37.900865 ] ] ] } }
|
||||
@ -2501,528 +2495,4 @@
|
||||
{ "type": "Feature", "id": 12345, "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1031", "population": 15, "NAME10": "Block 1031", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 7920, "AWATER10": 0, "INTPTLAT10": "+37.8828579", "INTPTLON10": "-122.2863490" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285728, 37.883559 ], [ -122.286072, 37.882475 ], [ -122.286758, 37.882475 ], [ -122.287145, 37.882577 ], [ -122.287016, 37.882881 ], [ -122.285728, 37.883559 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 12, "x": 656, "y": 1581 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "tabblock_06001420", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3008", "NAME10": "Block 3008", "MTFCC10": "G5040", "UR10": "R", "FUNCSTAT10": "S", "ALAND10": 0, "AWATER10": 1111196, "INTPTLAT10": "+37.8928912", "INTPTLON10": "-122.3202957" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.312486, 37.897428 ], [ -122.312551, 37.897123 ], [ -122.312529, 37.897021 ], [ -122.312443, 37.896937 ], [ -122.312143, 37.896937 ], [ -122.311606, 37.896835 ], [ -122.311521, 37.896717 ], [ -122.311585, 37.896480 ], [ -122.311585, 37.896293 ], [ -122.311521, 37.896175 ], [ -122.311134, 37.896056 ], [ -122.311306, 37.895735 ], [ -122.311134, 37.895531 ], [ -122.311006, 37.895498 ], [ -122.310705, 37.895498 ], [ -122.310662, 37.895396 ], [ -122.310684, 37.895277 ], [ -122.310555, 37.895074 ], [ -122.310233, 37.894786 ], [ -122.310126, 37.894752 ], [ -122.309461, 37.893466 ], [ -122.309096, 37.892212 ], [ -122.309053, 37.891298 ], [ -122.309268, 37.889706 ], [ -122.309439, 37.889130 ], [ -122.309675, 37.888860 ], [ -122.309804, 37.888809 ], [ -122.309933, 37.888826 ], [ -122.310040, 37.888910 ], [ -122.310147, 37.889147 ], [ -122.310855, 37.889757 ], [ -122.310941, 37.889859 ], [ -122.311006, 37.890197 ], [ -122.311134, 37.890248 ], [ -122.311199, 37.890147 ], [ -122.311199, 37.889909 ], [ -122.311349, 37.889909 ], [ -122.311456, 37.889994 ], [ -122.311606, 37.890316 ], [ -122.311692, 37.890401 ], [ -122.312722, 37.891196 ], [ -122.313688, 37.891891 ], [ -122.314267, 37.891958 ], [ -122.314396, 37.892043 ], [ -122.314589, 37.892348 ], [ -122.314696, 37.892450 ], [ -122.314825, 37.892450 ], [ -122.314589, 37.892145 ], [ -122.314525, 37.891925 ], [ -122.314675, 37.891874 ], [ -122.315361, 37.891908 ], [ -122.315662, 37.891874 ], [ -122.315812, 37.891908 ], [ -122.315941, 37.891891 ], [ -122.315984, 37.891806 ], [ -122.315941, 37.891688 ], [ -122.315962, 37.891247 ], [ -122.316027, 37.891146 ], [ -122.317593, 37.890926 ], [ -122.318988, 37.890350 ], [ -122.319589, 37.890028 ], [ -122.319846, 37.889943 ], [ -122.322571, 37.889943 ], [ -122.322700, 37.889977 ], [ -122.322807, 37.890316 ], [ -122.323022, 37.890655 ], [ -122.323129, 37.890993 ], [ -122.323472, 37.891518 ], [ -122.323816, 37.892212 ], [ -122.323966, 37.892399 ], [ -122.324438, 37.892466 ], [ -122.324696, 37.892483 ], [ -122.324975, 37.892450 ], [ -122.325554, 37.892534 ], [ -122.325704, 37.892534 ], [ -122.325833, 37.892500 ], [ -122.325833, 37.892382 ], [ -122.325897, 37.892297 ], [ -122.325618, 37.892162 ], [ -122.325554, 37.892060 ], [ -122.325575, 37.891857 ], [ -122.325532, 37.891518 ], [ -122.325575, 37.890942 ], [ -122.325640, 37.890841 ], [ -122.325811, 37.890790 ], [ -122.326198, 37.890790 ], [ -122.326627, 37.890858 ], [ -122.327313, 37.890790 ], [ -122.327378, 37.890892 ], [ -122.327399, 37.891467 ], [ -122.327507, 37.891552 ], [ -122.327614, 37.891450 ], [ -122.327657, 37.890993 ], [ -122.327614, 37.890773 ], [ -122.327678, 37.890231 ], [ -122.327592, 37.889926 ], [ -122.327571, 37.889672 ], [ -122.334738, 37.889588 ], [ -122.333407, 37.892805 ], [ -122.312486, 37.897428 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3009", "NAME10": "Block 3009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 265574, "AWATER10": 0, "INTPTLAT10": "+37.8905867", "INTPTLON10": "-122.3181131" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.311521, 37.896717 ], [ -122.310662, 37.895752 ], [ -122.309997, 37.894769 ], [ -122.309525, 37.893855 ], [ -122.309225, 37.893059 ], [ -122.309096, 37.892585 ], [ -122.309010, 37.892077 ], [ -122.308967, 37.891721 ], [ -122.308989, 37.891247 ], [ -122.308881, 37.890485 ], [ -122.308967, 37.888775 ], [ -122.309225, 37.887843 ], [ -122.309804, 37.888131 ], [ -122.310190, 37.888521 ], [ -122.311242, 37.889452 ], [ -122.315598, 37.889639 ], [ -122.315791, 37.889520 ], [ -122.327592, 37.889672 ], [ -122.327571, 37.889791 ], [ -122.327678, 37.890231 ], [ -122.327614, 37.890773 ], [ -122.327657, 37.890993 ], [ -122.327614, 37.891450 ], [ -122.327507, 37.891552 ], [ -122.327399, 37.891467 ], [ -122.327378, 37.890892 ], [ -122.327313, 37.890790 ], [ -122.326627, 37.890858 ], [ -122.326198, 37.890790 ], [ -122.325811, 37.890790 ], [ -122.325640, 37.890841 ], [ -122.325575, 37.890942 ], [ -122.325532, 37.891518 ], [ -122.325575, 37.891857 ], [ -122.325554, 37.892060 ], [ -122.325618, 37.892162 ], [ -122.325897, 37.892297 ], [ -122.325833, 37.892382 ], [ -122.325833, 37.892500 ], [ -122.325704, 37.892534 ], [ -122.325554, 37.892534 ], [ -122.324975, 37.892450 ], [ -122.324696, 37.892483 ], [ -122.323966, 37.892399 ], [ -122.323816, 37.892212 ], [ -122.323472, 37.891518 ], [ -122.323129, 37.890993 ], [ -122.323022, 37.890655 ], [ -122.322807, 37.890316 ], [ -122.322700, 37.889977 ], [ -122.322571, 37.889943 ], [ -122.319846, 37.889943 ], [ -122.319589, 37.890028 ], [ -122.318988, 37.890350 ], [ -122.317593, 37.890926 ], [ -122.316027, 37.891146 ], [ -122.315962, 37.891247 ], [ -122.315941, 37.891688 ], [ -122.315984, 37.891806 ], [ -122.315941, 37.891891 ], [ -122.315812, 37.891908 ], [ -122.315662, 37.891874 ], [ -122.315361, 37.891908 ], [ -122.314675, 37.891874 ], [ -122.314525, 37.891925 ], [ -122.314589, 37.892145 ], [ -122.314825, 37.892450 ], [ -122.314696, 37.892450 ], [ -122.314589, 37.892348 ], [ -122.314396, 37.892043 ], [ -122.314267, 37.891958 ], [ -122.313688, 37.891891 ], [ -122.312722, 37.891196 ], [ -122.311692, 37.890401 ], [ -122.311606, 37.890316 ], [ -122.311456, 37.889994 ], [ -122.311349, 37.889909 ], [ -122.311199, 37.889909 ], [ -122.311199, 37.890147 ], [ -122.311134, 37.890248 ], [ -122.311006, 37.890197 ], [ -122.310941, 37.889859 ], [ -122.310855, 37.889757 ], [ -122.310147, 37.889147 ], [ -122.310040, 37.888910 ], [ -122.309933, 37.888826 ], [ -122.309804, 37.888809 ], [ -122.309675, 37.888860 ], [ -122.309439, 37.889130 ], [ -122.309268, 37.889706 ], [ -122.309053, 37.891298 ], [ -122.309096, 37.892212 ], [ -122.309461, 37.893466 ], [ -122.310126, 37.894752 ], [ -122.310233, 37.894786 ], [ -122.310555, 37.895074 ], [ -122.310684, 37.895277 ], [ -122.310662, 37.895396 ], [ -122.310705, 37.895498 ], [ -122.311006, 37.895498 ], [ -122.311134, 37.895531 ], [ -122.311306, 37.895735 ], [ -122.311134, 37.896056 ], [ -122.311521, 37.896175 ], [ -122.311585, 37.896293 ], [ -122.311585, 37.896480 ], [ -122.311521, 37.896717 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3007", "NAME10": "Block 3007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 3648, "AWATER10": 0, "INTPTLAT10": "+37.8971393", "INTPTLON10": "-122.3121267" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.312078, 37.897479 ], [ -122.311585, 37.896852 ], [ -122.311542, 37.896818 ], [ -122.312143, 37.896937 ], [ -122.312443, 37.896937 ], [ -122.312529, 37.897021 ], [ -122.312551, 37.897123 ], [ -122.312486, 37.897428 ], [ -122.312078, 37.897479 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3003", "NAME10": "Block 3003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18792, "AWATER10": 0, "INTPTLAT10": "+37.8946697", "INTPTLON10": "-122.3084294" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309353, 37.897868 ], [ -122.309332, 37.897800 ], [ -122.308280, 37.895227 ], [ -122.307959, 37.894024 ], [ -122.307873, 37.893652 ], [ -122.307808, 37.892788 ], [ -122.307851, 37.892280 ], [ -122.308023, 37.892162 ], [ -122.308238, 37.892179 ], [ -122.308323, 37.893178 ], [ -122.308280, 37.893770 ], [ -122.308345, 37.894414 ], [ -122.309160, 37.896734 ], [ -122.309396, 37.897309 ], [ -122.309525, 37.897834 ], [ -122.309353, 37.897868 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3005", "NAME10": "Block 3005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 30820, "AWATER10": 0, "INTPTLAT10": "+37.8910154", "INTPTLON10": "-122.3085406" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.311478, 37.897631 ], [ -122.309933, 37.895667 ], [ -122.309289, 37.894566 ], [ -122.308989, 37.893923 ], [ -122.308495, 37.892382 ], [ -122.308087, 37.890604 ], [ -122.308345, 37.890079 ], [ -122.308967, 37.892551 ], [ -122.309139, 37.893127 ], [ -122.309418, 37.893889 ], [ -122.309890, 37.894820 ], [ -122.310512, 37.895802 ], [ -122.310941, 37.896412 ], [ -122.311864, 37.897529 ], [ -122.311478, 37.897631 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3004", "NAME10": "Block 3004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 59347, "AWATER10": 0, "INTPTLAT10": "+37.8955812", "INTPTLON10": "-122.3094534" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309525, 37.897834 ], [ -122.309396, 37.897309 ], [ -122.309160, 37.896734 ], [ -122.308345, 37.894414 ], [ -122.308280, 37.893770 ], [ -122.308323, 37.893178 ], [ -122.308259, 37.892297 ], [ -122.307894, 37.890976 ], [ -122.308087, 37.890604 ], [ -122.308495, 37.892382 ], [ -122.308989, 37.893923 ], [ -122.309289, 37.894566 ], [ -122.309933, 37.895667 ], [ -122.311478, 37.897631 ], [ -122.310898, 37.897834 ], [ -122.309525, 37.897834 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3006", "NAME10": "Block 3006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19563, "AWATER10": 24, "INTPTLAT10": "+37.8904059", "INTPTLON10": "-122.3086941" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.311864, 37.897529 ], [ -122.310941, 37.896412 ], [ -122.310512, 37.895802 ], [ -122.309697, 37.894465 ], [ -122.309418, 37.893889 ], [ -122.309139, 37.893127 ], [ -122.308710, 37.891603 ], [ -122.308345, 37.890079 ], [ -122.308967, 37.888775 ], [ -122.308881, 37.890485 ], [ -122.308989, 37.891247 ], [ -122.308967, 37.891721 ], [ -122.309010, 37.892077 ], [ -122.309096, 37.892585 ], [ -122.309225, 37.893059 ], [ -122.309525, 37.893855 ], [ -122.309997, 37.894769 ], [ -122.310662, 37.895752 ], [ -122.311606, 37.896835 ], [ -122.311542, 37.896818 ], [ -122.312078, 37.897479 ], [ -122.311864, 37.897529 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3001", "NAME10": "Block 3001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24651, "AWATER10": 0, "INTPTLAT10": "+37.8921989", "INTPTLON10": "-122.3075517" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309353, 37.897868 ], [ -122.309289, 37.897783 ], [ -122.307701, 37.894244 ], [ -122.307229, 37.893042 ], [ -122.307100, 37.892551 ], [ -122.307014, 37.891925 ], [ -122.307079, 37.890875 ], [ -122.307250, 37.890130 ], [ -122.307529, 37.889503 ], [ -122.307894, 37.890976 ], [ -122.307658, 37.891671 ], [ -122.307572, 37.892246 ], [ -122.307529, 37.892619 ], [ -122.307594, 37.893296 ], [ -122.307787, 37.893974 ], [ -122.308280, 37.895227 ], [ -122.309353, 37.897868 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3000", "NAME10": "Block 3000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 27350, "AWATER10": 0, "INTPTLAT10": "+37.8907736", "INTPTLON10": "-122.3067658" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308967, 37.897987 ], [ -122.308602, 37.897157 ], [ -122.308495, 37.896835 ], [ -122.307229, 37.893753 ], [ -122.306671, 37.892670 ], [ -122.306628, 37.892399 ], [ -122.306650, 37.892229 ], [ -122.306714, 37.892009 ], [ -122.306693, 37.891704 ], [ -122.306414, 37.890807 ], [ -122.306714, 37.890739 ], [ -122.306821, 37.890688 ], [ -122.307229, 37.889994 ], [ -122.307401, 37.889757 ], [ -122.307208, 37.890282 ], [ -122.307036, 37.891230 ], [ -122.307014, 37.891925 ], [ -122.307100, 37.892551 ], [ -122.307229, 37.893042 ], [ -122.307701, 37.894244 ], [ -122.309332, 37.897868 ], [ -122.309010, 37.897953 ], [ -122.308967, 37.897987 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3002", "NAME10": "Block 3002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 9773, "AWATER10": 0, "INTPTLAT10": "+37.8920318", "INTPTLON10": "-122.3077138" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308280, 37.895227 ], [ -122.307701, 37.893720 ], [ -122.307572, 37.893127 ], [ -122.307529, 37.892619 ], [ -122.307658, 37.891671 ], [ -122.307894, 37.890976 ], [ -122.308238, 37.892179 ], [ -122.308023, 37.892162 ], [ -122.307851, 37.892280 ], [ -122.307808, 37.893025 ], [ -122.307873, 37.893652 ], [ -122.308280, 37.895227 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1006", "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1461, "AWATER10": 0, "INTPTLAT10": "+37.8973748", "INTPTLON10": "-122.3012481" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301629, 37.898528 ], [ -122.301478, 37.898207 ], [ -122.300985, 37.896700 ], [ -122.301135, 37.896683 ], [ -122.301629, 37.898528 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1005", "population": 4, "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14639, "AWATER10": 0, "INTPTLAT10": "+37.8976068", "INTPTLON10": "-122.3008394" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301500, 37.898528 ], [ -122.300599, 37.898308 ], [ -122.300127, 37.896869 ], [ -122.300985, 37.896700 ], [ -122.301607, 37.898528 ], [ -122.301500, 37.898528 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1004", "population": 56, "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11306, "AWATER10": 0, "INTPTLAT10": "+37.8976015", "INTPTLON10": "-122.2999287" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300599, 37.898308 ], [ -122.300298, 37.898241 ], [ -122.299719, 37.898291 ], [ -122.299290, 37.897055 ], [ -122.300127, 37.896869 ], [ -122.300599, 37.898308 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "2000", "population": 1118, "NAME10": "Block 2000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 412555, "AWATER10": 0, "INTPTLAT10": "+37.8949184", "INTPTLON10": "-122.3048891" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301629, 37.898528 ], [ -122.301135, 37.896683 ], [ -122.300920, 37.896022 ], [ -122.302616, 37.895667 ], [ -122.302015, 37.893821 ], [ -122.302852, 37.893652 ], [ -122.303109, 37.894515 ], [ -122.303131, 37.894261 ], [ -122.303088, 37.893855 ], [ -122.303131, 37.893533 ], [ -122.303302, 37.893144 ], [ -122.303495, 37.892839 ], [ -122.303088, 37.891603 ], [ -122.303324, 37.890841 ], [ -122.303452, 37.890536 ], [ -122.303560, 37.890350 ], [ -122.303731, 37.890180 ], [ -122.303967, 37.890045 ], [ -122.304418, 37.889909 ], [ -122.304933, 37.889825 ], [ -122.306027, 37.889588 ], [ -122.306693, 37.891704 ], [ -122.306714, 37.892009 ], [ -122.306628, 37.892399 ], [ -122.306671, 37.892670 ], [ -122.307229, 37.893753 ], [ -122.308495, 37.896835 ], [ -122.308602, 37.897157 ], [ -122.308967, 37.897987 ], [ -122.308795, 37.898037 ], [ -122.306199, 37.898241 ], [ -122.305341, 37.898427 ], [ -122.304590, 37.898427 ], [ -122.303731, 37.898528 ], [ -122.301629, 37.898528 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1008", "population": 11, "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15574, "AWATER10": 0, "INTPTLAT10": "+37.8926328", "INTPTLON10": "-122.3029106" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303109, 37.894515 ], [ -122.302251, 37.891772 ], [ -122.303088, 37.891603 ], [ -122.303495, 37.892839 ], [ -122.303302, 37.893144 ], [ -122.303131, 37.893533 ], [ -122.303088, 37.893855 ], [ -122.303131, 37.894261 ], [ -122.303109, 37.894515 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1001", "population": 41, "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16165, "AWATER10": 0, "INTPTLAT10": "+37.8948170", "INTPTLON10": "-122.3018829" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301779, 37.895836 ], [ -122.301178, 37.893990 ], [ -122.302015, 37.893821 ], [ -122.302616, 37.895667 ], [ -122.301779, 37.895836 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1007", "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 914, "AWATER10": 0, "INTPTLAT10": "+37.8963621", "INTPTLON10": "-122.3009413" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300985, 37.896700 ], [ -122.300792, 37.896056 ], [ -122.300920, 37.896022 ], [ -122.301135, 37.896683 ], [ -122.300985, 37.896700 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1014", "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1324, "AWATER10": 0, "INTPTLAT10": "+37.8955459", "INTPTLON10": "-122.3006834" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300792, 37.896056 ], [ -122.300470, 37.895074 ], [ -122.300599, 37.895057 ], [ -122.300920, 37.896022 ], [ -122.300792, 37.896056 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1008", "population": 11, "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14452, "AWATER10": 0, "INTPTLAT10": "+37.8959674", "INTPTLON10": "-122.3002912" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300127, 37.896869 ], [ -122.299612, 37.895260 ], [ -122.300470, 37.895074 ], [ -122.300792, 37.896056 ], [ -122.300985, 37.896700 ], [ -122.300127, 37.896869 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1000", "population": 42, "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16605, "AWATER10": 0, "INTPTLAT10": "+37.8950031", "INTPTLON10": "-122.3010393" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300920, 37.896022 ], [ -122.300599, 37.895057 ], [ -122.300341, 37.894160 ], [ -122.301178, 37.893990 ], [ -122.301779, 37.895836 ], [ -122.300920, 37.896022 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1007", "population": 34, "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16120, "AWATER10": 0, "INTPTLAT10": "+37.8927903", "INTPTLON10": "-122.3021281" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302015, 37.893821 ], [ -122.301435, 37.891942 ], [ -122.302251, 37.891772 ], [ -122.302852, 37.893652 ], [ -122.302015, 37.893821 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1002", "population": 46, "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16535, "AWATER10": 0, "INTPTLAT10": "+37.8929602", "INTPTLON10": "-122.3012875" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301178, 37.893990 ], [ -122.300577, 37.892111 ], [ -122.301435, 37.891942 ], [ -122.302015, 37.893821 ], [ -122.301178, 37.893990 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3003", "NAME10": "Block 3003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 2234, "AWATER10": 0, "INTPTLAT10": "+37.8942520", "INTPTLON10": "-122.3002730" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300470, 37.895074 ], [ -122.299955, 37.893466 ], [ -122.300084, 37.893432 ], [ -122.300556, 37.894871 ], [ -122.300599, 37.895057 ], [ -122.300470, 37.895074 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1003", "population": 24, "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16635, "AWATER10": 0, "INTPTLAT10": "+37.8931288", "INTPTLON10": "-122.3004328" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300341, 37.894160 ], [ -122.300084, 37.893432 ], [ -122.299719, 37.892297 ], [ -122.300577, 37.892111 ], [ -122.301178, 37.893990 ], [ -122.300341, 37.894160 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3004", "population": 12, "NAME10": "Block 3004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1457, "AWATER10": 0, "INTPTLAT10": "+37.8928701", "INTPTLON10": "-122.2998265" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299955, 37.893466 ], [ -122.299590, 37.892314 ], [ -122.299719, 37.892297 ], [ -122.300084, 37.893432 ], [ -122.299955, 37.893466 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1012", "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "R", "FUNCSTAT10": "S", "ALAND10": 0, "AWATER10": 1632801, "INTPTLAT10": "+37.8842028", "INTPTLON10": "-122.3237534" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.327571, 37.889672 ], [ -122.327442, 37.889130 ], [ -122.327571, 37.888690 ], [ -122.327421, 37.888622 ], [ -122.327034, 37.888690 ], [ -122.326713, 37.888589 ], [ -122.325447, 37.888081 ], [ -122.324910, 37.887911 ], [ -122.324610, 37.887877 ], [ -122.322936, 37.888284 ], [ -122.322936, 37.888843 ], [ -122.322850, 37.889063 ], [ -122.322764, 37.889164 ], [ -122.322528, 37.889300 ], [ -122.322249, 37.889384 ], [ -122.321928, 37.889401 ], [ -122.321649, 37.889368 ], [ -122.321348, 37.889266 ], [ -122.320919, 37.889249 ], [ -122.319610, 37.889435 ], [ -122.318945, 37.889384 ], [ -122.317808, 37.889351 ], [ -122.317250, 37.889283 ], [ -122.316842, 37.888927 ], [ -122.316756, 37.888741 ], [ -122.316585, 37.888589 ], [ -122.316048, 37.887911 ], [ -122.315834, 37.887386 ], [ -122.315898, 37.886810 ], [ -122.315876, 37.886573 ], [ -122.315941, 37.886235 ], [ -122.316477, 37.886116 ], [ -122.316456, 37.885947 ], [ -122.315984, 37.885947 ], [ -122.316027, 37.885659 ], [ -122.316864, 37.885642 ], [ -122.316864, 37.885760 ], [ -122.317035, 37.885760 ], [ -122.317057, 37.885489 ], [ -122.316027, 37.885506 ], [ -122.316091, 37.885439 ], [ -122.315705, 37.885269 ], [ -122.315447, 37.884710 ], [ -122.315469, 37.884592 ], [ -122.315619, 37.884406 ], [ -122.315662, 37.884287 ], [ -122.315598, 37.884067 ], [ -122.315469, 37.884016 ], [ -122.315319, 37.884067 ], [ -122.315018, 37.883965 ], [ -122.314589, 37.883525 ], [ -122.314374, 37.883373 ], [ -122.314138, 37.883085 ], [ -122.313924, 37.882644 ], [ -122.313602, 37.882424 ], [ -122.313044, 37.882204 ], [ -122.312465, 37.881391 ], [ -122.327635, 37.877360 ], [ -122.334738, 37.889588 ], [ -122.327571, 37.889672 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1011", "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 542505, "AWATER10": 0, "INTPTLAT10": "+37.8862375", "INTPTLON10": "-122.3141377" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.327571, 37.889672 ], [ -122.315791, 37.889520 ], [ -122.315598, 37.889639 ], [ -122.311242, 37.889452 ], [ -122.310190, 37.888521 ], [ -122.309804, 37.888131 ], [ -122.309783, 37.888047 ], [ -122.309353, 37.887674 ], [ -122.309289, 37.887877 ], [ -122.309225, 37.887843 ], [ -122.309289, 37.887589 ], [ -122.309289, 37.887318 ], [ -122.309461, 37.887166 ], [ -122.309546, 37.886980 ], [ -122.309525, 37.886455 ], [ -122.308881, 37.884016 ], [ -122.308645, 37.883491 ], [ -122.308388, 37.882289 ], [ -122.312465, 37.881391 ], [ -122.313044, 37.882204 ], [ -122.313602, 37.882424 ], [ -122.313924, 37.882644 ], [ -122.314138, 37.883085 ], [ -122.314374, 37.883373 ], [ -122.314589, 37.883525 ], [ -122.315018, 37.883965 ], [ -122.315319, 37.884067 ], [ -122.315469, 37.884016 ], [ -122.315598, 37.884067 ], [ -122.315662, 37.884287 ], [ -122.315619, 37.884406 ], [ -122.315469, 37.884592 ], [ -122.315447, 37.884710 ], [ -122.315705, 37.885269 ], [ -122.316091, 37.885439 ], [ -122.316027, 37.885506 ], [ -122.317057, 37.885489 ], [ -122.317035, 37.885760 ], [ -122.316864, 37.885760 ], [ -122.316864, 37.885642 ], [ -122.316027, 37.885659 ], [ -122.315984, 37.885947 ], [ -122.316456, 37.885947 ], [ -122.316477, 37.886116 ], [ -122.315941, 37.886235 ], [ -122.315876, 37.886573 ], [ -122.315898, 37.886810 ], [ -122.315834, 37.887386 ], [ -122.316048, 37.887911 ], [ -122.316585, 37.888589 ], [ -122.316756, 37.888741 ], [ -122.316842, 37.888927 ], [ -122.317250, 37.889283 ], [ -122.317808, 37.889351 ], [ -122.318945, 37.889384 ], [ -122.319610, 37.889435 ], [ -122.320919, 37.889249 ], [ -122.321348, 37.889266 ], [ -122.321649, 37.889368 ], [ -122.321928, 37.889401 ], [ -122.322249, 37.889384 ], [ -122.322528, 37.889300 ], [ -122.322764, 37.889164 ], [ -122.322850, 37.889063 ], [ -122.322936, 37.888843 ], [ -122.322936, 37.888284 ], [ -122.324610, 37.887877 ], [ -122.324910, 37.887911 ], [ -122.325447, 37.888081 ], [ -122.326713, 37.888589 ], [ -122.327034, 37.888690 ], [ -122.327421, 37.888622 ], [ -122.327571, 37.888690 ], [ -122.327442, 37.889130 ], [ -122.327571, 37.889672 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3030", "NAME10": "Block 3030", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 744, "AWATER10": 0, "INTPTLAT10": "+37.8878859", "INTPTLON10": "-122.3094998" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309804, 37.888131 ], [ -122.309611, 37.888030 ], [ -122.309332, 37.887894 ], [ -122.309289, 37.887877 ], [ -122.309353, 37.887674 ], [ -122.309783, 37.888047 ], [ -122.309804, 37.888131 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3010", "NAME10": "Block 3010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1835, "AWATER10": 0, "INTPTLAT10": "+37.8878520", "INTPTLON10": "-122.3091212" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308967, 37.888775 ], [ -122.309053, 37.887437 ], [ -122.309289, 37.887318 ], [ -122.309289, 37.887589 ], [ -122.309096, 37.888385 ], [ -122.308967, 37.888775 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3011", "NAME10": "Block 3011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10961, "AWATER10": 0, "INTPTLAT10": "+37.8885068", "INTPTLON10": "-122.3086806" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308345, 37.890079 ], [ -122.308345, 37.889215 ], [ -122.308366, 37.888995 ], [ -122.308538, 37.888284 ], [ -122.308495, 37.887640 ], [ -122.308538, 37.887556 ], [ -122.308624, 37.887335 ], [ -122.308881, 37.887420 ], [ -122.309053, 37.887437 ], [ -122.308967, 37.888775 ], [ -122.308345, 37.890079 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3016", "population": 33, "NAME10": "Block 3016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 12044, "AWATER10": 0, "INTPTLAT10": "+37.8899556", "INTPTLON10": "-122.3067458" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.306414, 37.890807 ], [ -122.306242, 37.890248 ], [ -122.306607, 37.890197 ], [ -122.306306, 37.890096 ], [ -122.306135, 37.889909 ], [ -122.306027, 37.889588 ], [ -122.307487, 37.889317 ], [ -122.307529, 37.889537 ], [ -122.306821, 37.890688 ], [ -122.306714, 37.890739 ], [ -122.306414, 37.890807 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3017", "NAME10": "Block 3017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 393, "AWATER10": 0, "INTPTLAT10": "+37.8901345", "INTPTLON10": "-122.3063016" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.306242, 37.890248 ], [ -122.306135, 37.889909 ], [ -122.306306, 37.890096 ], [ -122.306607, 37.890197 ], [ -122.306242, 37.890248 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3012", "NAME10": "Block 3012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14539, "AWATER10": 0, "INTPTLAT10": "+37.8894024", "INTPTLON10": "-122.3080555" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.307894, 37.890976 ], [ -122.307529, 37.889503 ], [ -122.308323, 37.888047 ], [ -122.308495, 37.887640 ], [ -122.308538, 37.888284 ], [ -122.308366, 37.888995 ], [ -122.308323, 37.889520 ], [ -122.308345, 37.890079 ], [ -122.307894, 37.890976 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3029", "NAME10": "Block 3029", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14565, "AWATER10": 0, "INTPTLAT10": "+37.8878852", "INTPTLON10": "-122.3078467" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.307701, 37.889181 ], [ -122.307208, 37.887200 ], [ -122.307851, 37.887200 ], [ -122.308130, 37.887234 ], [ -122.308624, 37.887335 ], [ -122.308581, 37.887454 ], [ -122.308323, 37.888047 ], [ -122.307701, 37.889181 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3018", "population": 29, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 9739, "AWATER10": 0, "INTPTLAT10": "+37.8891261", "INTPTLON10": "-122.3066496" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.306027, 37.889588 ], [ -122.305834, 37.888961 ], [ -122.307293, 37.888673 ], [ -122.307487, 37.889317 ], [ -122.306027, 37.889588 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3028", "population": 1, "NAME10": "Block 3028", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 444, "AWATER10": 0, "INTPTLAT10": "+37.8890070", "INTPTLON10": "-122.3053896" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.304976, 37.889130 ], [ -122.304955, 37.889080 ], [ -122.305813, 37.888910 ], [ -122.305834, 37.888961 ], [ -122.304976, 37.889130 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3015", "population": 7, "NAME10": "Block 3015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 782, "AWATER10": 0, "INTPTLAT10": "+37.8887826", "INTPTLON10": "-122.3065328" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.305834, 37.888961 ], [ -122.305813, 37.888910 ], [ -122.307293, 37.888622 ], [ -122.307293, 37.888673 ], [ -122.305834, 37.888961 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3014", "population": 35, "NAME10": "Block 3014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10339, "AWATER10": 0, "INTPTLAT10": "+37.8884185", "INTPTLON10": "-122.3064403" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.305813, 37.888910 ], [ -122.305598, 37.888250 ], [ -122.307122, 37.887945 ], [ -122.307293, 37.888622 ], [ -122.305813, 37.888910 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3013", "NAME10": "Block 3013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 7694, "AWATER10": 0, "INTPTLAT10": "+37.8877645", "INTPTLON10": "-122.3071265" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.307529, 37.889503 ], [ -122.307079, 37.887793 ], [ -122.307014, 37.887573 ], [ -122.306950, 37.887471 ], [ -122.306821, 37.887454 ], [ -122.306070, 37.887505 ], [ -122.305512, 37.887505 ], [ -122.305427, 37.887471 ], [ -122.306993, 37.887200 ], [ -122.307208, 37.887200 ], [ -122.307701, 37.889181 ], [ -122.307529, 37.889503 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1008", "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 447, "AWATER10": 0, "INTPTLAT10": "+37.8873248", "INTPTLON10": "-122.3088095" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309053, 37.887437 ], [ -122.308881, 37.887420 ], [ -122.308624, 37.887335 ], [ -122.308667, 37.887217 ], [ -122.308967, 37.887335 ], [ -122.309053, 37.887437 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1009", "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 7572, "AWATER10": 0, "INTPTLAT10": "+37.8865874", "INTPTLON10": "-122.3090315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309053, 37.887437 ], [ -122.308967, 37.887335 ], [ -122.308667, 37.887217 ], [ -122.308838, 37.886472 ], [ -122.309010, 37.885388 ], [ -122.309010, 37.885134 ], [ -122.309268, 37.886319 ], [ -122.309332, 37.886827 ], [ -122.309289, 37.887318 ], [ -122.309053, 37.887437 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1010", "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6192, "AWATER10": 0, "INTPTLAT10": "+37.8856733", "INTPTLON10": "-122.3091896" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.309289, 37.887318 ], [ -122.309332, 37.886827 ], [ -122.309268, 37.886319 ], [ -122.309010, 37.885134 ], [ -122.308645, 37.883491 ], [ -122.308881, 37.884016 ], [ -122.309525, 37.886455 ], [ -122.309525, 37.887064 ], [ -122.309461, 37.887166 ], [ -122.309289, 37.887318 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1006", "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 59431, "AWATER10": 0, "INTPTLAT10": "+37.8849426", "INTPTLON10": "-122.3081455" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308667, 37.887217 ], [ -122.308044, 37.887098 ], [ -122.307401, 37.887064 ], [ -122.307229, 37.887081 ], [ -122.307358, 37.886726 ], [ -122.307572, 37.884169 ], [ -122.307830, 37.882018 ], [ -122.308366, 37.882187 ], [ -122.308645, 37.883491 ], [ -122.309010, 37.885134 ], [ -122.309010, 37.885388 ], [ -122.308838, 37.886472 ], [ -122.308667, 37.887217 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1007", "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1737, "AWATER10": 0, "INTPTLAT10": "+37.8871632", "INTPTLON10": "-122.3079226" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.308624, 37.887335 ], [ -122.308517, 37.887318 ], [ -122.307851, 37.887200 ], [ -122.307208, 37.887200 ], [ -122.307229, 37.887081 ], [ -122.307401, 37.887064 ], [ -122.308044, 37.887098 ], [ -122.308667, 37.887217 ], [ -122.308624, 37.887335 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3031", "population": 38, "NAME10": "Block 3031", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 9685, "AWATER10": 0, "INTPTLAT10": "+37.8877891", "INTPTLON10": "-122.3061951" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.305598, 37.888250 ], [ -122.305341, 37.887471 ], [ -122.305427, 37.887471 ], [ -122.305512, 37.887505 ], [ -122.306070, 37.887505 ], [ -122.306907, 37.887454 ], [ -122.306993, 37.887522 ], [ -122.307122, 37.887945 ], [ -122.305598, 37.888250 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1005", "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 52400, "AWATER10": 0, "INTPTLAT10": "+37.8837458", "INTPTLON10": "-122.3069617" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.307165, 37.887081 ], [ -122.307100, 37.886878 ], [ -122.306800, 37.885591 ], [ -122.306178, 37.883271 ], [ -122.305813, 37.882102 ], [ -122.307100, 37.881882 ], [ -122.307315, 37.881916 ], [ -122.307358, 37.881865 ], [ -122.307830, 37.882018 ], [ -122.307572, 37.884169 ], [ -122.307358, 37.886726 ], [ -122.307229, 37.887081 ], [ -122.307165, 37.887081 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3021", "population": 23, "NAME10": "Block 3021", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11997, "AWATER10": 0, "INTPTLAT10": "+37.8902784", "INTPTLON10": "-122.3030396" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303088, 37.891603 ], [ -122.302465, 37.889622 ], [ -122.303302, 37.889452 ], [ -122.303560, 37.890350 ], [ -122.303324, 37.890841 ], [ -122.303088, 37.891603 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3019", "population": 50, "NAME10": "Block 3019", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17581, "AWATER10": 0, "INTPTLAT10": "+37.8895455", "INTPTLON10": "-122.3046051" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303560, 37.890350 ], [ -122.303302, 37.889452 ], [ -122.305834, 37.888961 ], [ -122.306027, 37.889588 ], [ -122.304161, 37.889977 ], [ -122.303967, 37.890045 ], [ -122.303731, 37.890180 ], [ -122.303560, 37.890350 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3020", "population": 1, "NAME10": "Block 3020", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 409, "AWATER10": 0, "INTPTLAT10": "+37.8891773", "INTPTLON10": "-122.3045386" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.304139, 37.889283 ], [ -122.304118, 37.889249 ], [ -122.304955, 37.889080 ], [ -122.304976, 37.889130 ], [ -122.304139, 37.889283 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3027", "population": 33, "NAME10": "Block 3027", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 13106, "AWATER10": 0, "INTPTLAT10": "+37.8882387", "INTPTLON10": "-122.3051246" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.304955, 37.889080 ], [ -122.304461, 37.887522 ], [ -122.305341, 37.887471 ], [ -122.305813, 37.888910 ], [ -122.304955, 37.889080 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3026", "population": 33, "NAME10": "Block 3026", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14219, "AWATER10": 0, "INTPTLAT10": "+37.8883405", "INTPTLON10": "-122.3042616" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.304118, 37.889249 ], [ -122.303581, 37.887556 ], [ -122.304461, 37.887522 ], [ -122.304955, 37.889080 ], [ -122.304118, 37.889249 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3025", "NAME10": "Block 3025", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 406, "AWATER10": 0, "INTPTLAT10": "+37.8893398", "INTPTLON10": "-122.3036979" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303302, 37.889452 ], [ -122.303281, 37.889401 ], [ -122.304118, 37.889249 ], [ -122.304139, 37.889283 ], [ -122.303302, 37.889452 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3022", "NAME10": "Block 3022", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 411, "AWATER10": 0, "INTPTLAT10": "+37.8895077", "INTPTLON10": "-122.3028537" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302465, 37.889622 ], [ -122.302444, 37.889571 ], [ -122.303281, 37.889401 ], [ -122.303302, 37.889452 ], [ -122.302465, 37.889622 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3024", "population": 31, "NAME10": "Block 3024", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15240, "AWATER10": 0, "INTPTLAT10": "+37.8884411", "INTPTLON10": "-122.3034025" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303281, 37.889401 ], [ -122.302701, 37.887589 ], [ -122.303581, 37.887556 ], [ -122.304118, 37.889249 ], [ -122.303281, 37.889401 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1009", "population": 37, "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17210, "AWATER10": 0, "INTPTLAT10": "+37.8906969", "INTPTLON10": "-122.3023492" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302251, 37.891772 ], [ -122.301714, 37.890113 ], [ -122.301650, 37.889791 ], [ -122.302465, 37.889622 ], [ -122.303088, 37.891603 ], [ -122.302251, 37.891772 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1006", "population": 87, "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17308, "AWATER10": 0, "INTPTLAT10": "+37.8908584", "INTPTLON10": "-122.3015099" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301435, 37.891942 ], [ -122.300770, 37.889960 ], [ -122.301650, 37.889791 ], [ -122.301714, 37.890113 ], [ -122.302251, 37.891772 ], [ -122.301435, 37.891942 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1004", "population": 38, "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17893, "AWATER10": 0, "INTPTLAT10": "+37.8912006", "INTPTLON10": "-122.2998090" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299719, 37.892297 ], [ -122.299547, 37.891806 ], [ -122.299054, 37.890265 ], [ -122.299311, 37.890248 ], [ -122.299933, 37.890130 ], [ -122.300577, 37.892111 ], [ -122.299719, 37.892297 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1005", "population": 86, "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17622, "AWATER10": 0, "INTPTLAT10": "+37.8910287", "INTPTLON10": "-122.3006658" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300577, 37.892111 ], [ -122.299933, 37.890130 ], [ -122.300770, 37.889960 ], [ -122.301435, 37.891942 ], [ -122.300577, 37.892111 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "3023", "population": 33, "NAME10": "Block 3023", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16332, "AWATER10": 0, "INTPTLAT10": "+37.8885408", "INTPTLON10": "-122.3025479" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302444, 37.889571 ], [ -122.301822, 37.887623 ], [ -122.302701, 37.887589 ], [ -122.303281, 37.889401 ], [ -122.302444, 37.889571 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1010", "population": 43, "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 20386, "AWATER10": 0, "INTPTLAT10": "+37.8886345", "INTPTLON10": "-122.3016225" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.301650, 37.889791 ], [ -122.300684, 37.887742 ], [ -122.301822, 37.887623 ], [ -122.302444, 37.889571 ], [ -122.302465, 37.889622 ], [ -122.301650, 37.889791 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1012", "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 372, "AWATER10": 0, "INTPTLAT10": "+37.8900118", "INTPTLON10": "-122.3003351" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299933, 37.890130 ], [ -122.299912, 37.890079 ], [ -122.300770, 37.889909 ], [ -122.300770, 37.889960 ], [ -122.300105, 37.890096 ], [ -122.299933, 37.890130 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1011", "population": 69, "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16453, "AWATER10": 0, "INTPTLAT10": "+37.8888638", "INTPTLON10": "-122.3008054" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300770, 37.889960 ], [ -122.300062, 37.887725 ], [ -122.300684, 37.887742 ], [ -122.301650, 37.889791 ], [ -122.300770, 37.889960 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1015", "population": 70, "NAME10": "Block 1015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19773, "AWATER10": 0, "INTPTLAT10": "+37.8888596", "INTPTLON10": "-122.2999642" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299912, 37.890079 ], [ -122.299182, 37.887742 ], [ -122.300062, 37.887725 ], [ -122.300770, 37.889909 ], [ -122.299912, 37.890079 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1002", "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5453, "AWATER10": 0, "INTPTLAT10": "+37.8874129", "INTPTLON10": "-122.3045679" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302101, 37.887606 ], [ -122.302079, 37.887505 ], [ -122.305834, 37.887318 ], [ -122.307229, 37.887081 ], [ -122.307208, 37.887200 ], [ -122.306993, 37.887200 ], [ -122.305427, 37.887471 ], [ -122.302208, 37.887606 ], [ -122.302101, 37.887606 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1001", "population": 212, "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 98716, "AWATER10": 0, "INTPTLAT10": "+37.8865962", "INTPTLON10": "-122.3039801" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300684, 37.887742 ], [ -122.300963, 37.887657 ], [ -122.300513, 37.886319 ], [ -122.302337, 37.886031 ], [ -122.304590, 37.885845 ], [ -122.304482, 37.885337 ], [ -122.306800, 37.885591 ], [ -122.307165, 37.887081 ], [ -122.305834, 37.887318 ], [ -122.302079, 37.887505 ], [ -122.302101, 37.887606 ], [ -122.300684, 37.887742 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1016", "population": 116, "NAME10": "Block 1016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 8910, "AWATER10": 0, "INTPTLAT10": "+37.8847438", "INTPTLON10": "-122.3040957" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.304225, 37.885879 ], [ -122.303903, 37.884744 ], [ -122.303603, 37.883660 ], [ -122.303967, 37.883593 ], [ -122.304525, 37.885473 ], [ -122.304590, 37.885845 ], [ -122.304225, 37.885879 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1003", "population": 145, "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 82198, "AWATER10": 0, "INTPTLAT10": "+37.8837071", "INTPTLON10": "-122.3049494" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.306800, 37.885591 ], [ -122.304482, 37.885337 ], [ -122.303967, 37.883593 ], [ -122.303452, 37.883694 ], [ -122.303431, 37.882881 ], [ -122.302938, 37.883017 ], [ -122.302616, 37.883068 ], [ -122.302444, 37.882763 ], [ -122.302358, 37.882509 ], [ -122.302530, 37.882458 ], [ -122.302744, 37.882458 ], [ -122.302959, 37.882407 ], [ -122.303131, 37.882323 ], [ -122.303324, 37.882289 ], [ -122.303967, 37.882255 ], [ -122.304525, 37.882272 ], [ -122.305233, 37.882221 ], [ -122.305813, 37.882102 ], [ -122.306199, 37.883322 ], [ -122.306800, 37.885591 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1017", "population": 90, "NAME10": "Block 1017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6144, "AWATER10": 0, "INTPTLAT10": "+37.8847470", "INTPTLON10": "-122.3037488" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303946, 37.885896 ], [ -122.303903, 37.885659 ], [ -122.303302, 37.883711 ], [ -122.303603, 37.883660 ], [ -122.304225, 37.885879 ], [ -122.303946, 37.885896 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1013", "population": 133, "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 9671, "AWATER10": 0, "INTPTLAT10": "+37.8848967", "INTPTLON10": "-122.3034182" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.303431, 37.885947 ], [ -122.302959, 37.883796 ], [ -122.303302, 37.883711 ], [ -122.303903, 37.885659 ], [ -122.303946, 37.885896 ], [ -122.303431, 37.885947 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1014", "population": 414, "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 85670, "AWATER10": 0, "INTPTLAT10": "+37.8846770", "INTPTLON10": "-122.3015769" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300513, 37.886319 ], [ -122.299933, 37.884440 ], [ -122.299912, 37.884067 ], [ -122.299805, 37.884084 ], [ -122.299826, 37.883881 ], [ -122.300019, 37.883389 ], [ -122.300234, 37.883220 ], [ -122.300534, 37.883288 ], [ -122.300663, 37.883356 ], [ -122.300856, 37.883406 ], [ -122.300985, 37.883406 ], [ -122.300942, 37.883389 ], [ -122.300985, 37.883356 ], [ -122.301114, 37.883356 ], [ -122.301414, 37.883271 ], [ -122.301607, 37.883254 ], [ -122.301650, 37.883220 ], [ -122.302079, 37.883119 ], [ -122.302616, 37.883068 ], [ -122.302959, 37.883796 ], [ -122.303431, 37.885947 ], [ -122.302508, 37.886014 ], [ -122.301800, 37.886099 ], [ -122.300513, 37.886319 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1004", "population": 30, "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5050, "AWATER10": 0, "INTPTLAT10": "+37.8833234", "INTPTLON10": "-122.3030968" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.302959, 37.883796 ], [ -122.302616, 37.883068 ], [ -122.302938, 37.883017 ], [ -122.303431, 37.882881 ], [ -122.303452, 37.883694 ], [ -122.302959, 37.883796 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1020", "population": 44, "NAME10": "Block 1020", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 12062, "AWATER10": 0, "INTPTLAT10": "+37.8829654", "INTPTLON10": "-122.3013966" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300856, 37.883406 ], [ -122.300663, 37.883356 ], [ -122.300534, 37.883288 ], [ -122.300341, 37.883254 ], [ -122.300298, 37.883220 ], [ -122.300277, 37.883119 ], [ -122.300212, 37.882881 ], [ -122.300642, 37.882814 ], [ -122.301092, 37.882780 ], [ -122.301908, 37.882577 ], [ -122.302337, 37.882509 ], [ -122.302616, 37.883068 ], [ -122.302079, 37.883119 ], [ -122.301650, 37.883220 ], [ -122.301607, 37.883254 ], [ -122.301414, 37.883271 ], [ -122.301114, 37.883356 ], [ -122.300985, 37.883356 ], [ -122.300942, 37.883389 ], [ -122.300985, 37.883406 ], [ -122.300856, 37.883406 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1003", "population": 62, "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10975, "AWATER10": 0, "INTPTLAT10": "+37.8977494", "INTPTLON10": "-122.2990695" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298861, 37.898478 ], [ -122.298453, 37.897208 ], [ -122.299290, 37.897055 ], [ -122.299719, 37.898291 ], [ -122.299397, 37.898325 ], [ -122.298861, 37.898478 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1002", "population": 68, "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11372, "AWATER10": 0, "INTPTLAT10": "+37.8979512", "INTPTLON10": "-122.2982332" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298045, 37.898749 ], [ -122.297616, 37.897394 ], [ -122.298453, 37.897208 ], [ -122.298861, 37.898478 ], [ -122.298045, 37.898749 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1001", "population": 49, "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11928, "AWATER10": 0, "INTPTLAT10": "+37.8981515", "INTPTLON10": "-122.2974109" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297208, 37.898901 ], [ -122.296779, 37.897546 ], [ -122.297616, 37.897394 ], [ -122.298045, 37.898749 ], [ -122.297788, 37.898833 ], [ -122.297208, 37.898901 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1000", "population": 113, "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 13452, "AWATER10": 0, "INTPTLAT10": "+37.8982712", "INTPTLON10": "-122.2964744" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296221, 37.898935 ], [ -122.295706, 37.897767 ], [ -122.296779, 37.897546 ], [ -122.297208, 37.898901 ], [ -122.297015, 37.898935 ], [ -122.296221, 37.898935 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1012", "population": 29, "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14000, "AWATER10": 0, "INTPTLAT10": "+37.8966536", "INTPTLON10": "-122.2969317" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296779, 37.897546 ], [ -122.296264, 37.895938 ], [ -122.297080, 37.895768 ], [ -122.297616, 37.897394 ], [ -122.296779, 37.897546 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1013", "population": 27, "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14541, "AWATER10": 0, "INTPTLAT10": "+37.8968185", "INTPTLON10": "-122.2960835" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295921, 37.897733 ], [ -122.295406, 37.896090 ], [ -122.296264, 37.895938 ], [ -122.296779, 37.897546 ], [ -122.295921, 37.897733 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1006", "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14453, "AWATER10": 0, "INTPTLAT10": "+37.8983329", "INTPTLON10": "-122.2952807" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295985, 37.898935 ], [ -122.294569, 37.898749 ], [ -122.294590, 37.897750 ], [ -122.295706, 37.897767 ], [ -122.296221, 37.898935 ], [ -122.295985, 37.898935 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1009", "population": 47, "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14237, "AWATER10": 0, "INTPTLAT10": "+37.8961439", "INTPTLON10": "-122.2994424" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299290, 37.897055 ], [ -122.298775, 37.895430 ], [ -122.299612, 37.895260 ], [ -122.300127, 37.896869 ], [ -122.299290, 37.897055 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1010", "population": 32, "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14169, "AWATER10": 0, "INTPTLAT10": "+37.8963113", "INTPTLON10": "-122.2986013" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298453, 37.897208 ], [ -122.297938, 37.895599 ], [ -122.298775, 37.895430 ], [ -122.299290, 37.897055 ], [ -122.298453, 37.897208 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3001", "population": 46, "NAME10": "Block 3001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14042, "AWATER10": 0, "INTPTLAT10": "+37.8945232", "INTPTLON10": "-122.2989229" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298775, 37.895430 ], [ -122.298260, 37.893821 ], [ -122.299075, 37.893635 ], [ -122.299612, 37.895260 ], [ -122.298775, 37.895430 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "1011", "population": 32, "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14193, "AWATER10": 0, "INTPTLAT10": "+37.8964819", "INTPTLON10": "-122.2977622" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297616, 37.897394 ], [ -122.297080, 37.895768 ], [ -122.297938, 37.895599 ], [ -122.298453, 37.897208 ], [ -122.297616, 37.897394 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3000", "population": 46, "NAME10": "Block 3000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14087, "AWATER10": 0, "INTPTLAT10": "+37.8946922", "INTPTLON10": "-122.2980853" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297938, 37.895599 ], [ -122.297423, 37.893957 ], [ -122.298260, 37.893821 ], [ -122.298775, 37.895430 ], [ -122.297938, 37.895599 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2005", "population": 31, "NAME10": "Block 2005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14270, "AWATER10": 0, "INTPTLAT10": "+37.8948540", "INTPTLON10": "-122.2972427" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297080, 37.895768 ], [ -122.296565, 37.894126 ], [ -122.297423, 37.893957 ], [ -122.297938, 37.895599 ], [ -122.297080, 37.895768 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3002", "population": 57, "NAME10": "Block 3002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14593, "AWATER10": 0, "INTPTLAT10": "+37.8943454", "INTPTLON10": "-122.2997703" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299612, 37.895260 ], [ -122.299075, 37.893635 ], [ -122.299955, 37.893466 ], [ -122.300470, 37.895074 ], [ -122.299612, 37.895260 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3005", "population": 10, "NAME10": "Block 3005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14799, "AWATER10": 0, "INTPTLAT10": "+37.8927197", "INTPTLON10": "-122.2992493" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299075, 37.893635 ], [ -122.298560, 37.891992 ], [ -122.299418, 37.891823 ], [ -122.299590, 37.892314 ], [ -122.299955, 37.893466 ], [ -122.299075, 37.893635 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3006", "population": 53, "NAME10": "Block 3006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14044, "AWATER10": 0, "INTPTLAT10": "+37.8928963", "INTPTLON10": "-122.2984024" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298260, 37.893821 ], [ -122.297745, 37.892179 ], [ -122.298560, 37.891992 ], [ -122.299075, 37.893635 ], [ -122.298260, 37.893821 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3007", "population": 41, "NAME10": "Block 3007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14185, "AWATER10": 0, "INTPTLAT10": "+37.8930639", "INTPTLON10": "-122.2975700" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297423, 37.893957 ], [ -122.296908, 37.892348 ], [ -122.297745, 37.892179 ], [ -122.298260, 37.893821 ], [ -122.297423, 37.893957 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2004", "population": 33, "NAME10": "Block 2004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14101, "AWATER10": 0, "INTPTLAT10": "+37.8950194", "INTPTLON10": "-122.2964053" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296264, 37.895938 ], [ -122.295749, 37.894295 ], [ -122.296565, 37.894126 ], [ -122.297080, 37.895768 ], [ -122.296264, 37.895938 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2000", "NAME10": "Block 2000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 7737, "AWATER10": 0, "INTPTLAT10": "+37.8960946", "INTPTLON10": "-122.2952742" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295706, 37.897767 ], [ -122.294655, 37.894532 ], [ -122.294891, 37.894482 ], [ -122.295921, 37.897733 ], [ -122.295749, 37.897767 ], [ -122.295706, 37.897767 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1007", "population": 87, "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17265, "AWATER10": 0, "INTPTLAT10": "+37.8966238", "INTPTLON10": "-122.2949725" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295706, 37.897767 ], [ -122.294590, 37.897750 ], [ -122.294719, 37.895379 ], [ -122.294397, 37.894566 ], [ -122.294655, 37.894532 ], [ -122.295706, 37.897767 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2003", "population": 28, "NAME10": "Block 2003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14449, "AWATER10": 0, "INTPTLAT10": "+37.8951947", "INTPTLON10": "-122.2955660" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295406, 37.896090 ], [ -122.294891, 37.894482 ], [ -122.295749, 37.894295 ], [ -122.296264, 37.895938 ], [ -122.295406, 37.896090 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2007", "population": 33, "NAME10": "Block 2007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14053, "AWATER10": 0, "INTPTLAT10": "+37.8933931", "INTPTLON10": "-122.2958883" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295749, 37.894295 ], [ -122.295234, 37.892687 ], [ -122.296071, 37.892517 ], [ -122.296565, 37.894126 ], [ -122.295749, 37.894295 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2006", "population": 32, "NAME10": "Block 2006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14158, "AWATER10": 0, "INTPTLAT10": "+37.8932322", "INTPTLON10": "-122.2967302" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296565, 37.894126 ], [ -122.296071, 37.892517 ], [ -122.296908, 37.892348 ], [ -122.297423, 37.893957 ], [ -122.296565, 37.894126 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2002", "population": 32, "NAME10": "Block 2002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14523, "AWATER10": 0, "INTPTLAT10": "+37.8935661", "INTPTLON10": "-122.2950398" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294891, 37.894482 ], [ -122.294354, 37.892856 ], [ -122.295234, 37.892687 ], [ -122.295749, 37.894295 ], [ -122.294891, 37.894482 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2001", "NAME10": "Block 2001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 3995, "AWATER10": 0, "INTPTLAT10": "+37.8936801", "INTPTLON10": "-122.2944928" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294655, 37.894532 ], [ -122.294118, 37.892856 ], [ -122.294354, 37.892856 ], [ -122.294891, 37.894482 ], [ -122.294655, 37.894532 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1005", "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 8083, "AWATER10": 0, "INTPTLAT10": "+37.8982104", "INTPTLON10": "-122.2941387" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294569, 37.898749 ], [ -122.293689, 37.898647 ], [ -122.293668, 37.898528 ], [ -122.293711, 37.898393 ], [ -122.293732, 37.897716 ], [ -122.294590, 37.897750 ], [ -122.294569, 37.898749 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1004", "population": 9, "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6640, "AWATER10": 0, "INTPTLAT10": "+37.8980962", "INTPTLON10": "-122.2932964" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293689, 37.898647 ], [ -122.293582, 37.898630 ], [ -122.293196, 37.898427 ], [ -122.292831, 37.898376 ], [ -122.292852, 37.897699 ], [ -122.293732, 37.897716 ], [ -122.293711, 37.898393 ], [ -122.293668, 37.898528 ], [ -122.293689, 37.898647 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1003", "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1246, "AWATER10": 0, "INTPTLAT10": "+37.8980064", "INTPTLON10": "-122.2927412" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292831, 37.898376 ], [ -122.292659, 37.898342 ], [ -122.292659, 37.897987 ], [ -122.292616, 37.897699 ], [ -122.292852, 37.897699 ], [ -122.292831, 37.898376 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1010", "population": 2, "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 2269, "AWATER10": 0, "INTPTLAT10": "+37.8971964", "INTPTLON10": "-122.2927567" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292616, 37.897699 ], [ -122.292681, 37.896717 ], [ -122.292917, 37.896734 ], [ -122.292852, 37.897699 ], [ -122.292616, 37.897699 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1002", "population": 31, "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14980, "AWATER10": 0, "INTPTLAT10": "+37.8974821", "INTPTLON10": "-122.2921539" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292659, 37.898342 ], [ -122.291994, 37.898241 ], [ -122.291608, 37.898105 ], [ -122.291715, 37.896700 ], [ -122.292681, 37.896717 ], [ -122.292616, 37.897699 ], [ -122.292659, 37.897987 ], [ -122.292659, 37.898342 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1001", "population": 21, "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11297, "AWATER10": 0, "INTPTLAT10": "+37.8973215", "INTPTLON10": "-122.2912175" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291608, 37.898105 ], [ -122.291093, 37.897936 ], [ -122.290728, 37.897902 ], [ -122.290814, 37.896666 ], [ -122.291715, 37.896700 ], [ -122.291608, 37.898105 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1000", "population": 16, "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10019, "AWATER10": 0, "INTPTLAT10": "+37.8972478", "INTPTLON10": "-122.2903402" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290728, 37.897902 ], [ -122.290192, 37.897834 ], [ -122.289870, 37.897834 ], [ -122.289977, 37.896649 ], [ -122.290814, 37.896666 ], [ -122.290728, 37.897902 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2005", "population": 17, "NAME10": "Block 2005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10320, "AWATER10": 0, "INTPTLAT10": "+37.8972288", "INTPTLON10": "-122.2894724" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289011, 37.897885 ], [ -122.289097, 37.896615 ], [ -122.289977, 37.896649 ], [ -122.289870, 37.897834 ], [ -122.289484, 37.897834 ], [ -122.289011, 37.897885 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1008", "population": 37, "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 25122, "AWATER10": 0, "INTPTLAT10": "+37.8962273", "INTPTLON10": "-122.2942136" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294590, 37.897750 ], [ -122.293732, 37.897716 ], [ -122.293882, 37.894685 ], [ -122.294397, 37.894566 ], [ -122.294719, 37.895379 ], [ -122.294590, 37.897750 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1009", "population": 44, "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24911, "AWATER10": 0, "INTPTLAT10": "+37.8962389", "INTPTLON10": "-122.2933649" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293732, 37.897716 ], [ -122.292852, 37.897699 ], [ -122.293003, 37.894871 ], [ -122.293882, 37.894685 ], [ -122.293839, 37.895294 ], [ -122.293732, 37.897716 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1011", "population": 1, "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 4495, "AWATER10": 0, "INTPTLAT10": "+37.8957842", "INTPTLON10": "-122.2928245" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292917, 37.896734 ], [ -122.292681, 37.896717 ], [ -122.292745, 37.894871 ], [ -122.293003, 37.894871 ], [ -122.292917, 37.896734 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1016", "population": 13, "NAME10": "Block 1016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 8255, "AWATER10": 0, "INTPTLAT10": "+37.8939086", "INTPTLON10": "-122.2941575" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293882, 37.894685 ], [ -122.293947, 37.892856 ], [ -122.294118, 37.892856 ], [ -122.294655, 37.894532 ], [ -122.293882, 37.894685 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1015", "population": 30, "NAME10": "Block 1015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16238, "AWATER10": 0, "INTPTLAT10": "+37.8938032", "INTPTLON10": "-122.2934559" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293003, 37.894871 ], [ -122.293088, 37.892839 ], [ -122.293947, 37.892856 ], [ -122.293882, 37.894685 ], [ -122.293003, 37.894871 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1014", "population": 2, "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5007, "AWATER10": 0, "INTPTLAT10": "+37.8938437", "INTPTLON10": "-122.2929060" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292745, 37.894871 ], [ -122.292831, 37.892822 ], [ -122.293088, 37.892839 ], [ -122.293003, 37.894871 ], [ -122.292745, 37.894871 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1013", "population": 38, "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18897, "AWATER10": 0, "INTPTLAT10": "+37.8938347", "INTPTLON10": "-122.2923093" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292745, 37.894871 ], [ -122.291801, 37.894854 ], [ -122.291887, 37.892822 ], [ -122.292831, 37.892822 ], [ -122.292745, 37.894871 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1012", "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 48606, "AWATER10": 0, "INTPTLAT10": "+37.8957510", "INTPTLON10": "-122.2913507" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292681, 37.896717 ], [ -122.289977, 37.896649 ], [ -122.289999, 37.895836 ], [ -122.290063, 37.894786 ], [ -122.292745, 37.894871 ], [ -122.292681, 37.896717 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2006", "population": 31, "NAME10": "Block 2006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15730, "AWATER10": 0, "INTPTLAT10": "+37.8956964", "INTPTLON10": "-122.2895702" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289977, 37.896649 ], [ -122.289097, 37.896615 ], [ -122.289205, 37.894769 ], [ -122.290063, 37.894786 ], [ -122.289977, 37.896649 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3001", "population": 31, "NAME10": "Block 3001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16246, "AWATER10": 0, "INTPTLAT10": "+37.8938831", "INTPTLON10": "-122.2913917" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291801, 37.894854 ], [ -122.290921, 37.894820 ], [ -122.290986, 37.892941 ], [ -122.291887, 37.892974 ], [ -122.291801, 37.894854 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3000", "population": 31, "NAME10": "Block 3000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15665, "AWATER10": 0, "INTPTLAT10": "+37.8938607", "INTPTLON10": "-122.2905229" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290921, 37.894820 ], [ -122.290063, 37.894786 ], [ -122.290149, 37.892907 ], [ -122.290986, 37.892941 ], [ -122.290921, 37.894820 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2015", "population": 35, "NAME10": "Block 2015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15921, "AWATER10": 0, "INTPTLAT10": "+37.8938332", "INTPTLON10": "-122.2896635" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290063, 37.894786 ], [ -122.289205, 37.894769 ], [ -122.289290, 37.892890 ], [ -122.290149, 37.892907 ], [ -122.290063, 37.894786 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2004", "population": 16, "NAME10": "Block 2004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11206, "AWATER10": 0, "INTPTLAT10": "+37.8972632", "INTPTLON10": "-122.2886022" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288175, 37.898105 ], [ -122.288218, 37.896598 ], [ -122.289097, 37.896615 ], [ -122.289011, 37.897885 ], [ -122.288496, 37.897936 ], [ -122.288175, 37.898105 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2003", "NAME10": "Block 2003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1027, "AWATER10": 0, "INTPTLAT10": "+37.8973454", "INTPTLON10": "-122.2881508" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288110, 37.898156 ], [ -122.288153, 37.896598 ], [ -122.288218, 37.896598 ], [ -122.288175, 37.897800 ], [ -122.288175, 37.898105 ], [ -122.288110, 37.898156 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2002", "population": 35, "NAME10": "Block 2002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16183, "AWATER10": 0, "INTPTLAT10": "+37.8975006", "INTPTLON10": "-122.2876349" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287145, 37.898647 ], [ -122.287273, 37.896564 ], [ -122.288153, 37.896598 ], [ -122.288110, 37.898156 ], [ -122.287145, 37.898647 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2000", "NAME10": "Block 2000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 948, "AWATER10": 0, "INTPTLAT10": "+37.8984122", "INTPTLON10": "-122.2870554" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286952, 37.898715 ], [ -122.287016, 37.898139 ], [ -122.287145, 37.898139 ], [ -122.287188, 37.898156 ], [ -122.287145, 37.898647 ], [ -122.286952, 37.898715 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2001", "population": 9, "NAME10": "Block 2001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 2708, "AWATER10": 0, "INTPTLAT10": "+37.8973380", "INTPTLON10": "-122.2871259" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287188, 37.898156 ], [ -122.287016, 37.898139 ], [ -122.287080, 37.896564 ], [ -122.287273, 37.896564 ], [ -122.287188, 37.898156 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2007", "population": 30, "NAME10": "Block 2007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15930, "AWATER10": 0, "INTPTLAT10": "+37.8956694", "INTPTLON10": "-122.2886965" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289097, 37.896615 ], [ -122.288218, 37.896598 ], [ -122.288303, 37.894736 ], [ -122.289205, 37.894769 ], [ -122.289097, 37.896615 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2008", "NAME10": "Block 2008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1214, "AWATER10": 0, "INTPTLAT10": "+37.8956738", "INTPTLON10": "-122.2882217" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288153, 37.896598 ], [ -122.288239, 37.894736 ], [ -122.288303, 37.894736 ], [ -122.288303, 37.895108 ], [ -122.288218, 37.896598 ], [ -122.288153, 37.896598 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2009", "population": 33, "NAME10": "Block 2009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15974, "AWATER10": 0, "INTPTLAT10": "+37.8956464", "INTPTLON10": "-122.2877473" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288153, 37.896598 ], [ -122.287273, 37.896564 ], [ -122.287359, 37.894719 ], [ -122.288239, 37.894736 ], [ -122.288153, 37.896598 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2010", "population": 10, "NAME10": "Block 2010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 3628, "AWATER10": 0, "INTPTLAT10": "+37.8956076", "INTPTLON10": "-122.2872058" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287080, 37.896564 ], [ -122.287145, 37.894719 ], [ -122.287359, 37.894719 ], [ -122.287273, 37.896564 ], [ -122.287080, 37.896564 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2014", "population": 32, "NAME10": "Block 2014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16117, "AWATER10": 0, "INTPTLAT10": "+37.8938093", "INTPTLON10": "-122.2887874" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289205, 37.894769 ], [ -122.288303, 37.894736 ], [ -122.288411, 37.892873 ], [ -122.289290, 37.892890 ], [ -122.289205, 37.894769 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2013", "NAME10": "Block 2013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1269, "AWATER10": 0, "INTPTLAT10": "+37.8937720", "INTPTLON10": "-122.2883131" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288239, 37.894736 ], [ -122.288325, 37.892873 ], [ -122.288411, 37.892873 ], [ -122.288303, 37.894736 ], [ -122.288239, 37.894736 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2012", "population": 30, "NAME10": "Block 2012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16253, "AWATER10": 0, "INTPTLAT10": "+37.8937801", "INTPTLON10": "-122.2878360" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288239, 37.894736 ], [ -122.287359, 37.894719 ], [ -122.287445, 37.892822 ], [ -122.288325, 37.892873 ], [ -122.288239, 37.894736 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "2011", "population": 11, "NAME10": "Block 2011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 4556, "AWATER10": 0, "INTPTLAT10": "+37.8937317", "INTPTLON10": "-122.2872753" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287145, 37.894719 ], [ -122.287188, 37.892822 ], [ -122.287445, 37.892822 ], [ -122.287359, 37.894719 ], [ -122.287145, 37.894719 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3012", "NAME10": "Block 3012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 636, "AWATER10": 0, "INTPTLAT10": "+37.8920512", "INTPTLON10": "-122.2995612" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299590, 37.892314 ], [ -122.299418, 37.891823 ], [ -122.299547, 37.891806 ], [ -122.299719, 37.892297 ], [ -122.299590, 37.892314 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3010", "population": 30, "NAME10": "Block 3010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14291, "AWATER10": 0, "INTPTLAT10": "+37.8911018", "INTPTLON10": "-122.2987261" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298560, 37.891992 ], [ -122.298045, 37.890333 ], [ -122.298946, 37.890282 ], [ -122.299418, 37.891823 ], [ -122.298560, 37.891992 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3011", "NAME10": "Block 3011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1922, "AWATER10": 0, "INTPTLAT10": "+37.8910433", "INTPTLON10": "-122.2992359" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299418, 37.891823 ], [ -122.298946, 37.890282 ], [ -122.299054, 37.890265 ], [ -122.299461, 37.891501 ], [ -122.299547, 37.891806 ], [ -122.299418, 37.891823 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1013", "population": 4, "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 568, "AWATER10": 0, "INTPTLAT10": "+37.8901726", "INTPTLON10": "-122.2994482" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299054, 37.890265 ], [ -122.299032, 37.890197 ], [ -122.299290, 37.890180 ], [ -122.299912, 37.890079 ], [ -122.299933, 37.890130 ], [ -122.299311, 37.890248 ], [ -122.299054, 37.890265 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1005", "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 627, "AWATER10": 0, "INTPTLAT10": "+37.8902672", "INTPTLON10": "-122.2984664" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298045, 37.890333 ], [ -122.298024, 37.890265 ], [ -122.298925, 37.890214 ], [ -122.298946, 37.890282 ], [ -122.298517, 37.890316 ], [ -122.298045, 37.890333 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3009", "population": 84, "NAME10": "Block 3009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15100, "AWATER10": 0, "INTPTLAT10": "+37.8912058", "INTPTLON10": "-122.2978563" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297745, 37.892179 ], [ -122.297144, 37.890367 ], [ -122.298045, 37.890333 ], [ -122.298152, 37.890655 ], [ -122.298560, 37.891992 ], [ -122.297745, 37.892179 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1004", "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 521, "AWATER10": 0, "INTPTLAT10": "+37.8903091", "INTPTLON10": "-122.2975987" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297144, 37.890367 ], [ -122.297144, 37.890316 ], [ -122.298024, 37.890265 ], [ -122.298045, 37.890333 ], [ -122.297144, 37.890367 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420300", "BLOCKCE10": "1014", "population": 43, "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 21543, "AWATER10": 0, "INTPTLAT10": "+37.8889340", "INTPTLON10": "-122.2990835" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.299032, 37.890197 ], [ -122.298260, 37.887759 ], [ -122.299182, 37.887742 ], [ -122.299912, 37.890079 ], [ -122.299290, 37.890180 ], [ -122.299032, 37.890197 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1008", "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 3061, "AWATER10": 0, "INTPTLAT10": "+37.8890168", "INTPTLON10": "-122.2985896" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298946, 37.890282 ], [ -122.298131, 37.887776 ], [ -122.298260, 37.887759 ], [ -122.299054, 37.890265 ], [ -122.298946, 37.890282 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1007", "population": 70, "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 32096, "AWATER10": 0, "INTPTLAT10": "+37.8884580", "INTPTLON10": "-122.2979153" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298024, 37.890265 ], [ -122.297809, 37.889622 ], [ -122.296929, 37.886878 ], [ -122.297552, 37.886760 ], [ -122.297788, 37.886743 ], [ -122.297766, 37.886675 ], [ -122.297916, 37.886692 ], [ -122.298260, 37.887759 ], [ -122.298131, 37.887776 ], [ -122.298925, 37.890214 ], [ -122.298024, 37.890265 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "3008", "population": 51, "NAME10": "Block 3008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16353, "AWATER10": 0, "INTPTLAT10": "+37.8913200", "INTPTLON10": "-122.2970017" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296908, 37.892348 ], [ -122.296264, 37.890417 ], [ -122.297144, 37.890367 ], [ -122.297273, 37.890739 ], [ -122.297745, 37.892179 ], [ -122.296908, 37.892348 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2012", "population": 51, "NAME10": "Block 2012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17230, "AWATER10": 0, "INTPTLAT10": "+37.8914257", "INTPTLON10": "-122.2961445" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296071, 37.892517 ], [ -122.295406, 37.890468 ], [ -122.296264, 37.890417 ], [ -122.296908, 37.892348 ], [ -122.296071, 37.892517 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1003", "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 422, "AWATER10": 0, "INTPTLAT10": "+37.8903581", "INTPTLON10": "-122.2966969" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296264, 37.890417 ], [ -122.296264, 37.890367 ], [ -122.297144, 37.890316 ], [ -122.297144, 37.890367 ], [ -122.296972, 37.890384 ], [ -122.296264, 37.890417 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1002", "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 411, "AWATER10": 0, "INTPTLAT10": "+37.8904111", "INTPTLON10": "-122.2958187" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295406, 37.890468 ], [ -122.295384, 37.890434 ], [ -122.296264, 37.890367 ], [ -122.296264, 37.890417 ], [ -122.295578, 37.890468 ], [ -122.295406, 37.890468 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2008", "population": 50, "NAME10": "Block 2008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18377, "AWATER10": 0, "INTPTLAT10": "+37.8915386", "INTPTLON10": "-122.2952863" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295234, 37.892687 ], [ -122.294505, 37.890519 ], [ -122.295406, 37.890468 ], [ -122.296071, 37.892517 ], [ -122.295234, 37.892687 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2009", "population": 57, "NAME10": "Block 2009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19818, "AWATER10": 0, "INTPTLAT10": "+37.8916581", "INTPTLON10": "-122.2944181" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294354, 37.892856 ], [ -122.293625, 37.890570 ], [ -122.294505, 37.890519 ], [ -122.295234, 37.892687 ], [ -122.294354, 37.892856 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1001", "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 419, "AWATER10": 0, "INTPTLAT10": "+37.8904693", "INTPTLON10": "-122.2949399" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294505, 37.890519 ], [ -122.294505, 37.890485 ], [ -122.295384, 37.890434 ], [ -122.295406, 37.890468 ], [ -122.294698, 37.890519 ], [ -122.294505, 37.890519 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1015", "population": 83, "NAME10": "Block 1015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 29154, "AWATER10": 0, "INTPTLAT10": "+37.8886165", "INTPTLON10": "-122.2970361" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297144, 37.890316 ], [ -122.296093, 37.887064 ], [ -122.296929, 37.886878 ], [ -122.298024, 37.890265 ], [ -122.297144, 37.890316 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1014", "population": 69, "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 28068, "AWATER10": 0, "INTPTLAT10": "+37.8887349", "INTPTLON10": "-122.2961756" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296264, 37.890367 ], [ -122.295234, 37.887234 ], [ -122.296093, 37.887064 ], [ -122.297144, 37.890316 ], [ -122.296264, 37.890367 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1010", "population": 33, "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 26672, "AWATER10": 0, "INTPTLAT10": "+37.8888488", "INTPTLON10": "-122.2953196" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295384, 37.890434 ], [ -122.294419, 37.887386 ], [ -122.295234, 37.887234 ], [ -122.296264, 37.890367 ], [ -122.295384, 37.890434 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1011", "population": 68, "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 26518, "AWATER10": 0, "INTPTLAT10": "+37.8889300", "INTPTLON10": "-122.2944569" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294505, 37.890485 ], [ -122.293561, 37.887505 ], [ -122.294397, 37.887318 ], [ -122.295384, 37.890434 ], [ -122.294505, 37.890485 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1000", "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11282, "AWATER10": 0, "INTPTLAT10": "+37.8873799", "INTPTLON10": "-122.2988707" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298260, 37.887759 ], [ -122.297916, 37.886692 ], [ -122.298152, 37.886743 ], [ -122.298410, 37.886844 ], [ -122.299311, 37.887352 ], [ -122.299569, 37.887471 ], [ -122.300169, 37.887606 ], [ -122.300577, 37.887623 ], [ -122.300684, 37.887657 ], [ -122.300963, 37.887657 ], [ -122.300684, 37.887742 ], [ -122.300062, 37.887725 ], [ -122.298260, 37.887759 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1015", "NAME10": "Block 1015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 79019, "AWATER10": 0, "INTPTLAT10": "+37.8858279", "INTPTLON10": "-122.2991231" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.300684, 37.887657 ], [ -122.300577, 37.887623 ], [ -122.300169, 37.887606 ], [ -122.299569, 37.887471 ], [ -122.299311, 37.887352 ], [ -122.298410, 37.886844 ], [ -122.298152, 37.886743 ], [ -122.297916, 37.886692 ], [ -122.297251, 37.884592 ], [ -122.299912, 37.884067 ], [ -122.299933, 37.884440 ], [ -122.300127, 37.885117 ], [ -122.300963, 37.887657 ], [ -122.300684, 37.887657 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1017", "NAME10": "Block 1017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 621, "AWATER10": 0, "INTPTLAT10": "+37.8867580", "INTPTLON10": "-122.2973472" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296929, 37.886878 ], [ -122.296908, 37.886827 ], [ -122.297616, 37.886675 ], [ -122.297766, 37.886675 ], [ -122.297788, 37.886743 ], [ -122.297552, 37.886760 ], [ -122.296929, 37.886878 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1018", "population": 1, "NAME10": "Block 1018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 22069, "AWATER10": 0, "INTPTLAT10": "+37.8835790", "INTPTLON10": "-122.2990681" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.298281, 37.884389 ], [ -122.298110, 37.883779 ], [ -122.298088, 37.883474 ], [ -122.298002, 37.883254 ], [ -122.298989, 37.883017 ], [ -122.300212, 37.882881 ], [ -122.300255, 37.883034 ], [ -122.300298, 37.883220 ], [ -122.300234, 37.883220 ], [ -122.300019, 37.883389 ], [ -122.299826, 37.883881 ], [ -122.299805, 37.884084 ], [ -122.298281, 37.884389 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2007", "NAME10": "Block 2007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 2761, "AWATER10": 0, "INTPTLAT10": "+37.8856449", "INTPTLON10": "-122.2975097" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297916, 37.886692 ], [ -122.297766, 37.886675 ], [ -122.297122, 37.884626 ], [ -122.297251, 37.884592 ], [ -122.297916, 37.886692 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420400", "BLOCKCE10": "1019", "NAME10": "Block 1019", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11921, "AWATER10": 0, "INTPTLAT10": "+37.8839314", "INTPTLON10": "-122.2976037" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297251, 37.884592 ], [ -122.296908, 37.883508 ], [ -122.297122, 37.883491 ], [ -122.297766, 37.883356 ], [ -122.298002, 37.883254 ], [ -122.298088, 37.883474 ], [ -122.298110, 37.883779 ], [ -122.298281, 37.884389 ], [ -122.297251, 37.884592 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1016", "NAME10": "Block 1016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 614, "AWATER10": 0, "INTPTLAT10": "+37.8869296", "INTPTLON10": "-122.2964871" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296093, 37.887064 ], [ -122.296071, 37.886980 ], [ -122.296908, 37.886827 ], [ -122.296929, 37.886878 ], [ -122.296093, 37.887064 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1013", "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 616, "AWATER10": 0, "INTPTLAT10": "+37.8870993", "INTPTLON10": "-122.2956428" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295234, 37.887234 ], [ -122.295213, 37.887166 ], [ -122.296071, 37.886980 ], [ -122.296093, 37.887064 ], [ -122.295234, 37.887234 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1012", "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 615, "AWATER10": 0, "INTPTLAT10": "+37.8872675", "INTPTLON10": "-122.2948079" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294419, 37.887386 ], [ -122.294397, 37.887318 ], [ -122.295213, 37.887166 ], [ -122.295234, 37.887234 ], [ -122.294419, 37.887386 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2003", "population": 58, "NAME10": "Block 2003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24754, "AWATER10": 0, "INTPTLAT10": "+37.8858112", "INTPTLON10": "-122.2943382" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294397, 37.887318 ], [ -122.293475, 37.884507 ], [ -122.294333, 37.884321 ], [ -122.295213, 37.887166 ], [ -122.294397, 37.887318 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2006", "population": 91, "NAME10": "Block 2006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 25305, "AWATER10": 0, "INTPTLAT10": "+37.8853070", "INTPTLON10": "-122.2968750" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296908, 37.886827 ], [ -122.295985, 37.883999 ], [ -122.296865, 37.883830 ], [ -122.297766, 37.886675 ], [ -122.297616, 37.886675 ], [ -122.296908, 37.886827 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2005", "population": 98, "NAME10": "Block 2005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24545, "AWATER10": 0, "INTPTLAT10": "+37.8854914", "INTPTLON10": "-122.2960301" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296071, 37.886980 ], [ -122.295170, 37.884169 ], [ -122.295985, 37.883999 ], [ -122.296908, 37.886827 ], [ -122.296071, 37.886980 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2008", "NAME10": "Block 2008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1060, "AWATER10": 0, "INTPTLAT10": "+37.8841984", "INTPTLON10": "-122.2970500" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.297122, 37.884626 ], [ -122.296865, 37.883830 ], [ -122.296994, 37.883796 ], [ -122.297251, 37.884592 ], [ -122.297122, 37.884626 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2009", "NAME10": "Block 2009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 410, "AWATER10": 0, "INTPTLAT10": "+37.8836558", "INTPTLON10": "-122.2968731" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.296865, 37.883830 ], [ -122.296758, 37.883525 ], [ -122.296908, 37.883508 ], [ -122.296994, 37.883796 ], [ -122.296865, 37.883830 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2004", "population": 63, "NAME10": "Block 2004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24848, "AWATER10": 0, "INTPTLAT10": "+37.8856461", "INTPTLON10": "-122.2951842" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295213, 37.887166 ], [ -122.294333, 37.884321 ], [ -122.295170, 37.884169 ], [ -122.296071, 37.886980 ], [ -122.295213, 37.887166 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2012", "population": 35, "NAME10": "Block 2012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 12579, "AWATER10": 0, "INTPTLAT10": "+37.8835272", "INTPTLON10": "-122.2945038" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294333, 37.884321 ], [ -122.293861, 37.882949 ], [ -122.294011, 37.882915 ], [ -122.294376, 37.882763 ], [ -122.294719, 37.882780 ], [ -122.295170, 37.884169 ], [ -122.294333, 37.884321 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2010", "NAME10": "Block 2010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 8445, "AWATER10": 0, "INTPTLAT10": "+37.8914852", "INTPTLON10": "-122.2936957" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294118, 37.892856 ], [ -122.293839, 37.891992 ], [ -122.293153, 37.891027 ], [ -122.293174, 37.890587 ], [ -122.293625, 37.890570 ], [ -122.294354, 37.892856 ], [ -122.294118, 37.892856 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1017", "population": 22, "NAME10": "Block 1017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10769, "AWATER10": 0, "INTPTLAT10": "+37.8921881", "INTPTLON10": "-122.2934770" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.294118, 37.892856 ], [ -122.293088, 37.892839 ], [ -122.293153, 37.891027 ], [ -122.293839, 37.891992 ], [ -122.294118, 37.892856 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1018", "NAME10": "Block 1018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 4538, "AWATER10": 0, "INTPTLAT10": "+37.8918502", "INTPTLON10": "-122.2929851" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293046, 37.892839 ], [ -122.292831, 37.892822 ], [ -122.292917, 37.890722 ], [ -122.293153, 37.891027 ], [ -122.293088, 37.892839 ], [ -122.293046, 37.892839 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1000", "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 367, "AWATER10": 0, "INTPTLAT10": "+37.8905130", "INTPTLON10": "-122.2941122" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293754, 37.890570 ], [ -122.293711, 37.890519 ], [ -122.294505, 37.890485 ], [ -122.294505, 37.890519 ], [ -122.294397, 37.890536 ], [ -122.293754, 37.890570 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420200", "BLOCKCE10": "2011", "NAME10": "Block 2011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 700, "AWATER10": 0, "INTPTLAT10": "+37.8907452", "INTPTLON10": "-122.2930474" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293153, 37.891027 ], [ -122.292917, 37.890722 ], [ -122.292895, 37.890604 ], [ -122.293174, 37.890587 ], [ -122.293153, 37.891027 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3005", "NAME10": "Block 3005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 349, "AWATER10": 0, "INTPTLAT10": "+37.8905539", "INTPTLON10": "-122.2932516" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292895, 37.890604 ], [ -122.292895, 37.890553 ], [ -122.293389, 37.890536 ], [ -122.293625, 37.890519 ], [ -122.293625, 37.890570 ], [ -122.292895, 37.890604 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "1019", "population": 42, "NAME10": "Block 1019", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 20486, "AWATER10": 0, "INTPTLAT10": "+37.8917135", "INTPTLON10": "-122.2923947" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291887, 37.892822 ], [ -122.291951, 37.891078 ], [ -122.291930, 37.890655 ], [ -122.292895, 37.890604 ], [ -122.292917, 37.891146 ], [ -122.292831, 37.892822 ], [ -122.291887, 37.892822 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3004", "NAME10": "Block 3004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 428, "AWATER10": 0, "INTPTLAT10": "+37.8905994", "INTPTLON10": "-122.2924155" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291930, 37.890655 ], [ -122.291908, 37.890621 ], [ -122.292895, 37.890553 ], [ -122.292895, 37.890604 ], [ -122.292702, 37.890621 ], [ -122.291930, 37.890655 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1006", "population": 49, "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 25175, "AWATER10": 0, "INTPTLAT10": "+37.8890495", "INTPTLON10": "-122.2935928" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293711, 37.890519 ], [ -122.293625, 37.890417 ], [ -122.293561, 37.890316 ], [ -122.292724, 37.887742 ], [ -122.292702, 37.887657 ], [ -122.293582, 37.887640 ], [ -122.293561, 37.887505 ], [ -122.294505, 37.890485 ], [ -122.293711, 37.890519 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "1009", "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5818, "AWATER10": 0, "INTPTLAT10": "+37.8888891", "INTPTLON10": "-122.2929659" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293561, 37.890316 ], [ -122.293131, 37.889825 ], [ -122.292466, 37.887708 ], [ -122.292702, 37.887657 ], [ -122.292724, 37.887742 ], [ -122.293561, 37.890316 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3006", "population": 17, "NAME10": "Block 3006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 11825, "AWATER10": 0, "INTPTLAT10": "+37.8893267", "INTPTLON10": "-122.2928119" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293625, 37.890570 ], [ -122.293625, 37.890519 ], [ -122.292895, 37.890553 ], [ -122.292809, 37.890028 ], [ -122.292144, 37.887860 ], [ -122.292488, 37.887776 ], [ -122.293131, 37.889825 ], [ -122.293711, 37.890519 ], [ -122.293754, 37.890570 ], [ -122.293625, 37.890570 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3007", "population": 55, "NAME10": "Block 3007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 27950, "AWATER10": 0, "INTPTLAT10": "+37.8892518", "INTPTLON10": "-122.2920141" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291908, 37.890621 ], [ -122.291093, 37.888064 ], [ -122.292144, 37.887860 ], [ -122.292809, 37.890028 ], [ -122.292895, 37.890553 ], [ -122.291908, 37.890621 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3008", "NAME10": "Block 3008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 783, "AWATER10": 0, "INTPTLAT10": "+37.8879165", "INTPTLON10": "-122.2915924" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291093, 37.888064 ], [ -122.291071, 37.887996 ], [ -122.292123, 37.887793 ], [ -122.292144, 37.887860 ], [ -122.291093, 37.888064 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3002", "population": 38, "NAME10": "Block 3002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19544, "AWATER10": 0, "INTPTLAT10": "+37.8918042", "INTPTLON10": "-122.2914745" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291887, 37.892974 ], [ -122.290986, 37.892941 ], [ -122.291028, 37.892483 ], [ -122.291071, 37.890705 ], [ -122.291930, 37.890655 ], [ -122.291951, 37.891078 ], [ -122.291887, 37.892974 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3003", "population": 32, "NAME10": "Block 3003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18064, "AWATER10": 0, "INTPTLAT10": "+37.8918237", "INTPTLON10": "-122.2906157" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290986, 37.892941 ], [ -122.290149, 37.892907 ], [ -122.290256, 37.890739 ], [ -122.291071, 37.890705 ], [ -122.291028, 37.892483 ], [ -122.290986, 37.892941 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3003", "NAME10": "Block 3003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 344, "AWATER10": 0, "INTPTLAT10": "+37.8906459", "INTPTLON10": "-122.2914849" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291071, 37.890705 ], [ -122.291071, 37.890655 ], [ -122.291908, 37.890621 ], [ -122.291930, 37.890655 ], [ -122.291071, 37.890705 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3004", "population": 41, "NAME10": "Block 3004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18095, "AWATER10": 0, "INTPTLAT10": "+37.8918241", "INTPTLON10": "-122.2897641" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290149, 37.892907 ], [ -122.289290, 37.892890 ], [ -122.289398, 37.890790 ], [ -122.290256, 37.890739 ], [ -122.290149, 37.892907 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3005", "population": 29, "NAME10": "Block 3005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16537, "AWATER10": 0, "INTPTLAT10": "+37.8919062", "INTPTLON10": "-122.2889102" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289290, 37.892890 ], [ -122.288411, 37.892873 ], [ -122.288475, 37.891484 ], [ -122.288797, 37.891078 ], [ -122.288861, 37.890824 ], [ -122.289398, 37.890790 ], [ -122.289290, 37.892890 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3002", "population": 82, "NAME10": "Block 3002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 26786, "AWATER10": 0, "INTPTLAT10": "+37.8894113", "INTPTLON10": "-122.2909643" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290792, 37.890722 ], [ -122.290084, 37.888267 ], [ -122.291093, 37.888064 ], [ -122.291908, 37.890621 ], [ -122.291071, 37.890655 ], [ -122.291071, 37.890705 ], [ -122.290792, 37.890722 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3009", "NAME10": "Block 3009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 746, "AWATER10": 0, "INTPTLAT10": "+37.8881229", "INTPTLON10": "-122.2905730" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290084, 37.888267 ], [ -122.290063, 37.888199 ], [ -122.291071, 37.887996 ], [ -122.291093, 37.888064 ], [ -122.290084, 37.888267 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3001", "population": 34, "NAME10": "Block 3001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 22452, "AWATER10": 0, "INTPTLAT10": "+37.8895187", "INTPTLON10": "-122.2899595" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289891, 37.890756 ], [ -122.289119, 37.888470 ], [ -122.290084, 37.888267 ], [ -122.290792, 37.890722 ], [ -122.289891, 37.890756 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3000", "population": 47, "NAME10": "Block 3000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 21823, "AWATER10": 0, "INTPTLAT10": "+37.8896695", "INTPTLON10": "-122.2890200" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288861, 37.890824 ], [ -122.288861, 37.890688 ], [ -122.288239, 37.888860 ], [ -122.288239, 37.888656 ], [ -122.289119, 37.888470 ], [ -122.289891, 37.890722 ], [ -122.289891, 37.890756 ], [ -122.288861, 37.890824 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3010", "NAME10": "Block 3010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 689, "AWATER10": 0, "INTPTLAT10": "+37.8883258", "INTPTLON10": "-122.2895731" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289119, 37.888470 ], [ -122.289097, 37.888402 ], [ -122.290063, 37.888199 ], [ -122.290084, 37.888267 ], [ -122.289119, 37.888470 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2002", "population": 60, "NAME10": "Block 2002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24228, "AWATER10": 0, "INTPTLAT10": "+37.8859970", "INTPTLON10": "-122.2935084" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293561, 37.887505 ], [ -122.292638, 37.884677 ], [ -122.293475, 37.884507 ], [ -122.294397, 37.887318 ], [ -122.293561, 37.887505 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3016", "NAME10": "Block 3016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 253, "AWATER10": 0, "INTPTLAT10": "+37.8877763", "INTPTLON10": "-122.2922894" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292144, 37.887860 ], [ -122.292123, 37.887793 ], [ -122.292466, 37.887708 ], [ -122.292488, 37.887776 ], [ -122.292144, 37.887860 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2001", "population": 58, "NAME10": "Block 2001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 26078, "AWATER10": 0, "INTPTLAT10": "+37.8861973", "INTPTLON10": "-122.2926742" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292702, 37.887657 ], [ -122.291780, 37.884863 ], [ -122.292638, 37.884677 ], [ -122.293561, 37.887505 ], [ -122.293582, 37.887640 ], [ -122.292702, 37.887657 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2000", "NAME10": "Block 2000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6434, "AWATER10": 0, "INTPTLAT10": "+37.8862789", "INTPTLON10": "-122.2921162" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292466, 37.887708 ], [ -122.291694, 37.885286 ], [ -122.291522, 37.884914 ], [ -122.291715, 37.884863 ], [ -122.291780, 37.884863 ], [ -122.292702, 37.887657 ], [ -122.292466, 37.887708 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3015", "population": 15, "NAME10": "Block 3015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10776, "AWATER10": 0, "INTPTLAT10": "+37.8863229", "INTPTLON10": "-122.2918172" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292123, 37.887793 ], [ -122.291179, 37.884981 ], [ -122.291522, 37.884914 ], [ -122.291694, 37.885286 ], [ -122.292466, 37.887708 ], [ -122.292123, 37.887793 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2013", "population": 33, "NAME10": "Block 2013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 12945, "AWATER10": 0, "INTPTLAT10": "+37.8836932", "INTPTLON10": "-122.2936333" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.293475, 37.884507 ], [ -122.293367, 37.884202 ], [ -122.292960, 37.883034 ], [ -122.293131, 37.883000 ], [ -122.293861, 37.882949 ], [ -122.294333, 37.884321 ], [ -122.293475, 37.884507 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2014", "population": 40, "NAME10": "Block 2014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 13013, "AWATER10": 0, "INTPTLAT10": "+37.8838362", "INTPTLON10": "-122.2927774" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.292638, 37.884677 ], [ -122.292552, 37.884389 ], [ -122.292080, 37.883135 ], [ -122.292488, 37.883135 ], [ -122.292960, 37.883034 ], [ -122.293475, 37.884507 ], [ -122.292638, 37.884677 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2015", "population": 30, "NAME10": "Block 2015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 13985, "AWATER10": 0, "INTPTLAT10": "+37.8839739", "INTPTLON10": "-122.2919263" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291780, 37.884863 ], [ -122.291265, 37.883237 ], [ -122.292080, 37.883135 ], [ -122.292638, 37.884677 ], [ -122.291780, 37.884863 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3014", "population": 66, "NAME10": "Block 3014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 29422, "AWATER10": 0, "INTPTLAT10": "+37.8864950", "INTPTLON10": "-122.2911376" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291071, 37.887996 ], [ -122.290363, 37.885693 ], [ -122.290170, 37.885219 ], [ -122.291179, 37.884981 ], [ -122.292123, 37.887793 ], [ -122.291071, 37.887996 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3012", "population": 33, "NAME10": "Block 3012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 20277, "AWATER10": 0, "INTPTLAT10": "+37.8875706", "INTPTLON10": "-122.2892190" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288303, 37.888572 ], [ -122.289333, 37.885981 ], [ -122.290063, 37.888199 ], [ -122.288303, 37.888572 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3013", "population": 60, "NAME10": "Block 3013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 31172, "AWATER10": 0, "INTPTLAT10": "+37.8866087", "INTPTLON10": "-122.2901174" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290063, 37.888199 ], [ -122.289333, 37.885981 ], [ -122.289848, 37.884507 ], [ -122.290041, 37.884897 ], [ -122.290363, 37.885693 ], [ -122.291071, 37.887996 ], [ -122.290063, 37.888199 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3017", "population": 12, "NAME10": "Block 3017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6343, "AWATER10": 0, "INTPTLAT10": "+37.8840797", "INTPTLON10": "-122.2909809" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291179, 37.884981 ], [ -122.290943, 37.884372 ], [ -122.290385, 37.883220 ], [ -122.290835, 37.883322 ], [ -122.291157, 37.883999 ], [ -122.291522, 37.884914 ], [ -122.291179, 37.884981 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5264, "AWATER10": 0, "INTPTLAT10": "+37.8839955", "INTPTLON10": "-122.2913154" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291522, 37.884914 ], [ -122.291372, 37.884490 ], [ -122.290835, 37.883322 ], [ -122.291071, 37.883254 ], [ -122.291265, 37.883237 ], [ -122.291780, 37.884863 ], [ -122.291522, 37.884914 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.8843696", "INTPTLON10": "-122.2904413" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290170, 37.885219 ], [ -122.289848, 37.884507 ], [ -122.290170, 37.883576 ], [ -122.290299, 37.883034 ], [ -122.290320, 37.883203 ], [ -122.290385, 37.883220 ], [ -122.290943, 37.884372 ], [ -122.291179, 37.884981 ], [ -122.290170, 37.885219 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1094, "AWATER10": 0, "INTPTLAT10": "+37.8853992", "INTPTLON10": "-122.2894711" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289333, 37.885981 ], [ -122.289269, 37.885862 ], [ -122.289612, 37.884880 ], [ -122.289720, 37.884897 ], [ -122.289333, 37.885981 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1023", "population": 41, "NAME10": "Block 1023", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15260, "AWATER10": 0, "INTPTLAT10": "+37.8840099", "INTPTLON10": "-122.2895305" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289720, 37.884897 ], [ -122.288754, 37.884694 ], [ -122.289312, 37.883288 ], [ -122.289355, 37.883305 ], [ -122.289526, 37.883271 ], [ -122.289762, 37.883186 ], [ -122.289977, 37.883152 ], [ -122.290106, 37.883169 ], [ -122.290256, 37.883186 ], [ -122.290170, 37.883576 ], [ -122.289720, 37.884897 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2010", "population": 24, "NAME10": "Block 2010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6161, "AWATER10": 0, "INTPTLAT10": "+37.8835363", "INTPTLON10": "-122.2962204" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295985, 37.883999 ], [ -122.295706, 37.883017 ], [ -122.296093, 37.883068 ], [ -122.296243, 37.883186 ], [ -122.296371, 37.883339 ], [ -122.296715, 37.883525 ], [ -122.296758, 37.883525 ], [ -122.296865, 37.883830 ], [ -122.295985, 37.883999 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2011", "population": 33, "NAME10": "Block 2011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 10125, "AWATER10": 0, "INTPTLAT10": "+37.8834818", "INTPTLON10": "-122.2953591" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.295170, 37.884169 ], [ -122.294719, 37.882780 ], [ -122.295449, 37.882983 ], [ -122.295706, 37.883017 ], [ -122.295985, 37.883999 ], [ -122.295170, 37.884169 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3006", "NAME10": "Block 3006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1509, "AWATER10": 0, "INTPTLAT10": "+37.8926066", "INTPTLON10": "-122.2883829" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288325, 37.892873 ], [ -122.288411, 37.891484 ], [ -122.288496, 37.891332 ], [ -122.288754, 37.891027 ], [ -122.288775, 37.890824 ], [ -122.288861, 37.890824 ], [ -122.288797, 37.891078 ], [ -122.288475, 37.891484 ], [ -122.288411, 37.892873 ], [ -122.288325, 37.892873 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3007", "population": 28, "NAME10": "Block 3007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18637, "AWATER10": 0, "INTPTLAT10": "+37.8917853", "INTPTLON10": "-122.2879697" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288325, 37.892873 ], [ -122.287445, 37.892822 ], [ -122.287531, 37.890892 ], [ -122.288775, 37.890824 ], [ -122.288754, 37.891027 ], [ -122.288496, 37.891332 ], [ -122.288411, 37.891484 ], [ -122.288325, 37.892873 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2003", "NAME10": "Block 2003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 446, "AWATER10": 0, "INTPTLAT10": "+37.8908208", "INTPTLON10": "-122.2882377" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287724, 37.890875 ], [ -122.287703, 37.890841 ], [ -122.288775, 37.890773 ], [ -122.288775, 37.890824 ], [ -122.287939, 37.890875 ], [ -122.287724, 37.890875 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420100", "BLOCKCE10": "3008", "population": 12, "NAME10": "Block 3008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5620, "AWATER10": 0, "INTPTLAT10": "+37.8918093", "INTPTLON10": "-122.2873239" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287188, 37.892822 ], [ -122.287188, 37.890926 ], [ -122.287531, 37.890892 ], [ -122.287467, 37.892433 ], [ -122.287445, 37.892822 ], [ -122.287188, 37.892822 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2017", "NAME10": "Block 2017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 379, "AWATER10": 0, "INTPTLAT10": "+37.8908918", "INTPTLON10": "-122.2870824" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286651, 37.890942 ], [ -122.286651, 37.890909 ], [ -122.287531, 37.890841 ], [ -122.287531, 37.890892 ], [ -122.287188, 37.890926 ], [ -122.286651, 37.890942 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2000", "NAME10": "Block 2000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 375, "AWATER10": 0, "INTPTLAT10": "+37.8909521", "INTPTLON10": "-122.2861793" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285707, 37.891010 ], [ -122.285686, 37.890976 ], [ -122.286651, 37.890909 ], [ -122.286651, 37.890942 ], [ -122.286458, 37.890959 ], [ -122.285707, 37.891010 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2004", "NAME10": "Block 2004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1970, "AWATER10": 0, "INTPTLAT10": "+37.8896802", "INTPTLON10": "-122.2884737" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288775, 37.890824 ], [ -122.288775, 37.890671 ], [ -122.288110, 37.888690 ], [ -122.288153, 37.888606 ], [ -122.288303, 37.888572 ], [ -122.288218, 37.888741 ], [ -122.288239, 37.888860 ], [ -122.288861, 37.890688 ], [ -122.288861, 37.890824 ], [ -122.288775, 37.890824 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2005", "population": 54, "NAME10": "Block 2005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 21301, "AWATER10": 0, "INTPTLAT10": "+37.8898284", "INTPTLON10": "-122.2879267" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287703, 37.890841 ], [ -122.287102, 37.889080 ], [ -122.287381, 37.888944 ], [ -122.288110, 37.888690 ], [ -122.288775, 37.890671 ], [ -122.288775, 37.890773 ], [ -122.287703, 37.890841 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3011", "NAME10": "Block 3011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 598, "AWATER10": 0, "INTPTLAT10": "+37.8885114", "INTPTLON10": "-122.2886774" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288239, 37.888656 ], [ -122.288303, 37.888572 ], [ -122.288926, 37.888436 ], [ -122.289097, 37.888402 ], [ -122.289119, 37.888470 ], [ -122.288239, 37.888656 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2006", "NAME10": "Block 2006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 812, "AWATER10": 0, "INTPTLAT10": "+37.8888233", "INTPTLON10": "-122.2875914" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287102, 37.889080 ], [ -122.287080, 37.889012 ], [ -122.287316, 37.888893 ], [ -122.288153, 37.888606 ], [ -122.288110, 37.888690 ], [ -122.287381, 37.888944 ], [ -122.287102, 37.889080 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2002", "population": 13, "NAME10": "Block 2002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16691, "AWATER10": 0, "INTPTLAT10": "+37.8900585", "INTPTLON10": "-122.2869139" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286651, 37.890909 ], [ -122.286158, 37.889418 ], [ -122.286458, 37.889334 ], [ -122.287102, 37.889080 ], [ -122.287724, 37.890875 ], [ -122.287531, 37.890892 ], [ -122.287531, 37.890841 ], [ -122.286651, 37.890909 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2007", "NAME10": "Block 2007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 740, "AWATER10": 0, "INTPTLAT10": "+37.8892157", "INTPTLON10": "-122.2866157" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286158, 37.889418 ], [ -122.286136, 37.889351 ], [ -122.286673, 37.889181 ], [ -122.287080, 37.889012 ], [ -122.287102, 37.889080 ], [ -122.286458, 37.889334 ], [ -122.286158, 37.889418 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2010", "population": 27, "NAME10": "Block 2010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15494, "AWATER10": 0, "INTPTLAT10": "+37.8884410", "INTPTLON10": "-122.2866366" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286136, 37.889351 ], [ -122.286050, 37.888995 ], [ -122.286050, 37.888555 ], [ -122.286394, 37.887606 ], [ -122.287488, 37.887877 ], [ -122.287273, 37.888216 ], [ -122.287080, 37.888826 ], [ -122.287080, 37.889012 ], [ -122.286673, 37.889181 ], [ -122.286136, 37.889351 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2001", "population": 18, "NAME10": "Block 2001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14791, "AWATER10": 0, "INTPTLAT10": "+37.8902095", "INTPTLON10": "-122.2859011" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285686, 37.890976 ], [ -122.285557, 37.890807 ], [ -122.285171, 37.889503 ], [ -122.285600, 37.889503 ], [ -122.286158, 37.889418 ], [ -122.286651, 37.890909 ], [ -122.285686, 37.890976 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1002", "NAME10": "Block 1002", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 424, "AWATER10": 0, "INTPTLAT10": "+37.8910153", "INTPTLON10": "-122.2850935" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.284484, 37.891078 ], [ -122.284505, 37.891027 ], [ -122.285686, 37.890976 ], [ -122.285707, 37.891010 ], [ -122.284484, 37.891078 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1003", "population": 27, "NAME10": "Block 1003", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16431, "AWATER10": 0, "INTPTLAT10": "+37.8902144", "INTPTLON10": "-122.2848310" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.284505, 37.891027 ], [ -122.284527, 37.890926 ], [ -122.284484, 37.890671 ], [ -122.284398, 37.890485 ], [ -122.284033, 37.889317 ], [ -122.284741, 37.889486 ], [ -122.285171, 37.889503 ], [ -122.285557, 37.890807 ], [ -122.285686, 37.890976 ], [ -122.284505, 37.891027 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1001", "NAME10": "Block 1001", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 394, "AWATER10": 0, "INTPTLAT10": "+37.8910689", "INTPTLON10": "-122.2839734" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283497, 37.891129 ], [ -122.283497, 37.891078 ], [ -122.284505, 37.891027 ], [ -122.284484, 37.891078 ], [ -122.283497, 37.891129 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1004", "population": 22, "NAME10": "Block 1004", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19676, "AWATER10": 0, "INTPTLAT10": "+37.8901108", "INTPTLON10": "-122.2837239" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283497, 37.891078 ], [ -122.282982, 37.889435 ], [ -122.282896, 37.889215 ], [ -122.282832, 37.889147 ], [ -122.283454, 37.889164 ], [ -122.284033, 37.889317 ], [ -122.284398, 37.890485 ], [ -122.284484, 37.890671 ], [ -122.284527, 37.890976 ], [ -122.284505, 37.891027 ], [ -122.283497, 37.891078 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2008", "NAME10": "Block 2008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 676, "AWATER10": 0, "INTPTLAT10": "+37.8894421", "INTPTLON10": "-122.2856518" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285385, 37.889520 ], [ -122.285171, 37.889503 ], [ -122.285192, 37.889435 ], [ -122.285600, 37.889435 ], [ -122.286136, 37.889351 ], [ -122.286158, 37.889418 ], [ -122.286007, 37.889452 ], [ -122.285385, 37.889520 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2009", "population": 34, "NAME10": "Block 2009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19896, "AWATER10": 0, "INTPTLAT10": "+37.8884164", "INTPTLON10": "-122.2856099" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285385, 37.889452 ], [ -122.285192, 37.889435 ], [ -122.285085, 37.889130 ], [ -122.284999, 37.888639 ], [ -122.285042, 37.888250 ], [ -122.285149, 37.887894 ], [ -122.285385, 37.887386 ], [ -122.286394, 37.887606 ], [ -122.286050, 37.888555 ], [ -122.286050, 37.888995 ], [ -122.286136, 37.889351 ], [ -122.285385, 37.889452 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1010", "population": 1, "NAME10": "Block 1010", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1878, "AWATER10": 0, "INTPTLAT10": "+37.8889080", "INTPTLON10": "-122.2850205" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285106, 37.889435 ], [ -122.284999, 37.889147 ], [ -122.284913, 37.888504 ], [ -122.284956, 37.888233 ], [ -122.285063, 37.887877 ], [ -122.285299, 37.887352 ], [ -122.285385, 37.887386 ], [ -122.285149, 37.887894 ], [ -122.284999, 37.888487 ], [ -122.285063, 37.889029 ], [ -122.285192, 37.889435 ], [ -122.285106, 37.889435 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1008", "NAME10": "Block 1008", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 832, "AWATER10": 0, "INTPTLAT10": "+37.8893913", "INTPTLON10": "-122.2845906" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285171, 37.889503 ], [ -122.284741, 37.889486 ], [ -122.284441, 37.889418 ], [ -122.284033, 37.889317 ], [ -122.284033, 37.889232 ], [ -122.284698, 37.889401 ], [ -122.285192, 37.889435 ], [ -122.285171, 37.889503 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1007", "NAME10": "Block 1007", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 282, "AWATER10": 0, "INTPTLAT10": "+37.8892140", "INTPTLON10": "-122.2838288" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.284033, 37.889317 ], [ -122.283647, 37.889215 ], [ -122.283669, 37.889130 ], [ -122.284033, 37.889232 ], [ -122.284033, 37.889317 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1009", "population": 36, "NAME10": "Block 1009", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 22493, "AWATER10": 0, "INTPTLAT10": "+37.8883323", "INTPTLON10": "-122.2844715" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285106, 37.889435 ], [ -122.284698, 37.889401 ], [ -122.283690, 37.889147 ], [ -122.283669, 37.888961 ], [ -122.283711, 37.888775 ], [ -122.284334, 37.887149 ], [ -122.285299, 37.887352 ], [ -122.285063, 37.887877 ], [ -122.284956, 37.888233 ], [ -122.284913, 37.888504 ], [ -122.284999, 37.889147 ], [ -122.285106, 37.889435 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1014", "population": 38, "NAME10": "Block 1014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 22296, "AWATER10": 0, "INTPTLAT10": "+37.8880279", "INTPTLON10": "-122.2834249" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283669, 37.889130 ], [ -122.283089, 37.889063 ], [ -122.282746, 37.889080 ], [ -122.282660, 37.888944 ], [ -122.282660, 37.888589 ], [ -122.283282, 37.886895 ], [ -122.283540, 37.886963 ], [ -122.284334, 37.887149 ], [ -122.283711, 37.888775 ], [ -122.283669, 37.889130 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2012", "population": 1, "NAME10": "Block 2012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 2533, "AWATER10": 0, "INTPTLAT10": "+37.8872385", "INTPTLON10": "-122.2887646" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288153, 37.888606 ], [ -122.288325, 37.888284 ], [ -122.289269, 37.885862 ], [ -122.289333, 37.885981 ], [ -122.288303, 37.888572 ], [ -122.288153, 37.888606 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2011", "population": 51, "NAME10": "Block 2011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 36927, "AWATER10": 0, "INTPTLAT10": "+37.8868308", "INTPTLON10": "-122.2883823" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287080, 37.889012 ], [ -122.287080, 37.888826 ], [ -122.287273, 37.888216 ], [ -122.287338, 37.888081 ], [ -122.287595, 37.887776 ], [ -122.287681, 37.887623 ], [ -122.288561, 37.885286 ], [ -122.288754, 37.884694 ], [ -122.289612, 37.884880 ], [ -122.289269, 37.885862 ], [ -122.288325, 37.888284 ], [ -122.288153, 37.888606 ], [ -122.287617, 37.888775 ], [ -122.287080, 37.889012 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2013", "population": 64, "NAME10": "Block 2013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 27693, "AWATER10": 0, "INTPTLAT10": "+37.8861944", "INTPTLON10": "-122.2877578" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287488, 37.887877 ], [ -122.286758, 37.887691 ], [ -122.287037, 37.886912 ], [ -122.287488, 37.885828 ], [ -122.287960, 37.884507 ], [ -122.288754, 37.884694 ], [ -122.288561, 37.885286 ], [ -122.287681, 37.887623 ], [ -122.287595, 37.887776 ], [ -122.287488, 37.887877 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2015", "population": 19, "NAME10": "Block 2015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 8164, "AWATER10": 0, "INTPTLAT10": "+37.8861594", "INTPTLON10": "-122.2868653" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287123, 37.886726 ], [ -122.286286, 37.886523 ], [ -122.286544, 37.885794 ], [ -122.286651, 37.885642 ], [ -122.286737, 37.885642 ], [ -122.287488, 37.885828 ], [ -122.287123, 37.886726 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2014", "population": 73, "NAME10": "Block 2014", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 41589, "AWATER10": 0, "INTPTLAT10": "+37.8849195", "INTPTLON10": "-122.2873798" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286758, 37.887691 ], [ -122.285385, 37.887386 ], [ -122.286673, 37.883999 ], [ -122.287188, 37.884101 ], [ -122.287810, 37.884169 ], [ -122.288067, 37.884253 ], [ -122.287488, 37.885828 ], [ -122.286737, 37.885642 ], [ -122.286651, 37.885642 ], [ -122.286544, 37.885794 ], [ -122.286286, 37.886523 ], [ -122.287123, 37.886726 ], [ -122.286758, 37.887691 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1022", "population": 31, "NAME10": "Block 1022", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 12213, "AWATER10": 0, "INTPTLAT10": "+37.8838753", "INTPTLON10": "-122.2886289" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288754, 37.884694 ], [ -122.287960, 37.884507 ], [ -122.288518, 37.883051 ], [ -122.289312, 37.883288 ], [ -122.288754, 37.884694 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1019", "NAME10": "Block 1019", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1466, "AWATER10": 0, "INTPTLAT10": "+37.8847579", "INTPTLON10": "-122.2863241" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286072, 37.885557 ], [ -122.285986, 37.885523 ], [ -122.286587, 37.883982 ], [ -122.286673, 37.883999 ], [ -122.286565, 37.884321 ], [ -122.286072, 37.885557 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1011", "NAME10": "Block 1011", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1704, "AWATER10": 0, "INTPTLAT10": "+37.8864397", "INTPTLON10": "-122.2856823" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285385, 37.887386 ], [ -122.285299, 37.887352 ], [ -122.285986, 37.885523 ], [ -122.286072, 37.885557 ], [ -122.285385, 37.887386 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1012", "population": 39, "NAME10": "Block 1012", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 17780, "AWATER10": 0, "INTPTLAT10": "+37.8863390", "INTPTLON10": "-122.2851750" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285299, 37.887352 ], [ -122.284334, 37.887149 ], [ -122.284570, 37.886709 ], [ -122.285085, 37.885320 ], [ -122.285986, 37.885523 ], [ -122.285299, 37.887352 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1018", "population": 45, "NAME10": "Block 1018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 20717, "AWATER10": 0, "INTPTLAT10": "+37.8843388", "INTPTLON10": "-122.2859716" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285986, 37.885523 ], [ -122.285085, 37.885320 ], [ -122.285600, 37.883999 ], [ -122.285686, 37.883644 ], [ -122.286973, 37.882983 ], [ -122.286587, 37.883982 ], [ -122.285986, 37.885523 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1025", "NAME10": "Block 1025", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1018, "AWATER10": 0, "INTPTLAT10": "+37.8838716", "INTPTLON10": "-122.2850766" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.284505, 37.884202 ], [ -122.284462, 37.884135 ], [ -122.285707, 37.883542 ], [ -122.285686, 37.883644 ], [ -122.284741, 37.884101 ], [ -122.284505, 37.884202 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1013", "population": 65, "NAME10": "Block 1013", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 28788, "AWATER10": 0, "INTPTLAT10": "+37.8854489", "INTPTLON10": "-122.2845719" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.284334, 37.887149 ], [ -122.283540, 37.886963 ], [ -122.283819, 37.886235 ], [ -122.284505, 37.884372 ], [ -122.284505, 37.884202 ], [ -122.285686, 37.883644 ], [ -122.285600, 37.883999 ], [ -122.284570, 37.886709 ], [ -122.284334, 37.887149 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1029", "population": 30, "NAME10": "Block 1029", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 16994, "AWATER10": 0, "INTPTLAT10": "+37.8853080", "INTPTLON10": "-122.2836511" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283819, 37.886235 ], [ -122.282681, 37.885981 ], [ -122.283175, 37.885371 ], [ -122.283282, 37.884778 ], [ -122.283390, 37.884727 ], [ -122.283862, 37.884541 ], [ -122.284505, 37.884202 ], [ -122.284505, 37.884372 ], [ -122.283819, 37.886235 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1027", "NAME10": "Block 1027", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 906, "AWATER10": 0, "INTPTLAT10": "+37.8844362", "INTPTLON10": "-122.2839247" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283390, 37.884727 ], [ -122.283347, 37.884677 ], [ -122.284462, 37.884135 ], [ -122.284505, 37.884202 ], [ -122.283862, 37.884541 ], [ -122.283390, 37.884727 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1026", "population": 17, "NAME10": "Block 1026", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 63728, "AWATER10": 0, "INTPTLAT10": "+37.8834939", "INTPTLON10": "-122.2837979" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.282124, 37.884998 ], [ -122.281995, 37.884981 ], [ -122.282295, 37.884372 ], [ -122.281909, 37.884372 ], [ -122.282016, 37.884185 ], [ -122.282574, 37.882729 ], [ -122.282767, 37.882543 ], [ -122.282810, 37.882509 ], [ -122.283025, 37.882526 ], [ -122.283690, 37.882492 ], [ -122.285085, 37.882475 ], [ -122.285385, 37.882441 ], [ -122.286050, 37.882458 ], [ -122.285836, 37.883034 ], [ -122.285707, 37.883542 ], [ -122.283797, 37.884473 ], [ -122.283132, 37.884761 ], [ -122.282424, 37.884965 ], [ -122.282124, 37.884998 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1000", "NAME10": "Block 1000", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 443, "AWATER10": 0, "INTPTLAT10": "+37.8911265", "INTPTLON10": "-122.2829474" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.282424, 37.891180 ], [ -122.282424, 37.891146 ], [ -122.283497, 37.891078 ], [ -122.283497, 37.891129 ], [ -122.282424, 37.891180 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1005", "population": 22, "NAME10": "Block 1005", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 19453, "AWATER10": 0, "INTPTLAT10": "+37.8901660", "INTPTLON10": "-122.2826890" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.282424, 37.891146 ], [ -122.282381, 37.890790 ], [ -122.281909, 37.889418 ], [ -122.282295, 37.889232 ], [ -122.282639, 37.889164 ], [ -122.282853, 37.889164 ], [ -122.282982, 37.889435 ], [ -122.283497, 37.891078 ], [ -122.282424, 37.891146 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1015", "NAME10": "Block 1015", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 627, "AWATER10": 0, "INTPTLAT10": "+37.8891127", "INTPTLON10": "-122.2832122" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283647, 37.889215 ], [ -122.283282, 37.889147 ], [ -122.282832, 37.889147 ], [ -122.282746, 37.889080 ], [ -122.283089, 37.889063 ], [ -122.283475, 37.889097 ], [ -122.283669, 37.889130 ], [ -122.283647, 37.889215 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1006", "NAME10": "Block 1006", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 691, "AWATER10": 0, "INTPTLAT10": "+37.8892075", "INTPTLON10": "-122.2823202" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.281909, 37.889418 ], [ -122.281866, 37.889351 ], [ -122.282338, 37.889147 ], [ -122.282746, 37.889080 ], [ -122.282832, 37.889147 ], [ -122.282295, 37.889232 ], [ -122.281909, 37.889418 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1017", "population": 37, "NAME10": "Block 1017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 24687, "AWATER10": 0, "INTPTLAT10": "+37.8879459", "INTPTLON10": "-122.2823713" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.281866, 37.889351 ], [ -122.281673, 37.888673 ], [ -122.281673, 37.888250 ], [ -122.282295, 37.886675 ], [ -122.283282, 37.886895 ], [ -122.282660, 37.888589 ], [ -122.282660, 37.888944 ], [ -122.282746, 37.889080 ], [ -122.282338, 37.889147 ], [ -122.281866, 37.889351 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1016", "population": 16, "NAME10": "Block 1016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 9100, "AWATER10": 0, "INTPTLAT10": "+37.8864607", "INTPTLON10": "-122.2830673" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.283540, 37.886963 ], [ -122.282295, 37.886675 ], [ -122.282488, 37.886319 ], [ -122.282681, 37.885981 ], [ -122.283819, 37.886235 ], [ -122.283540, 37.886963 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1028", "NAME10": "Block 1028", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1037, "AWATER10": 0, "INTPTLAT10": "+37.8849026", "INTPTLON10": "-122.2826795" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.282038, 37.885066 ], [ -122.281973, 37.885049 ], [ -122.281995, 37.884981 ], [ -122.282124, 37.884998 ], [ -122.282424, 37.884965 ], [ -122.282875, 37.884846 ], [ -122.283347, 37.884677 ], [ -122.283390, 37.884727 ], [ -122.282917, 37.884914 ], [ -122.282445, 37.885032 ], [ -122.282038, 37.885066 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1021", "population": 45, "NAME10": "Block 1021", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 18586, "AWATER10": 0, "INTPTLAT10": "+37.8834620", "INTPTLON10": "-122.2875836" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288067, 37.884253 ], [ -122.287810, 37.884169 ], [ -122.287188, 37.884101 ], [ -122.286673, 37.883999 ], [ -122.287080, 37.882915 ], [ -122.287209, 37.882594 ], [ -122.287939, 37.882881 ], [ -122.288518, 37.883051 ], [ -122.288067, 37.884253 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1020", "NAME10": "Block 1020", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 979, "AWATER10": 0, "INTPTLAT10": "+37.8834653", "INTPTLON10": "-122.2868181" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.286673, 37.883999 ], [ -122.286587, 37.883982 ], [ -122.286973, 37.882983 ], [ -122.287080, 37.882915 ], [ -122.287037, 37.883051 ], [ -122.286673, 37.883999 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1030", "population": 1, "NAME10": "Block 1030", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 280, "AWATER10": 0, "INTPTLAT10": "+37.8827246", "INTPTLON10": "-122.2870976" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.287080, 37.882915 ], [ -122.287016, 37.882864 ], [ -122.287123, 37.882560 ], [ -122.287209, 37.882594 ], [ -122.287188, 37.882661 ], [ -122.287080, 37.882915 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1024", "population": 1, "NAME10": "Block 1024", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1201, "AWATER10": 0, "INTPTLAT10": "+37.8832245", "INTPTLON10": "-122.2863663" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285686, 37.883644 ], [ -122.285707, 37.883542 ], [ -122.287016, 37.882864 ], [ -122.287080, 37.882915 ], [ -122.285686, 37.883644 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "id": 12345, "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1031", "population": 15, "NAME10": "Block 1031", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 7920, "AWATER10": 0, "INTPTLAT10": "+37.8828579", "INTPTLON10": "-122.2863490" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.285707, 37.883542 ], [ -122.285836, 37.883034 ], [ -122.286050, 37.882458 ], [ -122.286758, 37.882458 ], [ -122.287123, 37.882560 ], [ -122.287016, 37.882864 ], [ -122.285707, 37.883542 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
] }
|
||||
|
395
tests/join-population/just-macarthur.mbtiles.json
Normal file
395
tests/join-population/just-macarthur.mbtiles.json
Normal file
@ -0,0 +1,395 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"attribution": "macarthur attribution",
|
||||
"bounds": "-122.343750,37.695438,-122.104097,37.926868",
|
||||
"center": "-122.299805,37.892187,12",
|
||||
"description": "macarthur description",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"macarthur\", \"description\": \"\", \"minzoom\": 5, \"maxzoom\": 11, \"fields\": {\"FULLNAME\": \"String\", \"LINEARID\": \"String\", \"MTFCC\": \"String\", \"RTTYP\": \"String\"} } ] }",
|
||||
"maxzoom": "12",
|
||||
"minzoom": "0",
|
||||
"name": "macarthur name",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 5, "x": 5, "y": 12 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.255859, 37.822802 ], [ -122.272339, 37.829311 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.242126, 37.807614 ], [ -122.239380, 37.807614 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.297058, 37.833649 ], [ -122.291565, 37.827141 ], [ -122.258606, 37.822802 ], [ -122.250366, 37.811954 ], [ -122.231140, 37.801104 ], [ -122.211914, 37.796763 ], [ -122.195435, 37.785911 ], [ -122.178955, 37.783740 ], [ -122.159729, 37.772886 ], [ -122.148743, 37.759859 ], [ -122.151489, 37.751172 ], [ -122.140503, 37.738141 ], [ -122.132263, 37.714245 ], [ -122.104797, 37.696861 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104797, 37.696861 ], [ -122.132263, 37.716418 ], [ -122.143250, 37.738141 ], [ -122.154236, 37.751172 ], [ -122.148743, 37.762030 ], [ -122.159729, 37.775057 ], [ -122.250366, 37.811954 ], [ -122.261353, 37.822802 ], [ -122.294312, 37.831480 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184448, 37.777228 ], [ -122.181702, 37.775057 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.178955, 37.772886 ], [ -122.176208, 37.772886 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.173462, 37.770715 ], [ -122.162476, 37.757687 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.162476, 37.753344 ], [ -122.159729, 37.751172 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.159729, 37.751172 ], [ -122.159729, 37.749001 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.740313 ], [ -122.159729, 37.749001 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 6, "x": 10, "y": 24 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.255859, 37.821718 ], [ -122.259979, 37.824972 ], [ -122.272339, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.242126, 37.807614 ], [ -122.238007, 37.806529 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786996 ], [ -122.195435, 37.786996 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.295685, 37.833649 ], [ -122.294312, 37.828226 ], [ -122.290192, 37.827141 ], [ -122.281952, 37.828226 ], [ -122.259979, 37.822802 ], [ -122.253113, 37.818463 ], [ -122.248993, 37.810869 ], [ -122.236633, 37.805444 ], [ -122.229767, 37.801104 ], [ -122.211914, 37.796763 ], [ -122.194061, 37.785911 ], [ -122.178955, 37.783740 ], [ -122.158356, 37.773971 ], [ -122.148743, 37.759859 ], [ -122.151489, 37.750087 ], [ -122.141876, 37.737055 ], [ -122.137756, 37.725108 ], [ -122.132263, 37.714245 ], [ -122.110291, 37.701207 ], [ -122.104797, 37.695774 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104797, 37.695774 ], [ -122.110291, 37.701207 ], [ -122.132263, 37.715331 ], [ -122.137756, 37.726194 ], [ -122.140503, 37.738141 ], [ -122.151489, 37.751172 ], [ -122.148743, 37.760944 ], [ -122.158356, 37.773971 ], [ -122.178955, 37.783740 ], [ -122.194061, 37.785911 ], [ -122.210541, 37.796763 ], [ -122.229767, 37.801104 ], [ -122.236633, 37.806529 ], [ -122.250366, 37.810869 ], [ -122.254486, 37.819548 ], [ -122.259979, 37.822802 ], [ -122.281952, 37.828226 ], [ -122.290192, 37.827141 ], [ -122.294312, 37.829311 ], [ -122.294312, 37.831480 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184448, 37.777228 ], [ -122.180328, 37.773971 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.177582, 37.771800 ], [ -122.176208, 37.771800 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172089, 37.769629 ], [ -122.163849, 37.762030 ], [ -122.162476, 37.756601 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.161102, 37.753344 ], [ -122.159729, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.159729, 37.750087 ], [ -122.158356, 37.749001 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.739227 ], [ -122.152863, 37.742485 ], [ -122.158356, 37.747915 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 20, "y": 49 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.255173, 37.821718 ], [ -122.259293, 37.824430 ], [ -122.272339, 37.827684 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156510290", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820090 ], [ -122.254486, 37.820633 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654602215", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.253113, 37.817378 ], [ -122.252426, 37.816836 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.242126, 37.807614 ], [ -122.237320, 37.805986 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.194748, 37.786996 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.294998, 37.833107 ], [ -122.293625, 37.828768 ], [ -122.290878, 37.827141 ], [ -122.288132, 37.826599 ], [ -122.281265, 37.827684 ], [ -122.260666, 37.822260 ], [ -122.253113, 37.818463 ], [ -122.250366, 37.811954 ], [ -122.248993, 37.810326 ], [ -122.235947, 37.805444 ], [ -122.229080, 37.801104 ], [ -122.211227, 37.796763 ], [ -122.205734, 37.794593 ], [ -122.200928, 37.789167 ], [ -122.194061, 37.785911 ], [ -122.189255, 37.784283 ], [ -122.178268, 37.783740 ], [ -122.158356, 37.773429 ], [ -122.155609, 37.770715 ], [ -122.148056, 37.759859 ], [ -122.148743, 37.757144 ], [ -122.152176, 37.753887 ], [ -122.151489, 37.750087 ], [ -122.149429, 37.745743 ], [ -122.141190, 37.737055 ], [ -122.138443, 37.725651 ], [ -122.131577, 37.714788 ], [ -122.121277, 37.707183 ], [ -122.109604, 37.700664 ], [ -122.104797, 37.695774 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104111, 37.695774 ], [ -122.109604, 37.700664 ], [ -122.121964, 37.707726 ], [ -122.131577, 37.714788 ], [ -122.137756, 37.725651 ], [ -122.140503, 37.737598 ], [ -122.149429, 37.745743 ], [ -122.151489, 37.750629 ], [ -122.151489, 37.753887 ], [ -122.148743, 37.757144 ], [ -122.148056, 37.760401 ], [ -122.155609, 37.771258 ], [ -122.158356, 37.773429 ], [ -122.177582, 37.783740 ], [ -122.193375, 37.785911 ], [ -122.199554, 37.789167 ], [ -122.205734, 37.794050 ], [ -122.210541, 37.796763 ], [ -122.229080, 37.801104 ], [ -122.235947, 37.805986 ], [ -122.249680, 37.810869 ], [ -122.253799, 37.819006 ], [ -122.259979, 37.822802 ], [ -122.281265, 37.827684 ], [ -122.289505, 37.827141 ], [ -122.293625, 37.828768 ], [ -122.293625, 37.830938 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102155930810", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.185822, 37.775600 ], [ -122.185822, 37.776142 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184448, 37.776685 ], [ -122.180328, 37.773971 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.176895, 37.771258 ], [ -122.175522, 37.771258 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172089, 37.769629 ], [ -122.167969, 37.766372 ], [ -122.163849, 37.762030 ], [ -122.161789, 37.756601 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.160416, 37.753344 ], [ -122.159042, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.159042, 37.750087 ], [ -122.158356, 37.748458 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.738684 ], [ -122.152176, 37.742485 ], [ -122.157669, 37.747915 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 8, "x": 41, "y": 99 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.144279, 37.740313 ], [ -122.141533, 37.738141 ], [ -122.140503, 37.736784 ], [ -122.138100, 37.725379 ], [ -122.133636, 37.718590 ], [ -122.131577, 37.714517 ], [ -122.129860, 37.712887 ], [ -122.125397, 37.710443 ], [ -122.121277, 37.707183 ], [ -122.117157, 37.705553 ], [ -122.109604, 37.700664 ], [ -122.104454, 37.695503 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104111, 37.695503 ], [ -122.109261, 37.700664 ], [ -122.115784, 37.705010 ], [ -122.121277, 37.707455 ], [ -122.124023, 37.709628 ], [ -122.129860, 37.713159 ], [ -122.131577, 37.715060 ], [ -122.133293, 37.718590 ], [ -122.137413, 37.725108 ], [ -122.140503, 37.737327 ], [ -122.143936, 37.740313 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.738413 ], [ -122.147369, 37.740313 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 8, "x": 41, "y": 98 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254829, 37.821446 ], [ -122.258949, 37.824430 ], [ -122.263756, 37.825786 ], [ -122.265816, 37.826599 ], [ -122.271996, 37.827684 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156510290", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254143, 37.820090 ], [ -122.254486, 37.820362 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654602215", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.253113, 37.817378 ], [ -122.252426, 37.816565 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241783, 37.807343 ], [ -122.237320, 37.805715 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.194405, 37.786996 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.294655, 37.833107 ], [ -122.293625, 37.828768 ], [ -122.290878, 37.826870 ], [ -122.287788, 37.826599 ], [ -122.281265, 37.827413 ], [ -122.260323, 37.822260 ], [ -122.256203, 37.820362 ], [ -122.253113, 37.817921 ], [ -122.251740, 37.816293 ], [ -122.250366, 37.811954 ], [ -122.249336, 37.810598 ], [ -122.242126, 37.808428 ], [ -122.235603, 37.805444 ], [ -122.229080, 37.801104 ], [ -122.210884, 37.796763 ], [ -122.205391, 37.793779 ], [ -122.199554, 37.788624 ], [ -122.194061, 37.785639 ], [ -122.188911, 37.784283 ], [ -122.178268, 37.783740 ], [ -122.170029, 37.778856 ], [ -122.158356, 37.773429 ], [ -122.155266, 37.770715 ], [ -122.148399, 37.760401 ], [ -122.148056, 37.757959 ], [ -122.151833, 37.753615 ], [ -122.151833, 37.750901 ], [ -122.149429, 37.745743 ], [ -122.145996, 37.742757 ], [ -122.140846, 37.737055 ], [ -122.138100, 37.725379 ], [ -122.133636, 37.718590 ], [ -122.131577, 37.714517 ], [ -122.129860, 37.712887 ], [ -122.125397, 37.710443 ], [ -122.121277, 37.707183 ], [ -122.117157, 37.705553 ], [ -122.109604, 37.700664 ], [ -122.105827, 37.696861 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.105484, 37.696861 ], [ -122.109261, 37.700664 ], [ -122.115784, 37.705010 ], [ -122.121277, 37.707455 ], [ -122.125053, 37.710443 ], [ -122.129173, 37.712615 ], [ -122.131233, 37.714517 ], [ -122.133293, 37.718590 ], [ -122.137413, 37.725108 ], [ -122.140503, 37.737327 ], [ -122.143936, 37.740313 ], [ -122.145653, 37.742757 ], [ -122.148743, 37.745200 ], [ -122.151146, 37.749544 ], [ -122.151833, 37.751172 ], [ -122.151833, 37.752801 ], [ -122.151146, 37.754430 ], [ -122.148399, 37.757144 ], [ -122.148056, 37.759859 ], [ -122.155266, 37.770986 ], [ -122.158012, 37.773157 ], [ -122.170029, 37.779399 ], [ -122.177238, 37.783469 ], [ -122.179642, 37.784283 ], [ -122.188911, 37.784554 ], [ -122.193031, 37.785639 ], [ -122.199554, 37.788895 ], [ -122.205391, 37.794050 ], [ -122.209167, 37.795949 ], [ -122.214317, 37.797848 ], [ -122.228737, 37.801104 ], [ -122.236977, 37.806258 ], [ -122.241096, 37.808428 ], [ -122.248993, 37.810598 ], [ -122.250366, 37.812225 ], [ -122.252426, 37.817921 ], [ -122.255516, 37.820362 ], [ -122.258949, 37.822260 ], [ -122.281265, 37.827684 ], [ -122.284012, 37.827684 ], [ -122.288132, 37.826870 ], [ -122.289505, 37.827141 ], [ -122.293282, 37.828768 ], [ -122.293625, 37.830938 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102155930810", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.185478, 37.775600 ], [ -122.185478, 37.775871 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184105, 37.776685 ], [ -122.179985, 37.773971 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654601627", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181702, 37.775057 ], [ -122.181358, 37.775057 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.176552, 37.771258 ], [ -122.175522, 37.770986 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172089, 37.769358 ], [ -122.167969, 37.766101 ], [ -122.163849, 37.761758 ], [ -122.161789, 37.756601 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.160416, 37.753073 ], [ -122.159042, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.159042, 37.750087 ], [ -122.158012, 37.748458 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.738413 ], [ -122.151833, 37.742485 ], [ -122.156639, 37.746286 ], [ -122.157326, 37.747643 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 9, "x": 82, "y": 198 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.138615, 37.729453 ], [ -122.137928, 37.725379 ], [ -122.137413, 37.724293 ], [ -122.134666, 37.720763 ], [ -122.133465, 37.718590 ], [ -122.131405, 37.714381 ], [ -122.129860, 37.712751 ], [ -122.127972, 37.711665 ], [ -122.125397, 37.710307 ], [ -122.121105, 37.707183 ], [ -122.117157, 37.705418 ], [ -122.109432, 37.700664 ], [ -122.104454, 37.695503 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104111, 37.695503 ], [ -122.109089, 37.700664 ], [ -122.115784, 37.704874 ], [ -122.121105, 37.707319 ], [ -122.125053, 37.710307 ], [ -122.129173, 37.712615 ], [ -122.130890, 37.714245 ], [ -122.133121, 37.718590 ], [ -122.137413, 37.724972 ], [ -122.138443, 37.729453 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970094", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.729453 ], [ -122.139130, 37.728910 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970095", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.729453 ], [ -122.139130, 37.728910 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 9, "x": 82, "y": 197 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254829, 37.821446 ], [ -122.255001, 37.821989 ], [ -122.256203, 37.822802 ], [ -122.258778, 37.824430 ], [ -122.263756, 37.825650 ], [ -122.265644, 37.826599 ], [ -122.271824, 37.827548 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156510290", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254143, 37.819955 ], [ -122.254314, 37.820362 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654602215", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252941, 37.817243 ], [ -122.252426, 37.816429 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241611, 37.807343 ], [ -122.241268, 37.806936 ], [ -122.239723, 37.806800 ], [ -122.237320, 37.805715 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.194405, 37.786860 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.294655, 37.833107 ], [ -122.294140, 37.832158 ], [ -122.293797, 37.828904 ], [ -122.292938, 37.827955 ], [ -122.290707, 37.826735 ], [ -122.289677, 37.826463 ], [ -122.287788, 37.826463 ], [ -122.283325, 37.827277 ], [ -122.281265, 37.827277 ], [ -122.268391, 37.824158 ], [ -122.262383, 37.822938 ], [ -122.259121, 37.821853 ], [ -122.256031, 37.820362 ], [ -122.252941, 37.817921 ], [ -122.251740, 37.816293 ], [ -122.250366, 37.811818 ], [ -122.249165, 37.810598 ], [ -122.241955, 37.808292 ], [ -122.235432, 37.805444 ], [ -122.229767, 37.801375 ], [ -122.228909, 37.800968 ], [ -122.217236, 37.798391 ], [ -122.210884, 37.796628 ], [ -122.205219, 37.793779 ], [ -122.200756, 37.789302 ], [ -122.199554, 37.788488 ], [ -122.193890, 37.785639 ], [ -122.191486, 37.784825 ], [ -122.188740, 37.784283 ], [ -122.179298, 37.783876 ], [ -122.178268, 37.783604 ], [ -122.169857, 37.778856 ], [ -122.164192, 37.776414 ], [ -122.158184, 37.773293 ], [ -122.155266, 37.770715 ], [ -122.152519, 37.766101 ], [ -122.150631, 37.763930 ], [ -122.148399, 37.760401 ], [ -122.148056, 37.758773 ], [ -122.148056, 37.757823 ], [ -122.148743, 37.756601 ], [ -122.151661, 37.753615 ], [ -122.152004, 37.752122 ], [ -122.151833, 37.750765 ], [ -122.149944, 37.746557 ], [ -122.148914, 37.745064 ], [ -122.145824, 37.742621 ], [ -122.144108, 37.740313 ], [ -122.141533, 37.738141 ], [ -122.140675, 37.737055 ], [ -122.138443, 37.728774 ], [ -122.137928, 37.725379 ], [ -122.137070, 37.723750 ], [ -122.134666, 37.720763 ], [ -122.133465, 37.718590 ], [ -122.131405, 37.714381 ], [ -122.129860, 37.712751 ], [ -122.127972, 37.711665 ], [ -122.125397, 37.710307 ], [ -122.121964, 37.707726 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.121620, 37.707726 ], [ -122.125053, 37.710307 ], [ -122.128143, 37.711936 ], [ -122.129688, 37.713159 ], [ -122.131405, 37.715060 ], [ -122.133121, 37.718590 ], [ -122.137413, 37.724972 ], [ -122.138271, 37.729045 ], [ -122.140503, 37.737327 ], [ -122.141361, 37.738413 ], [ -122.143764, 37.740313 ], [ -122.145653, 37.742757 ], [ -122.149086, 37.745472 ], [ -122.151146, 37.749544 ], [ -122.151833, 37.751172 ], [ -122.151661, 37.753073 ], [ -122.150974, 37.754294 ], [ -122.148228, 37.756873 ], [ -122.147884, 37.758094 ], [ -122.147884, 37.759859 ], [ -122.148743, 37.761623 ], [ -122.152348, 37.766237 ], [ -122.155266, 37.770986 ], [ -122.157841, 37.773157 ], [ -122.164192, 37.776549 ], [ -122.170029, 37.779263 ], [ -122.173977, 37.781298 ], [ -122.177067, 37.783333 ], [ -122.179470, 37.784147 ], [ -122.188911, 37.784554 ], [ -122.193031, 37.785639 ], [ -122.199554, 37.788760 ], [ -122.201099, 37.789845 ], [ -122.203846, 37.792829 ], [ -122.205219, 37.794050 ], [ -122.208996, 37.795949 ], [ -122.211399, 37.797034 ], [ -122.214146, 37.797713 ], [ -122.219810, 37.799205 ], [ -122.228565, 37.800968 ], [ -122.229939, 37.801646 ], [ -122.234745, 37.805308 ], [ -122.237320, 37.806529 ], [ -122.241440, 37.808428 ], [ -122.248821, 37.810598 ], [ -122.249508, 37.811140 ], [ -122.250366, 37.812089 ], [ -122.251568, 37.816293 ], [ -122.252426, 37.817785 ], [ -122.253284, 37.818734 ], [ -122.255344, 37.820226 ], [ -122.258949, 37.822124 ], [ -122.262039, 37.823074 ], [ -122.269764, 37.824701 ], [ -122.281094, 37.827548 ], [ -122.283325, 37.827684 ], [ -122.286758, 37.826870 ], [ -122.288132, 37.826735 ], [ -122.289333, 37.827006 ], [ -122.292080, 37.827955 ], [ -122.293110, 37.828768 ], [ -122.293453, 37.829853 ], [ -122.293453, 37.830938 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102155930810", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.185478, 37.775600 ], [ -122.185307, 37.775735 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184105, 37.776685 ], [ -122.179813, 37.773971 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654601627", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181530, 37.775057 ], [ -122.181187, 37.774921 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.176552, 37.771258 ], [ -122.175522, 37.770850 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654601663", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.169857, 37.767594 ], [ -122.170029, 37.767729 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172089, 37.769222 ], [ -122.168140, 37.766508 ], [ -122.163849, 37.761623 ], [ -122.163162, 37.760808 ], [ -122.161789, 37.756601 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.160416, 37.752937 ], [ -122.159901, 37.751444 ], [ -122.158871, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.158871, 37.750087 ], [ -122.157841, 37.748322 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143078, 37.738277 ], [ -122.151833, 37.742485 ], [ -122.153721, 37.744250 ], [ -122.156467, 37.746286 ], [ -122.157326, 37.747508 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485645649", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279892, 37.828768 ], [ -122.284698, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485605278", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279892, 37.828768 ], [ -122.281952, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156217102", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279205, 37.828768 ], [ -122.272339, 37.827684 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134288", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820633 ], [ -122.255173, 37.822260 ], [ -122.258606, 37.824430 ], [ -122.266846, 37.827141 ], [ -122.279892, 37.828768 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134436", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820633 ], [ -122.255173, 37.822260 ], [ -122.258606, 37.824430 ], [ -122.266846, 37.827141 ], [ -122.275772, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102407366406", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820090 ], [ -122.255173, 37.821718 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485773833", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.253113, 37.817378 ], [ -122.255173, 37.821718 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089436004", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252426, 37.816836 ], [ -122.250366, 37.810869 ], [ -122.233887, 37.804359 ], [ -122.229767, 37.801104 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104469713187", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.242126, 37.807614 ], [ -122.241440, 37.807614 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156248968", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.237320, 37.805986 ], [ -122.235947, 37.805444 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638078801", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.229767, 37.801646 ], [ -122.228394, 37.801646 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275689", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.228394, 37.801646 ], [ -122.220840, 37.800019 ], [ -122.218781, 37.801104 ], [ -122.205734, 37.797848 ], [ -122.194061, 37.786453 ], [ -122.188568, 37.784283 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103717593123", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.228394, 37.801646 ], [ -122.220840, 37.800019 ], [ -122.218781, 37.801104 ], [ -122.207794, 37.798933 ], [ -122.202301, 37.795678 ], [ -122.193375, 37.785911 ], [ -122.187881, 37.784825 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275688", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.192688, 37.785368 ], [ -122.189255, 37.784283 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275434", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.189255, 37.784283 ], [ -122.188568, 37.784283 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275687", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.189255, 37.784283 ], [ -122.187195, 37.780484 ], [ -122.188568, 37.777770 ], [ -122.185822, 37.775600 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275692", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188568, 37.784283 ], [ -122.187195, 37.780484 ], [ -122.188568, 37.777770 ], [ -122.185822, 37.775600 ], [ -122.184448, 37.776685 ], [ -122.181702, 37.775057 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970092", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181702, 37.775057 ], [ -122.176895, 37.771258 ], [ -122.172089, 37.769629 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970093", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172775, 37.769629 ], [ -122.170029, 37.768001 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465114", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.170029, 37.768001 ], [ -122.163849, 37.760944 ], [ -122.160416, 37.751715 ], [ -122.156982, 37.746286 ], [ -122.152176, 37.742485 ], [ -122.146683, 37.739770 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954189105", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.161789, 37.756058 ], [ -122.159042, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465116", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.738684 ], [ -122.141190, 37.735969 ], [ -122.139130, 37.730539 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970094", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730539 ], [ -122.139130, 37.728910 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970095", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730539 ], [ -122.139130, 37.728910 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 10, "x": 164, "y": 396 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.137156, 37.724022 ], [ -122.134666, 37.720695 ], [ -122.133808, 37.719405 ], [ -122.133465, 37.718590 ], [ -122.131319, 37.714381 ], [ -122.129774, 37.712751 ], [ -122.127972, 37.711597 ], [ -122.125311, 37.710307 ], [ -122.121019, 37.707115 ], [ -122.117157, 37.705350 ], [ -122.114067, 37.703584 ], [ -122.109346, 37.700596 ], [ -122.108402, 37.699781 ], [ -122.105570, 37.696589 ], [ -122.104454, 37.695503 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.104111, 37.695503 ], [ -122.107286, 37.699034 ], [ -122.109003, 37.700664 ], [ -122.115698, 37.704807 ], [ -122.117929, 37.705961 ], [ -122.121019, 37.707319 ], [ -122.124281, 37.709899 ], [ -122.129087, 37.712547 ], [ -122.130804, 37.714177 ], [ -122.131920, 37.716078 ], [ -122.133121, 37.718590 ], [ -122.134151, 37.720356 ], [ -122.136898, 37.724022 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 10, "x": 164, "y": 395 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102157651658", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.271738, 37.827548 ], [ -122.271824, 37.827548 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254744, 37.821446 ], [ -122.255001, 37.821921 ], [ -122.256117, 37.822802 ], [ -122.258091, 37.824158 ], [ -122.258692, 37.824430 ], [ -122.260580, 37.824972 ], [ -122.263670, 37.825650 ], [ -122.265558, 37.826531 ], [ -122.267962, 37.827006 ], [ -122.271738, 37.827548 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156510290", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254143, 37.819887 ], [ -122.254314, 37.820362 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654602215", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252855, 37.817243 ], [ -122.252512, 37.816768 ], [ -122.252426, 37.816361 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241526, 37.807343 ], [ -122.241526, 37.807139 ], [ -122.241182, 37.806936 ], [ -122.240496, 37.806800 ], [ -122.239637, 37.806800 ], [ -122.238264, 37.805986 ], [ -122.237320, 37.805647 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786386 ], [ -122.194405, 37.786860 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.294569, 37.833039 ], [ -122.294140, 37.832158 ], [ -122.293882, 37.830667 ], [ -122.293797, 37.828836 ], [ -122.292938, 37.827887 ], [ -122.290621, 37.826667 ], [ -122.289591, 37.826396 ], [ -122.287788, 37.826396 ], [ -122.283239, 37.827277 ], [ -122.281265, 37.827277 ], [ -122.275257, 37.825786 ], [ -122.270451, 37.824769 ], [ -122.268391, 37.824158 ], [ -122.267361, 37.824023 ], [ -122.265987, 37.823616 ], [ -122.262383, 37.822938 ], [ -122.259121, 37.821853 ], [ -122.255945, 37.820294 ], [ -122.254572, 37.819412 ], [ -122.252855, 37.817921 ], [ -122.252340, 37.817311 ], [ -122.251740, 37.816226 ], [ -122.250452, 37.811886 ], [ -122.250023, 37.811276 ], [ -122.249079, 37.810530 ], [ -122.246761, 37.809716 ], [ -122.241869, 37.808292 ], [ -122.239637, 37.807411 ], [ -122.235432, 37.805444 ], [ -122.232685, 37.803613 ], [ -122.229767, 37.801307 ], [ -122.228823, 37.800900 ], [ -122.227364, 37.800493 ], [ -122.227020, 37.800493 ], [ -122.217236, 37.798323 ], [ -122.215776, 37.797848 ], [ -122.212172, 37.797034 ], [ -122.210798, 37.796560 ], [ -122.207451, 37.795000 ], [ -122.205219, 37.793779 ], [ -122.204447, 37.793168 ], [ -122.202215, 37.790727 ], [ -122.200670, 37.789234 ], [ -122.199554, 37.788488 ], [ -122.193804, 37.785639 ], [ -122.191401, 37.784825 ], [ -122.188654, 37.784283 ], [ -122.184706, 37.784011 ], [ -122.179298, 37.783876 ], [ -122.178268, 37.783604 ], [ -122.173719, 37.780959 ], [ -122.169771, 37.778856 ], [ -122.164192, 37.776346 ], [ -122.158098, 37.773225 ], [ -122.156467, 37.771936 ], [ -122.155266, 37.770647 ], [ -122.152433, 37.766101 ], [ -122.150545, 37.763862 ], [ -122.148314, 37.760334 ], [ -122.147970, 37.758773 ], [ -122.148056, 37.757823 ], [ -122.148743, 37.756533 ], [ -122.150974, 37.754430 ], [ -122.151575, 37.753615 ], [ -122.152004, 37.752055 ], [ -122.151833, 37.750697 ], [ -122.149858, 37.746490 ], [ -122.148914, 37.745064 ], [ -122.148228, 37.744386 ], [ -122.145824, 37.742621 ], [ -122.144108, 37.740313 ], [ -122.141447, 37.738141 ], [ -122.140675, 37.737055 ], [ -122.140245, 37.736105 ], [ -122.139559, 37.732915 ], [ -122.138357, 37.728706 ], [ -122.137842, 37.725379 ], [ -122.136984, 37.723682 ], [ -122.134666, 37.720695 ], [ -122.133808, 37.719405 ], [ -122.133465, 37.718590 ], [ -122.131319, 37.714381 ], [ -122.130203, 37.713159 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.129774, 37.713159 ], [ -122.130804, 37.714177 ], [ -122.131319, 37.714992 ], [ -122.133121, 37.718590 ], [ -122.134151, 37.720356 ], [ -122.136555, 37.723546 ], [ -122.137413, 37.724904 ], [ -122.137671, 37.725787 ], [ -122.138186, 37.728977 ], [ -122.138872, 37.731150 ], [ -122.140074, 37.736241 ], [ -122.140503, 37.737259 ], [ -122.141361, 37.738345 ], [ -122.143764, 37.740245 ], [ -122.145653, 37.742757 ], [ -122.146511, 37.743503 ], [ -122.148056, 37.744521 ], [ -122.149000, 37.745472 ], [ -122.151489, 37.750358 ], [ -122.151747, 37.751172 ], [ -122.151747, 37.752258 ], [ -122.151575, 37.753005 ], [ -122.150888, 37.754226 ], [ -122.149086, 37.755855 ], [ -122.148142, 37.757008 ], [ -122.147799, 37.758094 ], [ -122.147884, 37.759791 ], [ -122.148142, 37.760537 ], [ -122.148743, 37.761555 ], [ -122.150288, 37.763862 ], [ -122.152262, 37.766237 ], [ -122.153721, 37.768747 ], [ -122.155180, 37.770918 ], [ -122.156639, 37.772343 ], [ -122.157755, 37.773157 ], [ -122.158871, 37.773836 ], [ -122.164106, 37.776481 ], [ -122.167282, 37.777838 ], [ -122.170029, 37.779195 ], [ -122.173977, 37.781298 ], [ -122.177067, 37.783333 ], [ -122.178440, 37.783876 ], [ -122.179470, 37.784079 ], [ -122.184963, 37.784215 ], [ -122.188826, 37.784486 ], [ -122.190886, 37.784893 ], [ -122.193031, 37.785572 ], [ -122.196035, 37.786928 ], [ -122.199469, 37.788692 ], [ -122.201014, 37.789845 ], [ -122.203760, 37.792829 ], [ -122.205133, 37.793982 ], [ -122.206421, 37.794728 ], [ -122.208824, 37.795814 ], [ -122.208910, 37.795949 ], [ -122.211313, 37.796967 ], [ -122.214060, 37.797713 ], [ -122.219725, 37.799137 ], [ -122.228479, 37.800968 ], [ -122.229939, 37.801646 ], [ -122.232943, 37.804088 ], [ -122.234659, 37.805241 ], [ -122.237234, 37.806529 ], [ -122.241354, 37.808360 ], [ -122.247963, 37.810259 ], [ -122.248821, 37.810598 ], [ -122.249508, 37.811072 ], [ -122.250280, 37.812089 ], [ -122.251482, 37.816226 ], [ -122.252340, 37.817717 ], [ -122.253284, 37.818734 ], [ -122.254486, 37.819684 ], [ -122.257147, 37.821243 ], [ -122.258949, 37.822057 ], [ -122.262039, 37.823074 ], [ -122.267618, 37.824226 ], [ -122.269077, 37.824633 ], [ -122.269764, 37.824701 ], [ -122.274485, 37.825989 ], [ -122.281094, 37.827480 ], [ -122.282038, 37.827616 ], [ -122.283325, 37.827616 ], [ -122.286758, 37.826870 ], [ -122.288132, 37.826735 ], [ -122.289248, 37.826938 ], [ -122.291050, 37.827480 ], [ -122.291994, 37.827887 ], [ -122.293110, 37.828701 ], [ -122.293282, 37.828972 ], [ -122.293453, 37.829853 ], [ -122.293367, 37.830938 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102155930810", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.185392, 37.775532 ], [ -122.185221, 37.775735 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.184105, 37.776617 ], [ -122.180328, 37.774446 ], [ -122.179728, 37.773971 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654601627", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181444, 37.774989 ], [ -122.181187, 37.774921 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.176466, 37.771258 ], [ -122.175436, 37.770783 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102654601663", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.169771, 37.767594 ], [ -122.170029, 37.767729 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172003, 37.769222 ], [ -122.168055, 37.766440 ], [ -122.163849, 37.761623 ], [ -122.163162, 37.760741 ], [ -122.161703, 37.756533 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690383700", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.160416, 37.752937 ], [ -122.159815, 37.751376 ], [ -122.158871, 37.750019 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474249", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.158871, 37.750019 ], [ -122.157755, 37.748322 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103690474250", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.142992, 37.738209 ], [ -122.151747, 37.742417 ], [ -122.152519, 37.743028 ], [ -122.153635, 37.744182 ], [ -122.156467, 37.746218 ], [ -122.157240, 37.747440 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485645649", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279892, 37.828768 ], [ -122.284698, 37.827955 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485605278", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279549, 37.828497 ], [ -122.281609, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156217102", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279205, 37.828497 ], [ -122.271996, 37.827684 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134288", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820362 ], [ -122.255173, 37.822260 ], [ -122.258263, 37.824430 ], [ -122.259293, 37.824972 ], [ -122.266846, 37.827141 ], [ -122.279892, 37.828768 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134436", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820362 ], [ -122.255173, 37.822260 ], [ -122.258263, 37.824430 ], [ -122.266846, 37.827141 ], [ -122.275429, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102407366406", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820090 ], [ -122.254829, 37.821446 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485773833", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.253113, 37.817378 ], [ -122.254486, 37.819006 ], [ -122.254829, 37.821446 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089436004", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252426, 37.816565 ], [ -122.251053, 37.811954 ], [ -122.250023, 37.810869 ], [ -122.242813, 37.808156 ], [ -122.241783, 37.807071 ], [ -122.239723, 37.806800 ], [ -122.236290, 37.805173 ], [ -122.233887, 37.804088 ], [ -122.229767, 37.801104 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104469713198", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241783, 37.807343 ], [ -122.241783, 37.807614 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104469713187", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241783, 37.807343 ], [ -122.241440, 37.807343 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156248968", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.237320, 37.805715 ], [ -122.235947, 37.805444 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638078801", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.229424, 37.801646 ], [ -122.228050, 37.801375 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275689", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.228050, 37.801375 ], [ -122.220840, 37.800019 ], [ -122.219810, 37.800290 ], [ -122.219124, 37.801104 ], [ -122.218437, 37.801104 ], [ -122.209167, 37.798662 ], [ -122.207794, 37.798662 ], [ -122.205734, 37.797848 ], [ -122.201271, 37.794322 ], [ -122.194061, 37.786453 ], [ -122.192688, 37.785639 ], [ -122.188911, 37.784825 ], [ -122.188568, 37.784011 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103717593123", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.228050, 37.801375 ], [ -122.220497, 37.800019 ], [ -122.218781, 37.801104 ], [ -122.209511, 37.798662 ], [ -122.207794, 37.798933 ], [ -122.204704, 37.797306 ], [ -122.202301, 37.795407 ], [ -122.193375, 37.785911 ], [ -122.187881, 37.784554 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275688", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.192688, 37.785097 ], [ -122.188911, 37.784011 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275434", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188911, 37.784011 ], [ -122.188568, 37.784011 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275687", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188911, 37.784011 ], [ -122.187195, 37.780484 ], [ -122.187195, 37.778856 ], [ -122.188225, 37.777770 ], [ -122.185478, 37.775600 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275692", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188568, 37.784011 ], [ -122.187195, 37.780213 ], [ -122.187195, 37.778585 ], [ -122.188225, 37.777770 ], [ -122.185478, 37.775600 ], [ -122.184105, 37.776685 ], [ -122.181702, 37.775057 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970092", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181358, 37.775057 ], [ -122.176552, 37.771258 ], [ -122.172089, 37.769358 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970093", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172432, 37.769358 ], [ -122.170029, 37.767729 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465114", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.170029, 37.767729 ], [ -122.167969, 37.766101 ], [ -122.163506, 37.761216 ], [ -122.160072, 37.751715 ], [ -122.156639, 37.746286 ], [ -122.151833, 37.742485 ], [ -122.146339, 37.739770 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954189105", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.161446, 37.755787 ], [ -122.160072, 37.751444 ], [ -122.159042, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465116", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143250, 37.738413 ], [ -122.141190, 37.737055 ], [ -122.140846, 37.735969 ], [ -122.139130, 37.730539 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970094", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730539 ], [ -122.138786, 37.728910 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970095", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730539 ], [ -122.138786, 37.728910 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 328, "y": 791 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 1024 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485645649", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279720, 37.828633 ], [ -122.284527, 37.827684 ], [ -122.284698, 37.827819 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485605278", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279549, 37.828362 ], [ -122.280579, 37.828362 ], [ -122.281437, 37.828091 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156217102", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.279205, 37.828497 ], [ -122.275429, 37.828226 ], [ -122.271824, 37.827548 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134288", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254314, 37.820362 ], [ -122.254658, 37.821718 ], [ -122.255001, 37.822124 ], [ -122.258091, 37.824430 ], [ -122.259293, 37.824836 ], [ -122.264099, 37.825921 ], [ -122.265301, 37.826599 ], [ -122.266846, 37.827006 ], [ -122.276630, 37.828497 ], [ -122.279720, 37.828633 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104475134436", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254314, 37.820362 ], [ -122.254658, 37.821718 ], [ -122.255001, 37.822124 ], [ -122.258091, 37.824430 ], [ -122.264099, 37.825921 ], [ -122.265301, 37.826599 ], [ -122.266846, 37.827006 ], [ -122.275429, 37.828226 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102407366406", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.254486, 37.820090 ], [ -122.254829, 37.821446 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104485773833", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252941, 37.817243 ], [ -122.254314, 37.819006 ], [ -122.254829, 37.821446 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089436004", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.252426, 37.816429 ], [ -122.251225, 37.813581 ], [ -122.250710, 37.811547 ], [ -122.249851, 37.810733 ], [ -122.248993, 37.810191 ], [ -122.246933, 37.809648 ], [ -122.246418, 37.809241 ], [ -122.242813, 37.808156 ], [ -122.241611, 37.807071 ], [ -122.240925, 37.806800 ], [ -122.239723, 37.806800 ], [ -122.237835, 37.805715 ], [ -122.236118, 37.805173 ], [ -122.233887, 37.804088 ], [ -122.229767, 37.800968 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104469713198", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241611, 37.807343 ], [ -122.241783, 37.807614 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1104469713187", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.241611, 37.807343 ], [ -122.241440, 37.807207 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102156248968", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.237320, 37.805715 ], [ -122.235775, 37.805308 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102638078801", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.229252, 37.801646 ], [ -122.227879, 37.801375 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275689", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.227879, 37.801375 ], [ -122.220840, 37.800019 ], [ -122.219982, 37.800019 ], [ -122.219124, 37.800968 ], [ -122.218266, 37.800968 ], [ -122.215862, 37.800154 ], [ -122.215176, 37.800154 ], [ -122.209167, 37.798527 ], [ -122.207794, 37.798662 ], [ -122.205563, 37.797713 ], [ -122.200756, 37.793915 ], [ -122.194061, 37.786453 ], [ -122.192688, 37.785639 ], [ -122.190628, 37.785368 ], [ -122.189083, 37.784825 ], [ -122.188568, 37.784418 ], [ -122.188396, 37.783876 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1103717593123", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.227879, 37.801375 ], [ -122.220497, 37.800019 ], [ -122.220154, 37.800019 ], [ -122.219124, 37.801104 ], [ -122.218609, 37.801104 ], [ -122.209339, 37.798662 ], [ -122.207794, 37.798798 ], [ -122.204876, 37.797441 ], [ -122.202129, 37.795271 ], [ -122.194920, 37.787403 ], [ -122.193203, 37.785911 ], [ -122.192516, 37.785639 ], [ -122.190971, 37.785504 ], [ -122.187710, 37.784554 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275688", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.194061, 37.786453 ], [ -122.193890, 37.786046 ], [ -122.192688, 37.785097 ], [ -122.191486, 37.784554 ], [ -122.188911, 37.783876 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275434", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188911, 37.783876 ], [ -122.188396, 37.783876 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275687", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188911, 37.783876 ], [ -122.188396, 37.783604 ], [ -122.187195, 37.780484 ], [ -122.187195, 37.778720 ], [ -122.188225, 37.778042 ], [ -122.188225, 37.777770 ], [ -122.185478, 37.775464 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105281275692", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.188396, 37.783876 ], [ -122.187023, 37.780213 ], [ -122.187195, 37.778585 ], [ -122.188053, 37.778042 ], [ -122.188053, 37.777770 ], [ -122.187195, 37.776821 ], [ -122.185307, 37.775464 ], [ -122.184105, 37.776549 ], [ -122.181530, 37.775057 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970092", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.181187, 37.774921 ], [ -122.177753, 37.772343 ], [ -122.176895, 37.771393 ], [ -122.172089, 37.769222 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970093", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.172260, 37.769222 ], [ -122.170029, 37.767729 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465114", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.169857, 37.767594 ], [ -122.167969, 37.766237 ], [ -122.164536, 37.762166 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 329, "y": 791 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 2, "extent": 1024 }, "features": [
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970093", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.171402, 37.768679 ], [ -122.170029, 37.767729 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465114", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.169857, 37.767594 ], [ -122.167969, 37.766237 ], [ -122.163334, 37.760808 ], [ -122.159901, 37.751308 ], [ -122.156639, 37.746286 ], [ -122.153893, 37.744386 ], [ -122.151833, 37.742349 ], [ -122.146339, 37.739770 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102954189105", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.161446, 37.755651 ], [ -122.159901, 37.751444 ], [ -122.158871, 37.750087 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1105089465116", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143078, 37.738277 ], [ -122.141705, 37.737463 ], [ -122.140675, 37.735969 ], [ -122.139130, 37.730403 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970094", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730403 ], [ -122.138786, 37.728774 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102406970095", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.139130, 37.730403 ], [ -122.138786, 37.728774 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "LINEARID": "1102157509691", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -122.143421, 37.722392 ], [ -122.143421, 37.722257 ] ] } }
|
||||
] }
|
||||
] }
|
||||
] }
|
@ -1,12 +1,12 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-122.334735,37.695438,-122.104097,37.898925",
|
||||
"bounds": "-122.343750,37.695438,-122.104097,37.926868",
|
||||
"center": "-122.299805,37.892187,12",
|
||||
"description": "tests/join-population/merged.mbtiles",
|
||||
"description": "tests/join-population/tabblock_06001420.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"macarthur\", \"description\": \"\", \"minzoom\": 5, \"maxzoom\": 11, \"fields\": {\"FULLNAME\": \"String\", \"LINEARID\": \"String\", \"MTFCC\": \"String\", \"RTTYP\": \"String\"} }, { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"GEOID10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\"} } ] }",
|
||||
"maxzoom": "12",
|
||||
"minzoom": "0",
|
||||
"name": "tests/join-population/merged.mbtiles",
|
||||
"name": "tests/join-population/macarthur.mbtiles + tests/join-population/macarthur2.mbtiles + tests/join-population/tabblock_06001420.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
|
3028
tests/join-population/no-macarthur.mbtiles.json
Normal file
3028
tests/join-population/no-macarthur.mbtiles.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-122.294563,37.695438,-122.104097,37.833010",
|
||||
"bounds": "-122.343750,37.439974,-121.992188,37.996163",
|
||||
"center": "-122.167969,37.833010,10",
|
||||
"description": "tests/join-population/windows.mbtiles",
|
||||
"description": "tests/join-population/macarthur.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"macarthur\", \"description\": \"\", \"minzoom\": 5, \"maxzoom\": 10, \"fields\": {\"FULLNAME\": \"String\", \"LINEARID\": \"String\", \"MTFCC\": \"String\", \"RTTYP\": \"String\"} } ] }",
|
||||
"maxzoom": "10",
|
||||
"minzoom": "5",
|
||||
"name": "tests/join-population/windows.mbtiles",
|
||||
"name": "tests/join-population/macarthur.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
|
63
tests/muni/decode/multi.mbtiles.json
Normal file
63
tests/muni/decode/multi.mbtiles.json
Normal file
@ -0,0 +1,63 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-122.538670,37.705764,-12.240000,37.836443",
|
||||
"center": "-122.431641,37.788049,11",
|
||||
"description": "tests/muni/decode/multi.mbtiles",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"muni\", \"description\": \"\", \"minzoom\": 11, \"maxzoom\": 11, \"fields\": {\"name\": \"String\"} }, { \"id\": \"subway\", \"description\": \"\", \"minzoom\": 11, \"maxzoom\": 11, \"fields\": {\"name\": \"String\"} } ] }",
|
||||
"maxzoom": "11",
|
||||
"minzoom": "11",
|
||||
"name": "tests/muni/decode/multi.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 326, "y": 791 }, "features": [
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 327, "y": 792 }, "features": [
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 327, "y": 791 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "subway", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { "name": "Metro Castro Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.435331, 37.762708 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Castro Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.435246, 37.762641 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Forest Hill Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.458634, 37.748356 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Montgomery Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.402158, 37.788794 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Montgomery Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.401943, 37.788726 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Embarcadero Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.396579, 37.793033 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Embarcadero Station" }, "geometry": { "type": "Point", "coordinates": [ -122.396450, 37.793168 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Embarcadero Station" }, "geometry": { "type": "Point", "coordinates": [ -122.396407, 37.793168 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.412543, 37.780348 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Van Ness Station Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.419367, 37.775260 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Van Ness Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.419281, 37.775159 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Van Ness Station" }, "geometry": { "type": "Point", "coordinates": [ -122.419195, 37.775091 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Van Ness Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.419281, 37.775057 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Outbd" }, "geometry": { "type": "Point", "coordinates": [ -122.415032, 37.778686 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Downtn" }, "geometry": { "type": "Point", "coordinates": [ -122.414818, 37.778551 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Church Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.429323, 37.767356 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Church Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.429194, 37.767221 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Powell Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.407823, 37.784317 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { "name": "Metro Powell Station/Downtown" }, "geometry": { "type": "Point", "coordinates": [ -122.407737, 37.784215 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 954, "y": 791 }, "features": [
|
||||
] }
|
||||
] }
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1362
tests/ne_110m_admin_0_countries/out/-zg_-yname.json
Normal file
1362
tests/ne_110m_admin_0_countries/out/-zg_-yname.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
270
tests/nullisland/out/-b0_-z4_-NNullIsland.json
Normal file
270
tests/nullisland/out/-b0_-z4_-NNullIsland.json
Normal file
@ -0,0 +1,270 @@
|
||||
{ "type": "FeatureCollection", "properties": {
|
||||
"bounds": "-1.000000,-1.000000,1.000000,1.000000",
|
||||
"center": "-1.000000,1.000000,4",
|
||||
"description": "NullIsland",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 4, \"fields\": {} } ] }",
|
||||
"maxzoom": "4",
|
||||
"minzoom": "0",
|
||||
"name": "tests/nullisland/out/-b0_-z4_-NNullIsland.json.check.mbtiles",
|
||||
"type": "overlay",
|
||||
"version": "2"
|
||||
}, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 1.054628 ], [ 0.000000, 0.000000 ], [ -1.054688, 0.000000 ], [ -1.054688, 1.054628 ], [ 0.000000, 1.054628 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.054688, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.054688, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 0.000000 ], [ 0.000000, -0.966751 ], [ -1.054688, -0.966751 ], [ -1.054688, 0.000000 ], [ 0.000000, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.054628 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.000000, 1.054628 ], [ 0.966797, 1.054628 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.966751 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 0.000000 ], [ 0.966797, -0.966751 ], [ 0.000000, -0.966751 ], [ 0.000000, 0.000000 ], [ 0.966797, 0.000000 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 0, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 0.000000 ], [ 0.000000, -0.966751 ], [ -1.010742, -0.966751 ], [ -1.010742, 0.000000 ], [ 0.000000, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.966751 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 0, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 1.010690 ], [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ], [ -1.010742, 1.010690 ], [ 0.000000, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.966751 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 0.000000 ], [ 0.966797, -0.966751 ], [ 0.000000, -0.966751 ], [ 0.000000, 0.000000 ], [ 0.966797, 0.000000 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 0 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.010690 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ], [ 0.966797, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 0.000000 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 1, "y": 2 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 0.000000 ], [ 0.000000, -0.988720 ], [ -1.010742, -0.988720 ], [ -1.010742, 0.000000 ], [ 0.000000, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.988720 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 1, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 1.010690 ], [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ], [ -1.010742, 1.010690 ], [ 0.000000, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 2, "y": 2 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.988720 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.988770, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.988770, 0.000000 ], [ 0.988770, -0.988720 ], [ 0.000000, -0.988720 ], [ 0.000000, 0.000000 ], [ 0.988770, 0.000000 ] ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 2, "y": 1 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.988770, 1.010690 ], [ 0.988770, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ], [ 0.988770, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.988770, 0.000000 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 3, "y": 4 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ], [ -1.010742, -0.999705 ], [ -1.010742, 0.000000 ], [ 0.000000, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ] ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 3, "y": 3 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 1.010690 ], [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ], [ -1.010742, 1.010690 ], [ 0.000000, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.010742, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.010742, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 4, "y": 4 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.999756, 0.000000 ], [ 0.999756, -0.999705 ], [ 0.000000, -0.999705 ], [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.999756, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 4, "y": 3 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.010690 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.999756, 1.010690 ], [ 0.999756, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.000000, 1.010690 ], [ 0.999756, 1.010690 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.999756, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 7, "y": 8 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.005249, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.005249, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ], [ -1.005249, -0.999705 ], [ -1.005249, 0.000000 ], [ 0.000000, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, -0.999705 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 7, "y": 7 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.000000, 1.005197 ], [ 0.000000, 0.000000 ], [ -1.005249, 0.000000 ], [ -1.005249, 1.005197 ], [ 0.000000, 1.005197 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ -1.005249, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ -1.005249, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.005197 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.005197 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 8, "y": 8 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, -0.999705 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.999756, 0.000000 ], [ 0.999756, -0.999705 ], [ 0.000000, -0.999705 ], [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, -0.999705 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.999756, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
,
|
||||
{ "type": "FeatureCollection", "properties": { "zoom": 4, "x": 8, "y": 7 }, "features": [
|
||||
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 1.005197 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.000000, 1.005197 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.999756, 1.005197 ], [ 0.999756, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.000000, 1.005197 ], [ 0.999756, 1.005197 ] ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.999756, 0.000000 ] ] } }
|
||||
,
|
||||
{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.999756, 0.000000 ] } }
|
||||
] }
|
||||
] }
|
||||
] }
|
BIN
tests/raw-tiles/compare/0/0/0.pbf
Normal file
BIN
tests/raw-tiles/compare/0/0/0.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/1/0/0.pbf
Normal file
BIN
tests/raw-tiles/compare/1/0/0.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/10/163/366.pbf
Normal file
BIN
tests/raw-tiles/compare/10/163/366.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/11/326/732.pbf
Normal file
BIN
tests/raw-tiles/compare/11/326/732.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/12/652/1464.pbf
Normal file
BIN
tests/raw-tiles/compare/12/652/1464.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/12/652/1465.pbf
Normal file
BIN
tests/raw-tiles/compare/12/652/1465.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/13/1304/2928.pbf
Normal file
BIN
tests/raw-tiles/compare/13/1304/2928.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/13/1304/2929.pbf
Normal file
BIN
tests/raw-tiles/compare/13/1304/2929.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/13/1304/2930.pbf
Normal file
BIN
tests/raw-tiles/compare/13/1304/2930.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/14/2608/5856.pbf
Normal file
BIN
tests/raw-tiles/compare/14/2608/5856.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/14/2608/5857.pbf
Normal file
BIN
tests/raw-tiles/compare/14/2608/5857.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/14/2609/5860.pbf
Normal file
BIN
tests/raw-tiles/compare/14/2609/5860.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/2/0/1.pbf
Normal file
BIN
tests/raw-tiles/compare/2/0/1.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/3/1/2.pbf
Normal file
BIN
tests/raw-tiles/compare/3/1/2.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/4/2/5.pbf
Normal file
BIN
tests/raw-tiles/compare/4/2/5.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/5/5/11.pbf
Normal file
BIN
tests/raw-tiles/compare/5/5/11.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/6/10/22.pbf
Normal file
BIN
tests/raw-tiles/compare/6/10/22.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/7/20/45.pbf
Normal file
BIN
tests/raw-tiles/compare/7/20/45.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/8/40/91.pbf
Normal file
BIN
tests/raw-tiles/compare/8/40/91.pbf
Normal file
Binary file not shown.
BIN
tests/raw-tiles/compare/9/81/183.pbf
Normal file
BIN
tests/raw-tiles/compare/9/81/183.pbf
Normal file
Binary file not shown.
12
tests/raw-tiles/compare/metadata.json
Normal file
12
tests/raw-tiles/compare/metadata.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "tests/raw-tiles/raw-tiles",
|
||||
"description": "tests/raw-tiles/raw-tiles",
|
||||
"version": "2",
|
||||
"minzoom": "0",
|
||||
"maxzoom": "14",
|
||||
"center": "-122.662354,45.514045,14",
|
||||
"bounds": "-122.682427,45.512332,-122.654961,45.569975",
|
||||
"type": "overlay",
|
||||
"format": "pbf",
|
||||
"json": "{\"vector_layers\": [ { \"id\": \"hackspotsgeojson\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 14, \"fields\": {\"Address\": \"String\", \"Name\": \"String\", \"Notes\": \"String\"} } ] }"
|
||||
}
|
65
tests/raw-tiles/hackspots.geojson
Normal file
65
tests/raw-tiles/hackspots.geojson
Normal file
@ -0,0 +1,65 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Name": "Albina Press",
|
||||
"Address": "4637 N Albina Ave Portland, OR 97217",
|
||||
"Notes": "usually busy, outlets on side wall only"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
-122.67516911029816,
|
||||
45.55673233031101
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Name": "Arbor Lodge",
|
||||
"Address": "1507 N Rosa Parks Way Portland, OR 97217",
|
||||
"Notes": ""
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
-122.68242716789246,
|
||||
45.56997505986905
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Name": "Three Friends Coffeehouse",
|
||||
"Address": "201 SE 12th Ave, Portland, OR 97214",
|
||||
"Notes": ""
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
-122.65496134757996,
|
||||
45.5212590460849
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Name": "Lucky Labrador Brew Pub",
|
||||
"Address": "915 SE Hawthorne Blvd. Portland, OR 97214",
|
||||
"Notes": "Dog friendly"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
-122.65625953674315,
|
||||
45.512331780814186
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
File diff suppressed because one or more lines are too long
7
tests/wraparound/in.json
Normal file
7
tests/wraparound/in.json
Normal file
File diff suppressed because one or more lines are too long
78
tests/wraparound/out/-z5_--detect-longitude-wraparound.json
Normal file
78
tests/wraparound/out/-z5_--detect-longitude-wraparound.json
Normal file
File diff suppressed because one or more lines are too long
148
tile-join.cpp
148
tile-join.cpp
@ -29,11 +29,12 @@ struct stats {
|
||||
double minlat, minlon, maxlat, maxlon;
|
||||
};
|
||||
|
||||
void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::string, layermap_entry> &layermap, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, mvt_tile &outtile) {
|
||||
void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::string, layermap_entry> &layermap, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, int ifmatched, mvt_tile &outtile) {
|
||||
mvt_tile tile;
|
||||
int features_added = 0;
|
||||
bool was_compressed;
|
||||
|
||||
if (!tile.decode(message)) {
|
||||
if (!tile.decode(message, was_compressed)) {
|
||||
fprintf(stderr, "Couldn't decompress tile %d/%u/%u\n", z, x, y);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@ -41,6 +42,13 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
|
||||
for (size_t l = 0; l < tile.layers.size(); l++) {
|
||||
mvt_layer &layer = tile.layers[l];
|
||||
|
||||
if (keep_layers.size() > 0 && keep_layers.count(layer.name) == 0) {
|
||||
continue;
|
||||
}
|
||||
if (remove_layers.count(layer.name) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t ol;
|
||||
for (ol = 0; ol < outtile.layers.size(); ol++) {
|
||||
if (tile.layers[l].name == outtile.layers[ol].name) {
|
||||
@ -101,25 +109,25 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
|
||||
|
||||
if (val.type == mvt_string) {
|
||||
value = val.string_value;
|
||||
type = VT_STRING;
|
||||
type = mvt_string;
|
||||
} else if (val.type == mvt_int) {
|
||||
aprintf(&value, "%lld", (long long) val.numeric_value.int_value);
|
||||
type = VT_NUMBER;
|
||||
type = mvt_double;
|
||||
} else if (val.type == mvt_double) {
|
||||
aprintf(&value, "%g", val.numeric_value.double_value);
|
||||
type = VT_NUMBER;
|
||||
type = mvt_double;
|
||||
} else if (val.type == mvt_float) {
|
||||
aprintf(&value, "%g", val.numeric_value.float_value);
|
||||
type = VT_NUMBER;
|
||||
type = mvt_double;
|
||||
} else if (val.type == mvt_bool) {
|
||||
aprintf(&value, "%s", val.numeric_value.bool_value ? "true" : "false");
|
||||
type = VT_BOOLEAN;
|
||||
type = mvt_bool;
|
||||
} else if (val.type == mvt_sint) {
|
||||
aprintf(&value, "%lld", (long long) val.numeric_value.sint_value);
|
||||
type = VT_NUMBER;
|
||||
type = mvt_double;
|
||||
} else if (val.type == mvt_uint) {
|
||||
aprintf(&value, "%llu", (long long) val.numeric_value.uint_value);
|
||||
type = VT_NUMBER;
|
||||
type = mvt_double;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
@ -144,13 +152,13 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
|
||||
for (size_t i = 1; i < fields.size(); i++) {
|
||||
std::string joinkey = header[i];
|
||||
std::string joinval = fields[i];
|
||||
int attr_type = VT_STRING;
|
||||
int attr_type = mvt_string;
|
||||
|
||||
if (joinval.size() > 0) {
|
||||
if (joinval[0] == '"') {
|
||||
joinval = dequote(joinval);
|
||||
} else if ((joinval[0] >= '0' && joinval[0] <= '9') || joinval[0] == '-') {
|
||||
attr_type = VT_NUMBER;
|
||||
attr_type = mvt_double;
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,7 +166,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
|
||||
|
||||
if (exclude.count(joinkey) == 0) {
|
||||
mvt_value outval;
|
||||
if (attr_type == VT_STRING) {
|
||||
if (attr_type == mvt_string) {
|
||||
outval.type = mvt_string;
|
||||
outval.string_value = joinval;
|
||||
} else {
|
||||
@ -369,6 +377,8 @@ struct arg {
|
||||
std::vector<std::string> *header;
|
||||
std::map<std::string, std::vector<std::string>> *mapping;
|
||||
std::set<std::string> *exclude;
|
||||
std::set<std::string> *keep_layers;
|
||||
std::set<std::string> *remove_layers;
|
||||
int ifmatched;
|
||||
};
|
||||
|
||||
@ -379,7 +389,7 @@ void *join_worker(void *v) {
|
||||
mvt_tile tile;
|
||||
|
||||
for (size_t i = 0; i < ai->second.size(); i++) {
|
||||
handle(ai->second[i], ai->first.z, ai->first.x, ai->first.y, *(a->layermap), *(a->header), *(a->mapping), *(a->exclude), a->ifmatched, tile);
|
||||
handle(ai->second[i], ai->first.z, ai->first.x, ai->first.y, *(a->layermap), *(a->header), *(a->mapping), *(a->exclude), *(a->keep_layers), *(a->remove_layers), a->ifmatched, tile);
|
||||
}
|
||||
|
||||
ai->second.clear();
|
||||
@ -393,7 +403,9 @@ void *join_worker(void *v) {
|
||||
}
|
||||
|
||||
if (anything) {
|
||||
std::string compressed = tile.encode();
|
||||
std::string pbf = tile.encode();
|
||||
std::string compressed;
|
||||
compress(pbf, compressed);
|
||||
|
||||
if (!pk && compressed.size() > 500000) {
|
||||
fprintf(stderr, "Tile %lld/%lld/%lld size is %lld, >500000. Skipping this tile\n.", ai->first.z, ai->first.x, ai->first.y, (long long) compressed.size());
|
||||
@ -406,7 +418,7 @@ void *join_worker(void *v) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<std::map<std::string, layermap_entry>> &layermaps, sqlite3 *outdb, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched) {
|
||||
void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<std::map<std::string, layermap_entry>> &layermaps, sqlite3 *outdb, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers) {
|
||||
pthread_t pthreads[CPUS];
|
||||
std::vector<arg> args;
|
||||
|
||||
@ -417,6 +429,8 @@ void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<st
|
||||
args[i].header = &header;
|
||||
args[i].mapping = &mapping;
|
||||
args[i].exclude = &exclude;
|
||||
args[i].keep_layers = &keep_layers;
|
||||
args[i].remove_layers = &remove_layers;
|
||||
args[i].ifmatched = ifmatched;
|
||||
}
|
||||
|
||||
@ -453,7 +467,7 @@ void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<st
|
||||
}
|
||||
}
|
||||
|
||||
void decode(struct reader *readers, char *map, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution) {
|
||||
void decode(struct reader *readers, char *map, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution, std::string &description, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, std::string &name) {
|
||||
std::vector<std::map<std::string, layermap_entry>> layermaps;
|
||||
for (size_t i = 0; i < CPUS; i++) {
|
||||
layermaps.push_back(std::map<std::string, layermap_entry>());
|
||||
@ -461,11 +475,34 @@ void decode(struct reader *readers, char *map, std::map<std::string, layermap_en
|
||||
|
||||
std::map<zxy, std::vector<std::string>> tasks;
|
||||
|
||||
double minlat = INT_MAX;
|
||||
double minlon = INT_MAX;
|
||||
double maxlat = INT_MIN;
|
||||
double maxlon = INT_MIN;
|
||||
int zoom_for_bbox = -1;
|
||||
|
||||
while (readers != NULL && readers->zoom < 32) {
|
||||
reader *r = readers;
|
||||
readers = readers->next;
|
||||
r->next = NULL;
|
||||
|
||||
if (r->zoom != zoom_for_bbox) {
|
||||
// Only use highest zoom for bbox calculation
|
||||
// to avoid z0 always covering the world
|
||||
|
||||
minlat = minlon = INT_MAX;
|
||||
maxlat = maxlon = INT_MIN;
|
||||
zoom_for_bbox = r->zoom;
|
||||
}
|
||||
|
||||
double lat1, lon1, lat2, lon2;
|
||||
tile2lonlat(r->x, r->y, r->zoom, &lon1, &lat1);
|
||||
tile2lonlat(r->x + 1, r->y + 1, r->zoom, &lon2, &lat2);
|
||||
minlat = min(lat2, minlat);
|
||||
minlon = min(lon1, minlon);
|
||||
maxlat = max(lat1, maxlat);
|
||||
maxlon = max(lon2, maxlon);
|
||||
|
||||
zxy tile = zxy(r->zoom, r->x, r->y);
|
||||
if (tasks.count(tile) == 0) {
|
||||
tasks.insert(std::pair<zxy, std::vector<std::string>>(tile, std::vector<std::string>()));
|
||||
@ -475,7 +512,7 @@ void decode(struct reader *readers, char *map, std::map<std::string, layermap_en
|
||||
|
||||
if (readers == NULL || readers->zoom != r->zoom || readers->x != r->x || readers->y != r->y) {
|
||||
if (tasks.size() > 100 * CPUS) {
|
||||
handle_tasks(tasks, layermaps, outdb, header, mapping, exclude, ifmatched);
|
||||
handle_tasks(tasks, layermaps, outdb, header, mapping, exclude, ifmatched, keep_layers, remove_layers);
|
||||
tasks.clear();
|
||||
}
|
||||
}
|
||||
@ -506,7 +543,12 @@ void decode(struct reader *readers, char *map, std::map<std::string, layermap_en
|
||||
*rr = r;
|
||||
}
|
||||
|
||||
handle_tasks(tasks, layermaps, outdb, header, mapping, exclude, ifmatched);
|
||||
st->minlon = min(minlon, st->minlon);
|
||||
st->maxlon = max(maxlon, st->maxlon);
|
||||
st->minlat = min(minlat, st->minlat);
|
||||
st->maxlat = max(maxlat, st->maxlat);
|
||||
|
||||
handle_tasks(tasks, layermaps, outdb, header, mapping, exclude, ifmatched, keep_layers, remove_layers);
|
||||
layermap = merge_layermaps(layermaps);
|
||||
|
||||
struct reader *next;
|
||||
@ -541,15 +583,31 @@ void decode(struct reader *readers, char *map, std::map<std::string, layermap_en
|
||||
}
|
||||
sqlite3_finalize(r->stmt);
|
||||
}
|
||||
if (sqlite3_prepare_v2(r->db, "SELECT value from metadata where name = 'description'", -1, &r->stmt, NULL) == SQLITE_OK) {
|
||||
if (sqlite3_step(r->stmt) == SQLITE_ROW) {
|
||||
description = std::string((char *) sqlite3_column_text(r->stmt, 0));
|
||||
}
|
||||
sqlite3_finalize(r->stmt);
|
||||
}
|
||||
if (sqlite3_prepare_v2(r->db, "SELECT value from metadata where name = 'name'", -1, &r->stmt, NULL) == SQLITE_OK) {
|
||||
if (sqlite3_step(r->stmt) == SQLITE_ROW) {
|
||||
if (name.size() == 0) {
|
||||
name = std::string((char *) sqlite3_column_text(r->stmt, 0));
|
||||
} else {
|
||||
name += " + " + std::string((char *) sqlite3_column_text(r->stmt, 0));
|
||||
}
|
||||
}
|
||||
sqlite3_finalize(r->stmt);
|
||||
}
|
||||
if (sqlite3_prepare_v2(r->db, "SELECT value from metadata where name = 'bounds'", -1, &r->stmt, NULL) == SQLITE_OK) {
|
||||
if (sqlite3_step(r->stmt) == SQLITE_ROW) {
|
||||
const unsigned char *s = sqlite3_column_text(r->stmt, 0);
|
||||
double minlon, minlat, maxlon, maxlat;
|
||||
sscanf((char *) s, "%lf,%lf,%lf,%lf", &minlon, &minlat, &maxlon, &maxlat);
|
||||
st->minlon = min(minlon, st->minlon);
|
||||
st->maxlon = max(maxlon, st->maxlon);
|
||||
st->minlat = min(minlat, st->minlat);
|
||||
st->maxlat = max(maxlat, st->maxlat);
|
||||
if (sscanf((char *) s, "%lf,%lf,%lf,%lf", &minlon, &minlat, &maxlon, &maxlat) == 4) {
|
||||
st->minlon = min(minlon, st->minlon);
|
||||
st->maxlon = max(maxlon, st->maxlon);
|
||||
st->minlat = min(minlat, st->minlat);
|
||||
st->maxlat = max(maxlat, st->maxlat);
|
||||
}
|
||||
}
|
||||
sqlite3_finalize(r->stmt);
|
||||
}
|
||||
@ -661,12 +719,16 @@ int main(int argc, char **argv) {
|
||||
std::map<std::string, std::vector<std::string>> mapping;
|
||||
|
||||
std::set<std::string> exclude;
|
||||
std::set<std::string> keep_layers;
|
||||
std::set<std::string> remove_layers;
|
||||
|
||||
std::string set_name, set_description, set_attribution;
|
||||
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
int i;
|
||||
|
||||
while ((i = getopt(argc, argv, "fo:c:x:ip:")) != -1) {
|
||||
while ((i = getopt(argc, argv, "fo:c:x:ip:l:L:A:N:n:")) != -1) {
|
||||
switch (i) {
|
||||
case 'o':
|
||||
outfile = optarg;
|
||||
@ -680,6 +742,18 @@ int main(int argc, char **argv) {
|
||||
ifmatched = 1;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
set_attribution = optarg;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
set_name = optarg;
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
set_description = optarg;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
if (strcmp(optarg, "k") == 0) {
|
||||
pk = true;
|
||||
@ -703,6 +777,14 @@ int main(int argc, char **argv) {
|
||||
exclude.insert(std::string(optarg));
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
keep_layers.insert(std::string(optarg));
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
remove_layers.insert(std::string(optarg));
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(argv);
|
||||
}
|
||||
@ -724,6 +806,8 @@ int main(int argc, char **argv) {
|
||||
|
||||
std::map<std::string, layermap_entry> layermap;
|
||||
std::string attribution;
|
||||
std::string description;
|
||||
std::string name;
|
||||
|
||||
struct reader *readers = NULL;
|
||||
|
||||
@ -741,9 +825,19 @@ int main(int argc, char **argv) {
|
||||
*rr = r;
|
||||
}
|
||||
|
||||
decode(readers, csv, layermap, outdb, &st, header, mapping, exclude, ifmatched, attribution);
|
||||
decode(readers, csv, layermap, outdb, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name);
|
||||
|
||||
mbtiles_write_metadata(outdb, outfile, st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap);
|
||||
if (set_attribution.size() != 0) {
|
||||
attribution = set_attribution;
|
||||
}
|
||||
if (set_description.size() != 0) {
|
||||
description = set_description;
|
||||
}
|
||||
if (set_name.size() != 0) {
|
||||
name = set_name;
|
||||
}
|
||||
|
||||
mbtiles_write_metadata(outdb, NULL, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str());
|
||||
mbtiles_close(outdb, argv);
|
||||
|
||||
return 0;
|
||||
|
44
tile.cpp
44
tile.cpp
@ -22,6 +22,7 @@
|
||||
#include <time.h>
|
||||
#include "mvt.hpp"
|
||||
#include "mbtiles.hpp"
|
||||
#include "rawtiles.hpp"
|
||||
#include "geometry.hpp"
|
||||
#include "tile.hpp"
|
||||
#include "pool.hpp"
|
||||
@ -135,7 +136,7 @@ mvt_value retrieve_string(long long off, char *stringpool, int *otype) {
|
||||
}
|
||||
|
||||
mvt_value tv;
|
||||
if (type == VT_NUMBER) {
|
||||
if (type == mvt_double) {
|
||||
long long v;
|
||||
if (is_integer(s, &v)) {
|
||||
if (v >= 0) {
|
||||
@ -156,7 +157,7 @@ mvt_value retrieve_string(long long off, char *stringpool, int *otype) {
|
||||
tv.numeric_value.double_value = d;
|
||||
}
|
||||
}
|
||||
} else if (type == VT_BOOLEAN) {
|
||||
} else if (type == mvt_bool) {
|
||||
tv.type = mvt_bool;
|
||||
tv.numeric_value.bool_value = (s[0] == 't');
|
||||
} else {
|
||||
@ -449,7 +450,7 @@ void *partial_feature_worker(void *v) {
|
||||
|
||||
double area = 0;
|
||||
if (t == VT_POLYGON) {
|
||||
area = get_area(geom, 0, geom.size());
|
||||
area = get_mp_area(geom);
|
||||
}
|
||||
|
||||
if ((t == VT_LINE || t == VT_POLYGON) && !(prevent[P_SIMPLIFY] || (z == maxzoom && prevent[P_SIMPLIFY_LOW]) || (z < maxzoom && additional[A_GRID_LOW_ZOOMS]))) {
|
||||
@ -488,10 +489,6 @@ void *partial_feature_worker(void *v) {
|
||||
std::vector<drawvec> geoms;
|
||||
geoms.push_back(geom);
|
||||
|
||||
if (t == VT_POLYGON && !prevent[P_POLYGON_SPLIT]) {
|
||||
geoms = chop_polygon(geoms);
|
||||
}
|
||||
|
||||
if (t == VT_POLYGON) {
|
||||
// Scaling may have made the polygon degenerate.
|
||||
// Give Clipper a chance to try to fix it.
|
||||
@ -1188,6 +1185,7 @@ struct write_tile_args {
|
||||
int min_detail;
|
||||
int basezoom;
|
||||
sqlite3 *outdb;
|
||||
const char *outdir;
|
||||
double droprate;
|
||||
int buffer;
|
||||
const char *fname;
|
||||
@ -1225,7 +1223,7 @@ struct write_tile_args {
|
||||
double fraction_out;
|
||||
};
|
||||
|
||||
long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *stringpool, int z, unsigned tx, unsigned ty, int detail, int min_detail, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, FILE **geomfile, int minzoom, int maxzoom, double todo, volatile long long *along, long long alongminus, double gamma, int child_shards, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, volatile int *running, double simplification, std::vector<std::map<std::string, layermap_entry>> *layermaps, std::vector<std::vector<std::string>> *layer_unmaps, size_t pass, size_t passes, unsigned long long mingap, long long minextent, double fraction, write_tile_args *arg) {
|
||||
long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *stringpool, int z, unsigned tx, unsigned ty, int detail, int min_detail, int basezoom, sqlite3 *outdb, const char *outdir, double droprate, int buffer, const char *fname, FILE **geomfile, int minzoom, int maxzoom, double todo, volatile long long *along, long long alongminus, double gamma, int child_shards, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, volatile int *running, double simplification, std::vector<std::map<std::string, layermap_entry>> *layermaps, std::vector<std::vector<std::string>> *layer_unmaps, size_t pass, size_t passes, unsigned long long mingap, long long minextent, double fraction, write_tile_args *arg) {
|
||||
int line_detail;
|
||||
double merge_fraction = 1;
|
||||
double mingap_fraction = 1;
|
||||
@ -1455,7 +1453,9 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
|
||||
}
|
||||
|
||||
if (first_time && pass == 1) { /* only write out the next zoom once, even if we retry */
|
||||
rewrite(geom, z, nextzoom, maxzoom, bbox, tx, ty, buffer, line_detail, within, geompos, geomfile, fname, t, layer, metastart, feature_minzoom, child_shards, max_zoom_increment, original_seq, tippecanoe_minzoom, tippecanoe_maxzoom, segment, initial_x, initial_y, m, metakeys, metavals, has_id, id, index, extent);
|
||||
if (tippecanoe_maxzoom == -1 || tippecanoe_maxzoom >= nextzoom) {
|
||||
rewrite(geom, z, nextzoom, maxzoom, bbox, tx, ty, buffer, line_detail, within, geompos, geomfile, fname, t, layer, metastart, feature_minzoom, child_shards, max_zoom_increment, original_seq, tippecanoe_minzoom, tippecanoe_maxzoom, segment, initial_x, initial_y, m, metakeys, metavals, has_id, id, index, extent);
|
||||
}
|
||||
}
|
||||
|
||||
if (z < minzoom) {
|
||||
@ -1619,6 +1619,12 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
|
||||
}
|
||||
|
||||
auto l = layers.find(layername);
|
||||
if (l == layers.end()) {
|
||||
fprintf(stderr, "Internal error: couldn't find layer %s\n", layername.c_str());
|
||||
fprintf(stderr, "segment %d\n", partials[i].segment);
|
||||
fprintf(stderr, "layer %lld\n", partials[i].layer);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
l->second.push_back(c);
|
||||
}
|
||||
}
|
||||
@ -1833,7 +1839,14 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
|
||||
}
|
||||
}
|
||||
|
||||
std::string compressed = tile.encode();
|
||||
std::string compressed;
|
||||
std::string pbf = tile.encode();
|
||||
|
||||
if (!prevent[P_TILE_COMPRESSION]) {
|
||||
compress(pbf, compressed);
|
||||
} else {
|
||||
compressed = pbf;
|
||||
}
|
||||
|
||||
if (compressed.size() > max_tile_size && !prevent[P_KILOBYTE_LIMIT]) {
|
||||
if (!quiet) {
|
||||
@ -1905,7 +1918,11 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
mbtiles_write_tile(outdb, z, tx, ty, compressed.data(), compressed.size());
|
||||
if (outdb != NULL) {
|
||||
mbtiles_write_tile(outdb, z, tx, ty, compressed.data(), compressed.size());
|
||||
} else if (outdir != NULL) {
|
||||
write_raw_tile(outdir, z, tx, ty, compressed);
|
||||
}
|
||||
|
||||
if (pthread_mutex_unlock(&db_lock) != 0) {
|
||||
perror("pthread_mutex_unlock");
|
||||
@ -1967,7 +1984,7 @@ void *run_thread(void *vargs) {
|
||||
|
||||
// fprintf(stderr, "%d/%u/%u\n", z, x, y);
|
||||
|
||||
long long len = write_tile(geom, &geompos, arg->metabase, arg->stringpool, z, x, y, z == arg->maxzoom ? arg->full_detail : arg->low_detail, arg->min_detail, arg->basezoom, arg->outdb, arg->droprate, arg->buffer, arg->fname, arg->geomfile, arg->minzoom, arg->maxzoom, arg->todo, arg->along, geompos, arg->gamma, arg->child_shards, arg->meta_off, arg->pool_off, arg->initial_x, arg->initial_y, arg->running, arg->simplification, arg->layermaps, arg->layer_unmaps, arg->pass, arg->passes, arg->mingap, arg->minextent, arg->fraction, arg);
|
||||
long long len = write_tile(geom, &geompos, arg->metabase, arg->stringpool, z, x, y, z == arg->maxzoom ? arg->full_detail : arg->low_detail, arg->min_detail, arg->basezoom, arg->outdb, arg->outdir, arg->droprate, arg->buffer, arg->fname, arg->geomfile, arg->minzoom, arg->maxzoom, arg->todo, arg->along, geompos, arg->gamma, arg->child_shards, arg->meta_off, arg->pool_off, arg->initial_x, arg->initial_y, arg->running, arg->simplification, arg->layermaps, arg->layer_unmaps, arg->pass, arg->passes, arg->mingap, arg->minextent, arg->fraction, arg);
|
||||
|
||||
if (len < 0) {
|
||||
int *err = &arg->err;
|
||||
@ -2032,7 +2049,7 @@ void *run_thread(void *vargs) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, unsigned *midx, unsigned *midy, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, double simplification, std::vector<std::map<std::string, layermap_entry>> &layermaps) {
|
||||
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, unsigned *midx, unsigned *midy, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, const char *outdir, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, double simplification, std::vector<std::map<std::string, layermap_entry>> &layermaps) {
|
||||
// Table to map segment and layer number back to layer name
|
||||
std::vector<std::vector<std::string>> layer_unmaps;
|
||||
for (size_t seg = 0; seg < layermaps.size(); seg++) {
|
||||
@ -2167,6 +2184,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo
|
||||
args[thread].min_detail = min_detail;
|
||||
args[thread].basezoom = basezoom;
|
||||
args[thread].outdb = outdb; // locked with db_lock
|
||||
args[thread].outdir = outdir;
|
||||
args[thread].droprate = droprate;
|
||||
args[thread].buffer = buffer;
|
||||
args[thread].fname = fname;
|
||||
|
4
tile.hpp
4
tile.hpp
@ -1,5 +1,5 @@
|
||||
long long write_tile(char **geom, char *metabase, char *stringpool, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int min_detail, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, FILE **geomfile, int file_minzoom, int file_maxzoom, double todo, char *geomstart, long long along, double gamma, int nlayers);
|
||||
long long write_tile(char **geom, char *metabase, char *stringpool, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int min_detail, int basezoom, sqlite3 *outdb, const char *outdir, double droprate, int buffer, const char *fname, FILE **geomfile, int file_minzoom, int file_maxzoom, double todo, char *geomstart, long long along, double gamma, int nlayers);
|
||||
|
||||
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, unsigned *midx, unsigned *midy, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, double simplification, std::vector<std::map<std::string, layermap_entry> > &layermap);
|
||||
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, unsigned *midx, unsigned *midy, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, const char *outdir, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, double simplification, std::vector<std::map<std::string, layermap_entry> > &layermap);
|
||||
|
||||
int manage_gap(unsigned long long index, unsigned long long *previndex, double scale, double gamma, double *gap);
|
||||
|
@ -1 +1 @@
|
||||
#define VERSION "tippecanoe v1.16.4\n"
|
||||
#define VERSION "tippecanoe v1.18.0\n"
|
||||
|
Reference in New Issue
Block a user