diff --git a/Makefile b/Makefile index 5645f152..4d1b1214 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 727c3119..476467fa 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 2be58bb2..38ff7362 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 a1270338..1e565b24 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 0f82421e..0b05472b 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 74bdafd5..351399e7 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 8543aaff..233ea9bc 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 00000000..df752279 --- /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 ] ] } } +] } +] }