From 5d06f01e2804fc4fc03a42a3771705ce79436308 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 28 Jun 2016 15:18:27 -0700 Subject: [PATCH] Add the ability to tippecanoe-decode into EPSG:3857 instead of WGS84 --- Makefile | 3 ++ README.md | 4 ++ decode.cpp | 17 ++++++--- main.cpp | 28 ++------------ man/tippecanoe.1 | 5 +++ projection.cpp | 38 +++++++++++++++++++ projection.hpp | 4 ++ tests/pbf/11-328-791.3857.json | 67 ++++++++++++++++++++++++++++++++++ 8 files changed, 136 insertions(+), 30 deletions(-) create mode 100644 tests/pbf/11-328-791.3857.json diff --git a/Makefile b/Makefile index 5645f15..4d1b121 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,9 @@ 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 rm tests/pbf/11-328-791.vector.pbf.out + ./tippecanoe-decode -t EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.vector.pbf.out + cmp tests/pbf/11-328-791.3857.json tests/pbf/11-328-791.3857.vector.pbf.out + rm tests/pbf/11-328-791.3857.vector.pbf.out join-test: ./tippecanoe -f -z9 -z12 -o tests/join-population/tabblock_06001420.mbtiles tests/join-population/tabblock_06001420.json diff --git a/README.md b/README.md index 727c311..476467f 100644 --- a/README.md +++ b/README.md @@ -351,3 +351,7 @@ If you decode an entire file, you get a nested `FeatureCollection` identifying e tile and layer separately. Note that the same features generally appear at all zooms, so the output for the file will have many copies of the same features at different resolutions. + +### Options + + * -t _projection_: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator). diff --git a/decode.cpp b/decode.cpp index 2be58bb..38ff736 100644 --- a/decode.cpp +++ b/decode.cpp @@ -165,7 +165,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) { long long wy = scale * y + (scale / extent) * py; double lat, lon; - tile2lonlat(wx, wy, 32, &lon, &lat); + projection->unproject(wx, wy, 32, &lon, &lat); ops.push_back(lonlat(op, lon, lat, px, py)); } else { @@ -455,17 +455,24 @@ void decode(char *fname, int z, unsigned x, unsigned y) { } void usage(char **argv) { - fprintf(stderr, "Usage: %s file.mbtiles zoom x y\n", argv[0]); + fprintf(stderr, "Usage: %s [-t projection] file.mbtiles zoom x y\n", argv[0]); exit(EXIT_FAILURE); } int main(int argc, char **argv) { extern int optind; - // extern char *optarg; + extern char *optarg; int i; - while ((i = getopt(argc, argv, "")) != -1) { - usage(argv); + while ((i = getopt(argc, argv, "t:")) != -1) { + switch (i) { + case 't': + set_projection_or_exit(optarg); + break; + + default: + usage(argv); + } } if (argc == optind + 4) { diff --git a/main.cpp b/main.cpp index a127033..1e565b2 100644 --- a/main.cpp +++ b/main.cpp @@ -1705,14 +1705,6 @@ static bool has_name(struct option *long_options, int *pl) { return false; } -struct projection projections[] = { - {"EPSG:4326", lonlat2tile, "urn:ogc:def:crs:OGC:1.3:CRS84"}, - {"EPSG:3857", epsg3857totile, "urn:ogc:def:crs:EPSG::3857"}, - {NULL, NULL}, -}; - -struct projection *projection = &projections[0]; - int main(int argc, char **argv) { #ifdef MTRACE mtrace(); @@ -1987,23 +1979,9 @@ int main(int argc, char **argv) { read_parallel = 1; break; - case 's': { - struct projection *p; - for (p = projections; p->name != NULL; p++) { - if (strcmp(p->name, optarg) == 0) { - projection = p; - break; - } - if (strcmp(p->alias, optarg) == 0) { - projection = p; - break; - } - } - if (p->name == NULL) { - fprintf(stderr, "Unknown projection (-s): %s\n", optarg); - exit(EXIT_FAILURE); - } - } break; + case 's': + set_projection_or_exit(optarg); + break; default: { int width = 7 + strlen(argv[0]); diff --git a/man/tippecanoe.1 b/man/tippecanoe.1 index 0f82421..0b05472 100644 --- a/man/tippecanoe.1 +++ b/man/tippecanoe.1 @@ -410,3 +410,8 @@ If you decode an entire file, you get a nested \fB\fCFeatureCollection\fR identi tile and layer separately. Note that the same features generally appear at all zooms, so the output for the file will have many copies of the same features at different 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). +.RE diff --git a/projection.cpp b/projection.cpp index 74bdafd..351399e 100644 --- a/projection.cpp +++ b/projection.cpp @@ -1,7 +1,17 @@ #include +#include +#include #include #include "projection.hpp" +struct projection projections[] = { + {"EPSG:4326", lonlat2tile, tile2lonlat, "urn:ogc:def:crs:OGC:1.3:CRS84"}, + {"EPSG:3857", epsg3857totile, tiletoepsg3857, "urn:ogc:def:crs:EPSG::3857"}, + {NULL, NULL}, +}; + +struct projection *projection = &projections[0]; + // http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames void lonlat2tile(double lon, double lat, int zoom, long long *x, long long *y) { // Must limit latitude somewhere to prevent overflow. @@ -48,6 +58,16 @@ void epsg3857totile(double ix, double iy, int zoom, long long *x, long long *y) } } +void tiletoepsg3857(long long ix, long long iy, int zoom, double *ox, double *oy) { + if (zoom != 0) { + ix <<= (32 - zoom); + iy <<= (32 - zoom); + } + + *ox = (ix - (1LL << 31)) * M_PI * 6378137.0 / (1LL << 31); + *oy = ((1LL << 32) - 1 - iy - (1LL << 31)) * M_PI * 6378137.0 / (1LL << 31); +} + unsigned long long encode(unsigned int wx, unsigned int wy) { unsigned long long out = 0; @@ -72,3 +92,21 @@ void decode(unsigned long long index, unsigned *wx, unsigned *wy) { *wy |= ((index >> (64 - 2 * (i + 1) + 0)) & 1) << (32 - (i + 1)); } } + +void set_projection_or_exit(const char *optarg) { + struct projection *p; + for (p = projections; p->name != NULL; p++) { + if (strcmp(p->name, optarg) == 0) { + projection = p; + break; + } + if (strcmp(p->alias, optarg) == 0) { + projection = p; + break; + } + } + if (p->name == NULL) { + fprintf(stderr, "Unknown projection (-s): %s\n", optarg); + exit(EXIT_FAILURE); + } +} diff --git a/projection.hpp b/projection.hpp index 8543aaf..233ea9b 100644 --- a/projection.hpp +++ b/projection.hpp @@ -1,13 +1,17 @@ void lonlat2tile(double lon, double lat, int zoom, long long *x, long long *y); void epsg3857totile(double ix, double iy, int zoom, long long *x, long long *y); void tile2lonlat(long long x, long long y, int zoom, double *lon, double *lat); +void tiletoepsg3857(long long x, long long y, int zoom, double *ox, double *oy); unsigned long long encode(unsigned int wx, unsigned int wy); void decode(unsigned long long index, unsigned *wx, unsigned *wy); +void set_projection_or_exit(const char *optarg); struct projection { const char *name; void (*project)(double ix, double iy, int zoom, long long *ox, long long *oy); + void (*unproject)(long long ix, long long iy, int zoom, double *ox, double *oy); const char *alias; }; extern struct projection *projection; +extern struct projection projections[]; diff --git a/tests/pbf/11-328-791.3857.json b/tests/pbf/11-328-791.3857.json new file mode 100644 index 0000000..df75227 --- /dev/null +++ b/tests/pbf/11-328-791.3857.json @@ -0,0 +1,67 @@ +{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 328, "y": 791 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "macarthur", "version": 1, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "LINEARID": "1104485645649", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13612111.421538, 4555240.804753 ], [ -13612183.081252, 4555231.250125 ], [ -13612426.724279, 4555159.590410 ], [ -13612522.270565, 4555145.258468 ], [ -13612646.480736, 4555111.817268 ], [ -13612665.589993, 4555130.926525 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104485605278", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13612087.534966, 4555197.808925 ], [ -13612092.312281, 4555207.363553 ], [ -13612197.413195, 4555197.808925 ], [ -13612350.287251, 4555150.035782 ], [ -13612484.052051, 4555097.485325 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102156217102", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13612054.093766, 4555216.918182 ], [ -13611858.223882, 4555207.363553 ], [ -13611633.690111, 4555173.922353 ], [ -13611232.395712, 4555092.708011 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102157651658", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13611222.841084, 4555092.708011 ], [ -13611232.395712, 4555092.708011 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104475134288", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609288.028805, 4554079.917386 ], [ -13609316.692691, 4554247.123385 ], [ -13609359.688519, 4554323.560414 ], [ -13609536.449147, 4554481.211784 ], [ -13609550.781090, 4554505.098356 ], [ -13609660.659318, 4554605.421955 ], [ -13609708.432461, 4554638.863155 ], [ -13609842.197260, 4554696.190927 ], [ -13609966.407431, 4554739.186755 ], [ -13610343.815259, 4554849.064983 ], [ -13610534.907829, 4554958.943211 ], [ -13610678.227257, 4555001.939040 ], [ -13611829.559996, 4555226.472810 ], [ -13611996.765995, 4555245.582067 ], [ -13612111.421538, 4555240.804753 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104475134436", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609288.028805, 4554079.917386 ], [ -13609316.692691, 4554247.123385 ], [ -13609359.688519, 4554323.560414 ], [ -13609536.449147, 4554481.211784 ], [ -13609550.781090, 4554505.098356 ], [ -13609627.218118, 4554576.758070 ], [ -13609708.432461, 4554638.863155 ], [ -13609842.197260, 4554696.190927 ], [ -13609966.407431, 4554739.186755 ], [ -13610343.815259, 4554849.064983 ], [ -13610534.907829, 4554958.943211 ], [ -13610625.676800, 4554987.607097 ], [ -13610792.882800, 4555025.825611 ], [ -13611638.467425, 4555188.254296 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104486392881", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609335.801948, 4554232.791443 ], [ -13609364.465834, 4554299.673842 ], [ -13609388.352405, 4554328.337728 ], [ -13609708.432461, 4554614.976584 ], [ -13609770.537546, 4554648.417784 ], [ -13609985.516689, 4554729.632126 ], [ -13610329.483316, 4554825.178412 ], [ -13610420.252287, 4554868.174240 ], [ -13610539.685144, 4554944.611268 ], [ -13610582.680972, 4554958.943211 ], [ -13610683.004572, 4554987.607097 ], [ -13611222.841084, 4555092.708011 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102407366406", "FULLNAME": "W Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609302.360748, 4554036.921558 ], [ -13609302.360748, 4554075.140072 ], [ -13609335.801948, 4554232.791443 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102156510290", "FULLNAME": "W Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609268.919548, 4554008.257672 ], [ -13609288.028805, 4554079.917386 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104485773833", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609120.822806, 4553635.627159 ], [ -13609187.705206, 4553755.060016 ], [ -13609278.474177, 4553884.047501 ], [ -13609297.583434, 4553989.148415 ], [ -13609302.360748, 4554075.140072 ], [ -13609335.801948, 4554232.791443 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102654602215", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609120.822806, 4553635.627159 ], [ -13609087.381606, 4553568.744759 ], [ -13609073.049663, 4553511.416988 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1105089436004", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13609073.049663, 4553511.416988 ], [ -13609034.831149, 4553377.652189 ], [ -13608948.839492, 4553148.341104 ], [ -13608896.289035, 4552885.588819 ], [ -13608881.957093, 4552842.592991 ], [ -13608848.515893, 4552780.487905 ], [ -13608776.856179, 4552718.382820 ], [ -13608690.864522, 4552651.500420 ], [ -13608662.200636, 4552637.168477 ], [ -13608475.885380, 4552565.508763 ], [ -13608394.671037, 4552512.958306 ], [ -13608002.931267, 4552350.529621 ], [ -13607979.044696, 4552336.197678 ], [ -13607916.939611, 4552274.092593 ], [ -13607869.166468, 4552207.210193 ], [ -13607850.057211, 4552192.878250 ], [ -13607783.174811, 4552164.214365 ], [ -13607654.187326, 4552154.659736 ], [ -13607501.313269, 4552044.781508 ], [ -13607252.892927, 4551939.680594 ], [ -13607100.018871, 4551825.025052 ], [ -13607014.027214, 4551777.251909 ], [ -13606550.627730, 4551332.961682 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104469713198", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13607864.389154, 4552240.651393 ], [ -13607883.498411, 4552269.315278 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104469713187", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13607864.389154, 4552240.651393 ], [ -13607854.834525, 4552221.542136 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102638069562", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13607864.389154, 4552240.651393 ], [ -13607854.834525, 4552226.319450 ], [ -13607859.611839, 4552216.764822 ], [ -13607826.170639, 4552188.100936 ], [ -13607744.956297, 4552168.991679 ], [ -13607673.296583, 4552168.991679 ], [ -13607630.300754, 4552154.659736 ], [ -13607525.199841, 4552068.668079 ], [ -13607391.435041, 4552006.562994 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102156248968", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13607391.435041, 4552006.562994 ], [ -13607219.451727, 4551949.235223 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102638078801", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13606493.299959, 4551442.839910 ], [ -13606340.425902, 4551404.621396 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1103717593123", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13606340.425902, 4551404.621396 ], [ -13605518.727848, 4551213.528825 ], [ -13605480.509334, 4551213.528825 ], [ -13605451.845448, 4551232.638082 ], [ -13605389.740363, 4551332.961682 ], [ -13605341.967220, 4551361.625568 ], [ -13605327.635277, 4551361.625568 ], [ -13605093.546878, 4551285.188539 ], [ -13605026.664479, 4551256.524654 ], [ -13604687.475166, 4551156.201054 ], [ -13604252.739567, 4551012.881626 ], [ -13604209.743739, 4551008.104312 ], [ -13604138.084025, 4551027.213569 ], [ -13604099.865511, 4551027.213569 ], [ -13603765.453512, 4550831.343684 ], [ -13603373.713742, 4550425.271971 ], [ -13602661.893916, 4549426.813289 ], [ -13602499.465231, 4549240.498033 ], [ -13602418.250888, 4549192.724890 ], [ -13602131.612032, 4549125.842490 ], [ -13602026.511118, 4549078.069348 ], [ -13601954.851404, 4549054.182776 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1103717593124", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13606340.425902, 4551404.621396 ], [ -13606240.102303, 4551371.180196 ], [ -13605509.173220, 4551203.974197 ], [ -13605480.509334, 4551203.974197 ], [ -13605447.068134, 4551223.083454 ], [ -13605380.185734, 4551328.184368 ], [ -13605351.521849, 4551347.293625 ], [ -13605313.303335, 4551347.293625 ], [ -13605169.983907, 4551304.297796 ], [ -13604993.223279, 4551232.638082 ], [ -13604921.563565, 4551218.306140 ], [ -13604577.596937, 4551113.205226 ], [ -13604247.962253, 4551003.326997 ], [ -13604200.189110, 4550998.549683 ], [ -13604138.084025, 4551017.658940 ], [ -13604104.642825, 4551017.658940 ], [ -13603784.562769, 4550831.343684 ], [ -13603483.591970, 4550525.595571 ], [ -13603316.385971, 4550329.725686 ], [ -13602671.448544, 4549422.035975 ], [ -13602489.910602, 4549226.166090 ], [ -13602394.364317, 4549178.392947 ], [ -13602150.721289, 4549121.065176 ], [ -13602050.397690, 4549082.846662 ], [ -13601978.737976, 4549035.073519 ], [ -13601940.519462, 4548929.972605 ], [ -13601902.300947, 4548772.321234 ], [ -13601811.531976, 4548490.459693 ], [ -13601792.422719, 4548399.690722 ], [ -13601806.754662, 4548208.598151 ], [ -13601892.746319, 4548127.383808 ], [ -13601902.300947, 4548108.274551 ], [ -13601902.300947, 4548070.056037 ], [ -13601806.754662, 4547945.845866 ], [ -13601663.435234, 4547797.749124 ], [ -13601606.107463, 4547754.753295 ], [ -13601510.561177, 4547874.186152 ], [ -13601462.788035, 4547902.850038 ], [ -13601367.241749, 4547826.413009 ], [ -13601171.371864, 4547687.870896 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102156241736", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13602580.679573, 4549288.271175 ], [ -13602614.120773, 4549355.153575 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104486090991", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -13613769.149589, 4555866.632922 ], [ -13613721.376446, 4555737.645437 ], [ -13613687.935246, 4555494.002409 ], [ -13613687.935246, 4555302.909839 ], [ -13613664.048675, 4555236.027439 ], [ -13613635.384789, 4555193.031610 ], [ -13613582.834332, 4555140.481153 ], [ -13613324.859362, 4554968.497840 ], [ -13613257.976962, 4554939.833954 ], [ -13613210.203819, 4554930.279326 ], [ -13613038.220506, 4554925.502011 ], [ -13612536.602508, 4555044.934868 ], [ -13612450.610851, 4555059.266811 ], [ -13612345.509937, 4555059.266811 ], [ -13612288.182166, 4555049.712182 ], [ -13611987.211367, 4554963.720526 ], [ -13611609.803540, 4554839.510355 ], [ -13611084.298970, 4554696.190927 ], [ -13610883.651771, 4554624.531212 ], [ -13610740.332343, 4554591.090013 ], [ -13610582.680972, 4554538.539556 ], [ -13610181.386574, 4554438.215956 ], [ -13609937.743546, 4554342.669671 ], [ -13609818.310689, 4554285.341899 ], [ -13609622.440804, 4554165.909043 ], [ -13609469.566748, 4554065.585443 ], [ -13609402.684348, 4554013.034986 ], [ -13609283.251491, 4553917.488701 ], [ -13609216.369091, 4553850.606301 ], [ -13609120.822806, 4553735.950759 ], [ -13609082.604292, 4553678.622987 ], [ -13608996.612635, 4553487.530417 ], [ -13608953.616807, 4553320.324417 ], [ -13608877.179778, 4552952.471219 ], [ -13608853.293207, 4552880.811505 ], [ -13608805.520064, 4552799.597162 ], [ -13608752.969607, 4552732.714762 ], [ -13608652.646008, 4552661.055048 ], [ -13607902.607668, 4552379.193507 ], [ -13607654.187326, 4552250.206021 ], [ -13607252.892927, 4552016.117622 ], [ -13607066.577671, 4551882.352823 ], [ -13606942.367500, 4551777.251909 ], [ -13606627.064758, 4551457.171853 ], [ -13606550.627730, 4551395.066767 ], [ -13606450.304130, 4551337.738996 ], [ -13606283.098131, 4551280.411225 ], [ -13605561.723677, 4551089.318654 ], [ -13605079.214935, 4550945.999226 ], [ -13604998.000593, 4550907.780712 ], [ -13604768.689508, 4550845.675627 ], [ -13604596.706194, 4550788.347855 ], [ -13604482.050652, 4550740.574713 ], [ -13604362.617795, 4550678.469627 ], [ -13604286.180767, 4550625.919170 ], [ -13603970.878025, 4550439.603914 ], [ -13603880.109054, 4550377.498828 ], [ -13603789.340083, 4550301.061800 ], [ -13603708.125741, 4550210.292829 ], [ -13603354.604485, 4549737.338717 ], [ -13603268.612828, 4549651.347060 ], [ -13603192.175800, 4549589.241974 ], [ -13603077.520257, 4549512.804946 ], [ -13602575.902259, 4549202.279519 ], [ -13602408.696260, 4549121.065176 ], [ -13602284.486089, 4549073.292033 ], [ -13602150.721289, 4549030.296205 ], [ -13602016.956490, 4549001.632319 ], [ -13601835.418548, 4548977.745748 ], [ -13601768.536148, 4548977.745748 ], [ -13601644.325977, 4548963.413805 ], [ -13600965.947351, 4548939.527234 ], [ -13600822.627923, 4548901.308720 ], [ -13600311.455296, 4548528.678207 ], [ -13599871.942384, 4548232.484722 ], [ -13599676.072499, 4548113.051865 ], [ -13599422.874842, 4547974.509752 ], [ -13599293.887357, 4547898.072723 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104474748623", "FULLNAME": "Macarthur Fwy", "RTTYP": "M", "MTFCC": "S1100" }, "geometry": { "type": "LineString", "coordinates": [ [ -13599293.887357, 4547926.736609 ], [ -13599676.072499, 4548141.715751 ], [ -13599881.497012, 4548265.925922 ], [ -13599929.270155, 4548304.144436 ], [ -13600340.119182, 4548576.451349 ], [ -13600469.106667, 4548676.774949 ], [ -13600617.203409, 4548805.762434 ], [ -13600688.863123, 4548858.312891 ], [ -13600798.741351, 4548920.417977 ], [ -13600989.833922, 4548968.191119 ], [ -13601668.212548, 4548992.077691 ], [ -13601978.737976, 4549020.741576 ], [ -13602227.158318, 4549082.846662 ], [ -13602375.255060, 4549135.397119 ], [ -13602571.124945, 4549230.943404 ], [ -13603125.293400, 4549579.687346 ], [ -13603220.839685, 4549651.347060 ], [ -13603349.827171, 4549780.334545 ], [ -13603445.373456, 4549899.767402 ], [ -13603660.352598, 4550195.960886 ], [ -13603717.680369, 4550267.620600 ], [ -13603813.226654, 4550363.166886 ], [ -13603951.768768, 4550463.490485 ], [ -13604233.630310, 4550635.473799 ], [ -13604467.718709, 4550764.461284 ], [ -13604692.252480, 4550850.452941 ], [ -13604945.450136, 4550922.112655 ], [ -13605432.736191, 4551084.541340 ], [ -13605934.354189, 4551208.751511 ], [ -13606211.438417, 4551289.965854 ], [ -13606283.098131, 4551304.297796 ], [ -13606412.085616, 4551347.293625 ], [ -13606493.299959, 4551390.289453 ], [ -13606603.178187, 4551471.503796 ], [ -13606985.363328, 4551853.688937 ], [ -13607186.010528, 4552006.562994 ], [ -13607329.329956, 4552092.554651 ], [ -13607840.502582, 4552383.970821 ], [ -13607916.939611, 4552417.412021 ], [ -13608576.208980, 4552656.277734 ], [ -13608676.532579, 4552704.050877 ], [ -13608762.524236, 4552785.265219 ], [ -13608829.406636, 4552895.143448 ], [ -13608848.515893, 4552952.471219 ], [ -13608972.726064, 4553497.085045 ], [ -13609030.053835, 4553635.627159 ], [ -13609101.713549, 4553755.060016 ], [ -13609173.373263, 4553845.828987 ], [ -13609307.138062, 4553979.593786 ], [ -13609603.331547, 4554199.350243 ], [ -13609799.201432, 4554314.005785 ], [ -13610014.180574, 4554414.329385 ], [ -13610143.168059, 4554457.325213 ], [ -13610816.769371, 4554638.863155 ], [ -13610931.424914, 4554677.081669 ], [ -13611003.084628, 4554691.413612 ], [ -13611528.589197, 4554868.174240 ], [ -13612273.850223, 4555083.153382 ], [ -13612374.173822, 4555102.262639 ], [ -13612555.711765, 4555092.708011 ], [ -13612914.010335, 4554992.384411 ], [ -13613052.552448, 4554978.052468 ], [ -13613234.090391, 4555021.048297 ], [ -13613425.182961, 4555107.039954 ], [ -13613520.729247, 4555164.367725 ], [ -13613578.057018, 4555221.695496 ], [ -13613621.052846, 4555293.355210 ], [ -13613644.939418, 4555417.565381 ], [ -13613635.384789, 4555570.439438 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1104485773387", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13602580.679573, 4549288.271175 ], [ -13602542.461059, 4549230.943404 ], [ -13602475.578660, 4549154.506376 ], [ -13602442.137460, 4549121.065176 ], [ -13602351.368489, 4549058.960090 ], [ -13601997.847233, 4548934.749920 ], [ -13601973.960661, 4548925.195291 ], [ -13601950.074090, 4548901.308720 ], [ -13601821.086605, 4548490.459693 ], [ -13601801.977348, 4548390.136093 ], [ -13601811.531976, 4548222.930094 ], [ -13601907.078262, 4548127.383808 ], [ -13601916.632890, 4548103.497237 ], [ -13601916.632890, 4548074.833351 ], [ -13601911.855576, 4548060.501409 ], [ -13601816.309291, 4547941.068552 ], [ -13601682.544491, 4547802.526438 ], [ -13601620.439406, 4547754.753295 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102155930810", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13601610.884777, 4547759.530610 ], [ -13601591.775520, 4547788.194495 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1103690483032", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13601467.565349, 4547912.404666 ], [ -13601085.380208, 4547640.097753 ], [ -13600985.056608, 4547544.551468 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102654601627", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13601171.371864, 4547687.870896 ], [ -13601147.485293, 4547673.538953 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102406970092", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13601147.485293, 4547673.538953 ], [ -13601056.716322, 4547606.656553 ], [ -13600989.833922, 4547534.996839 ], [ -13600951.615408, 4547506.332953 ], [ -13600870.401066, 4547420.341297 ], [ -13600789.186723, 4547348.681583 ], [ -13600660.199238, 4547181.475583 ], [ -13600263.682154, 4546937.832556 ], [ -13600254.127525, 4546942.609870 ], [ -13600125.140040, 4546870.950156 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1103690483026", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13600617.203409, 4547162.366326 ], [ -13600502.547867, 4547095.483926 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102406970093", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13600144.249297, 4546866.172842 ], [ -13600129.917354, 4546861.395527 ], [ -13599905.383583, 4546665.525642 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102654601663", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13599876.719698, 4546646.416385 ], [ -13599905.383583, 4546665.525642 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1102954918511", "FULLNAME": "Macarthur", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13600125.140040, 4546870.950156 ], [ -13599709.513698, 4546507.874271 ], [ -13599676.072499, 4546469.655757 ], [ -13599513.643813, 4546240.344672 ], [ -13599293.887357, 4545910.709988 ] ] } } +, +{ "type": "Feature", "properties": { "LINEARID": "1105089465114", "FULLNAME": "Macarthur Blvd", "RTTYP": "M", "MTFCC": "S1400" }, "geometry": { "type": "LineString", "coordinates": [ [ -13599876.719698, 4546646.416385 ], [ -13599719.068327, 4546503.096957 ], [ -13599676.072499, 4546450.546500 ], [ -13599537.530385, 4546254.676615 ], [ -13599293.887357, 4545891.600731 ] ] } } +] } +] }