mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Reduce memory consumption from attribute accumulation (#290)
* Progress on plumbing a string pool for full_keys through
* More plumbing for key_pool
* Don't keep features with identical locations as multiplier features
* Revert "Don't keep features with identical locations as multiplier features"
This reverts commit 413f0c8024.
* Adjust calculated maxzoom to account for duplicate feature locations
* Update changelog and version
* Add a test affected by the maxzoom change with duplicate locations
* Round the drop rate a little for cross-platform test consistency
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
# 2.67.0
|
||||||
|
|
||||||
|
* Reduce memory consumption of duplicate attribute names in `serial_feature`
|
||||||
|
* The maxzoom guess calculation now takes into account the number of duplicate feature locations
|
||||||
|
|
||||||
# 2.66.0
|
# 2.66.0
|
||||||
|
|
||||||
* Only bin by ID, not by geometry, if --bin-by-id-list is specified
|
* Only bin by ID, not by geometry, if --bin-by-id-list is specified
|
||||||
|
|||||||
+7
-7
@@ -89,9 +89,9 @@ void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribut
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
static void preserve_attribute1(attribute_op const &op, std::string const &key, T const &val, std::vector<std::string> &full_keys, std::vector<T> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state) {
|
static void preserve_attribute1(attribute_op const &op, std::string const &key, T const &val, std::vector<std::shared_ptr<std::string>> &full_keys, std::vector<T> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state, key_pool &key_pool) {
|
||||||
for (size_t i = 0; i < full_keys.size(); i++) {
|
for (size_t i = 0; i < full_keys.size(); i++) {
|
||||||
if (key == full_keys[i]) {
|
if (key == *full_keys[i]) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case op_sum:
|
case op_sum:
|
||||||
full_values[i] = (full_values[i].to_double() + val.to_double());
|
full_values[i] = (full_values[i].to_double() + val.to_double());
|
||||||
@@ -193,14 +193,14 @@ static void preserve_attribute1(attribute_op const &op, std::string const &key,
|
|||||||
exit(EXIT_IMPOSSIBLE);
|
exit(EXIT_IMPOSSIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
full_keys.push_back(key);
|
full_keys.push_back(key_pool.pool(key));
|
||||||
full_values.push_back(v);
|
full_values.push_back(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void preserve_attribute(attribute_op const &op, std::string const &key, mvt_value const &val, std::vector<std::string> &full_keys, std::vector<mvt_value> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state) {
|
void preserve_attribute(attribute_op const &op, std::string const &key, mvt_value const &val, std::vector<std::shared_ptr<std::string>> &full_keys, std::vector<mvt_value> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state, key_pool &key_pool) {
|
||||||
preserve_attribute1(op, key, val, full_keys, full_values, attribute_accum_state);
|
preserve_attribute1(op, key, val, full_keys, full_values, attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
void preserve_attribute(attribute_op const &op, std::string const &key, serial_val const &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state) {
|
void preserve_attribute(attribute_op const &op, std::string const &key, serial_val const &val, std::vector<std::shared_ptr<std::string>> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state, key_pool &key_pool) {
|
||||||
preserve_attribute1(op, key, val, full_keys, full_values, attribute_accum_state);
|
preserve_attribute1(op, key, val, full_keys, full_values, attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -4,6 +4,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
#include "mvt.hpp"
|
#include "mvt.hpp"
|
||||||
#include "milo/dtoa_milo.h"
|
#include "milo/dtoa_milo.h"
|
||||||
|
|
||||||
@@ -24,12 +25,13 @@ struct accum_state {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct serial_val;
|
struct serial_val;
|
||||||
|
struct key_pool;
|
||||||
|
|
||||||
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, std::string name, std::string type);
|
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, std::string name, std::string type);
|
||||||
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, const char *arg, char **argv);
|
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, const char *arg, char **argv);
|
||||||
|
|
||||||
void preserve_attribute(attribute_op const &op, std::string const &key, serial_val const &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state);
|
void preserve_attribute(attribute_op const &op, std::string const &key, serial_val const &val, std::vector<std::shared_ptr<std::string>> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state, key_pool &key_pool);
|
||||||
void preserve_attribute(attribute_op const &op, std::string const &key, mvt_value const &val, std::vector<std::string> &full_keys, std::vector<mvt_value> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state);
|
void preserve_attribute(attribute_op const &op, std::string const &key, mvt_value const &val, std::vector<std::shared_ptr<std::string>> &full_keys, std::vector<mvt_value> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state, key_pool &key_pool);
|
||||||
|
|
||||||
extern std::map<std::string, attribute_op> numeric_operations;
|
extern std::map<std::string, attribute_op> numeric_operations;
|
||||||
|
|
||||||
|
|||||||
@@ -1164,13 +1164,13 @@ static void add_mean(mvt_feature &feature, mvt_layer &layer, std::string const &
|
|||||||
|
|
||||||
// accumulate :sum:, :min:, :max:, and :count: versions of the specified attribute
|
// accumulate :sum:, :min:, :max:, and :count: versions of the specified attribute
|
||||||
static void preserve_numeric(const std::string &key, const mvt_value &val, // numeric attribute being accumulated
|
static void preserve_numeric(const std::string &key, const mvt_value &val, // numeric attribute being accumulated
|
||||||
std::vector<std::string> &full_keys, // keys of feature being accumulated onto
|
std::vector<std::shared_ptr<std::string>> &full_keys, // keys of feature being accumulated onto
|
||||||
std::vector<mvt_value> &full_values, // values of features being accumulated onto
|
std::vector<mvt_value> &full_values, // values of features being accumulated onto
|
||||||
const std::string &accumulate_numeric, // prefix of accumulations
|
const std::string &accumulate_numeric, // prefix of accumulations
|
||||||
std::set<std::string> &keys, // key presence in the source feature
|
std::set<std::string> &keys, // key presence in the source feature
|
||||||
std::map<std::string, size_t> &numeric_out_field, // key index in the output feature
|
std::map<std::string, size_t> &numeric_out_field, // key index in the output feature
|
||||||
std::unordered_map<std::string, accum_state> &attribute_accum_state // accumulation state for preserve_attribute()
|
std::unordered_map<std::string, accum_state> &attribute_accum_state, // accumulation state for preserve_attribute()
|
||||||
) {
|
key_pool &key_pool) {
|
||||||
// If this is a numeric attribute, but there is also a prefix:sum (etc.) for the
|
// If this is a numeric attribute, but there is also a prefix:sum (etc.) for the
|
||||||
// same attribute, we want to use that one instead of this one.
|
// same attribute, we want to use that one instead of this one.
|
||||||
|
|
||||||
@@ -1213,7 +1213,7 @@ static void preserve_numeric(const std::string &key, const mvt_value &val, /
|
|||||||
if (out_attr == numeric_out_field.end()) {
|
if (out_attr == numeric_out_field.end()) {
|
||||||
// not present at all, so copy our value to the prefixed output
|
// not present at all, so copy our value to the prefixed output
|
||||||
numeric_out_field.emplace(prefixed, full_keys.size());
|
numeric_out_field.emplace(prefixed, full_keys.size());
|
||||||
full_keys.push_back(prefixed);
|
full_keys.push_back(key_pool.pool(prefixed));
|
||||||
|
|
||||||
if (op.second == op_count) {
|
if (op.second == op_count) {
|
||||||
if (starting_from_accumulation) {
|
if (starting_from_accumulation) {
|
||||||
@@ -1229,7 +1229,7 @@ static void preserve_numeric(const std::string &key, const mvt_value &val, /
|
|||||||
} else {
|
} else {
|
||||||
// exists unprefixed, so copy it, and then accumulate on our value
|
// exists unprefixed, so copy it, and then accumulate on our value
|
||||||
numeric_out_field.emplace(prefixed, full_keys.size());
|
numeric_out_field.emplace(prefixed, full_keys.size());
|
||||||
full_keys.push_back(prefixed);
|
full_keys.push_back(key_pool.pool(prefixed));
|
||||||
|
|
||||||
if (op.second == op_count) {
|
if (op.second == op_count) {
|
||||||
mvt_value v;
|
mvt_value v;
|
||||||
@@ -1243,7 +1243,7 @@ static void preserve_numeric(const std::string &key, const mvt_value &val, /
|
|||||||
full_values.push_back(v);
|
full_values.push_back(v);
|
||||||
} else {
|
} else {
|
||||||
full_values.push_back(full_values[out_attr->second]);
|
full_values.push_back(full_values[out_attr->second]);
|
||||||
preserve_attribute(op.second, prefixed, val, full_keys, full_values, attribute_accum_state);
|
preserve_attribute(op.second, prefixed, val, full_keys, full_values, attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1256,7 +1256,7 @@ static void preserve_numeric(const std::string &key, const mvt_value &val, /
|
|||||||
full_values[prefixed_attr->second] = mvt_value(mvt_value_to_long_long(full_values[prefixed_attr->second]) + 1);
|
full_values[prefixed_attr->second] = mvt_value(mvt_value_to_long_long(full_values[prefixed_attr->second]) + 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
preserve_attribute(op.second, prefixed, val, full_keys, full_values, attribute_accum_state);
|
preserve_attribute(op.second, prefixed, val, full_keys, full_values, attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1289,7 +1289,8 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
|
|||||||
std::set<std::string> const &exclude,
|
std::set<std::string> const &exclude,
|
||||||
std::vector<std::string> const &exclude_prefix,
|
std::vector<std::string> const &exclude_prefix,
|
||||||
std::unordered_map<std::string, attribute_op> const &attribute_accum,
|
std::unordered_map<std::string, attribute_op> const &attribute_accum,
|
||||||
std::string const &accumulate_numeric) {
|
std::string const &accumulate_numeric,
|
||||||
|
key_pool &key_pool) {
|
||||||
// Add geometry to output feature
|
// Add geometry to output feature
|
||||||
|
|
||||||
mvt_feature outfeature;
|
mvt_feature outfeature;
|
||||||
@@ -1315,7 +1316,7 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
|
|||||||
// multiplier cluster accumulated onto them
|
// multiplier cluster accumulated onto them
|
||||||
|
|
||||||
std::unordered_map<std::string, accum_state> attribute_accum_state;
|
std::unordered_map<std::string, accum_state> attribute_accum_state;
|
||||||
std::vector<std::string> full_keys;
|
std::vector<std::shared_ptr<std::string>> full_keys;
|
||||||
std::vector<mvt_value> full_values;
|
std::vector<mvt_value> full_values;
|
||||||
std::map<std::string, size_t> numeric_out_field;
|
std::map<std::string, size_t> numeric_out_field;
|
||||||
|
|
||||||
@@ -1324,12 +1325,12 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
|
|||||||
auto f = attribute_accum.find(key);
|
auto f = attribute_accum.find(key);
|
||||||
if (f != attribute_accum.end()) {
|
if (f != attribute_accum.end()) {
|
||||||
// this attribute has an accumulator, so convert it
|
// this attribute has an accumulator, so convert it
|
||||||
full_keys.push_back(features[0].layer->keys[features[0].tags[i]]);
|
full_keys.push_back(key_pool.pool(features[0].layer->keys[features[0].tags[i]]));
|
||||||
full_values.push_back(features[0].layer->values[features[0].tags[i + 1]]);
|
full_values.push_back(features[0].layer->values[features[0].tags[i + 1]]);
|
||||||
} else if (accumulate_numeric.size() > 0 && features[0].layer->values[features[0].tags[i + 1]].is_numeric()) {
|
} else if (accumulate_numeric.size() > 0 && features[0].layer->values[features[0].tags[i + 1]].is_numeric()) {
|
||||||
// convert numeric for accumulation
|
// convert numeric for accumulation
|
||||||
numeric_out_field.emplace(key, full_keys.size());
|
numeric_out_field.emplace(key, full_keys.size());
|
||||||
full_keys.push_back(key);
|
full_keys.push_back(key_pool.pool(key));
|
||||||
full_values.push_back(features[0].layer->values[features[0].tags[i + 1]]);
|
full_values.push_back(features[0].layer->values[features[0].tags[i + 1]]);
|
||||||
} else {
|
} else {
|
||||||
// otherwise just tag it directly onto the output feature
|
// otherwise just tag it directly onto the output feature
|
||||||
@@ -1357,13 +1358,13 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
|
|||||||
auto f = attribute_accum.find(key);
|
auto f = attribute_accum.find(key);
|
||||||
if (f != attribute_accum.end()) {
|
if (f != attribute_accum.end()) {
|
||||||
mvt_value val = features[i].layer->values[features[i].tags[j + 1]];
|
mvt_value val = features[i].layer->values[features[i].tags[j + 1]];
|
||||||
preserve_attribute(f->second, key, val, full_keys, full_values, attribute_accum_state);
|
preserve_attribute(f->second, key, val, full_keys, full_values, attribute_accum_state, key_pool);
|
||||||
} else if (accumulate_numeric.size() > 0) {
|
} else if (accumulate_numeric.size() > 0) {
|
||||||
const mvt_value &val = features[i].layer->values[features[i].tags[j + 1]];
|
const mvt_value &val = features[i].layer->values[features[i].tags[j + 1]];
|
||||||
if (val.is_numeric()) {
|
if (val.is_numeric()) {
|
||||||
preserve_numeric(key, val, full_keys, full_values,
|
preserve_numeric(key, val, full_keys, full_values,
|
||||||
accumulate_numeric,
|
accumulate_numeric,
|
||||||
keys, numeric_out_field, attribute_accum_state);
|
keys, numeric_out_field, attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1373,8 +1374,8 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
|
|||||||
// and tag them onto the output feature
|
// and tag them onto the output feature
|
||||||
|
|
||||||
for (size_t i = 0; i < full_keys.size(); i++) {
|
for (size_t i = 0; i < full_keys.size(); i++) {
|
||||||
if (should_keep(full_keys[i], keep, exclude, exclude_prefix)) {
|
if (should_keep(*full_keys[i], keep, exclude, exclude_prefix)) {
|
||||||
outlayer.tag(outfeature, full_keys[i], full_values[i]);
|
outlayer.tag(outfeature, *full_keys[i], full_values[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1522,6 +1523,7 @@ mvt_tile assign_to_bins(mvt_tile &features,
|
|||||||
std::set<std::string> exclude,
|
std::set<std::string> exclude,
|
||||||
std::vector<std::string> exclude_prefix) {
|
std::vector<std::string> exclude_prefix) {
|
||||||
std::vector<index_event> events;
|
std::vector<index_event> events;
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
// Index bins
|
// Index bins
|
||||||
for (size_t i = 0; i < bins.size(); i++) {
|
for (size_t i = 0; i < bins.size(); i++) {
|
||||||
@@ -1678,7 +1680,7 @@ mvt_tile assign_to_bins(mvt_tile &features,
|
|||||||
if (outfeatures[i].size() > 1) {
|
if (outfeatures[i].size() > 1) {
|
||||||
feature_out(outfeatures[i], outlayer,
|
feature_out(outfeatures[i], outlayer,
|
||||||
keep, exclude, exclude_prefix, attribute_accum,
|
keep, exclude, exclude_prefix, attribute_accum,
|
||||||
accumulate_numeric);
|
accumulate_numeric, key_pool);
|
||||||
mvt_feature &nfeature = outlayer.features.back();
|
mvt_feature &nfeature = outlayer.features.back();
|
||||||
mvt_value val;
|
mvt_value val;
|
||||||
val.type = mvt_uint;
|
val.type = mvt_uint;
|
||||||
@@ -1713,6 +1715,7 @@ std::string overzoom(std::vector<source_tile> const &tiles, int nz, int nx, int
|
|||||||
std::vector<mvt_layer> const &bins, std::string const &bin_by_id_list,
|
std::vector<mvt_layer> const &bins, std::string const &bin_by_id_list,
|
||||||
std::string const &accumulate_numeric) {
|
std::string const &accumulate_numeric) {
|
||||||
mvt_tile outtile;
|
mvt_tile outtile;
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
for (auto const &tile : tiles) {
|
for (auto const &tile : tiles) {
|
||||||
for (auto const &layer : tile.tile.layers) {
|
for (auto const &layer : tile.tile.layers) {
|
||||||
@@ -1837,7 +1840,7 @@ std::string overzoom(std::vector<source_tile> const &tiles, int nz, int nx, int
|
|||||||
|
|
||||||
if (flush_multiplier_cluster) {
|
if (flush_multiplier_cluster) {
|
||||||
if (pending_tile_features.size() > 0) {
|
if (pending_tile_features.size() > 0) {
|
||||||
feature_out(pending_tile_features, *outlayer, keep, exclude, exclude_prefix, attribute_accum, accumulate_numeric);
|
feature_out(pending_tile_features, *outlayer, keep, exclude, exclude_prefix, attribute_accum, accumulate_numeric, key_pool);
|
||||||
pending_tile_features.clear();
|
pending_tile_features.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1894,7 +1897,7 @@ std::string overzoom(std::vector<source_tile> const &tiles, int nz, int nx, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pending_tile_features.size() > 0) {
|
if (pending_tile_features.size() > 0) {
|
||||||
feature_out(pending_tile_features, *outlayer, keep, exclude, exclude_prefix, attribute_accum, accumulate_numeric);
|
feature_out(pending_tile_features, *outlayer, keep, exclude, exclude_prefix, attribute_accum, accumulate_numeric, key_pool);
|
||||||
pending_tile_features.clear();
|
pending_tile_features.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -146,8 +146,9 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
|
|||||||
sf.geometry = dv;
|
sf.geometry = dv;
|
||||||
sf.t = drawvec_type;
|
sf.t = drawvec_type;
|
||||||
|
|
||||||
std::vector<std::string> full_keys;
|
std::vector<std::shared_ptr<std::string>> full_keys;
|
||||||
std::vector<serial_val> full_values;
|
std::vector<serial_val> full_values;
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
// assume tabular schema with columns in header
|
// assume tabular schema with columns in header
|
||||||
size_t p_pos = 0;
|
size_t p_pos = 0;
|
||||||
@@ -243,7 +244,7 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
|
|||||||
fprintf(stderr, "flatgeobuf has unsupported column type %u\n", (unsigned int)col_type);
|
fprintf(stderr, "flatgeobuf has unsupported column type %u\n", (unsigned int)col_type);
|
||||||
exit(EXIT_IMPOSSIBLE);
|
exit(EXIT_IMPOSSIBLE);
|
||||||
}
|
}
|
||||||
full_keys.push_back(h_column_names[col_idx]);
|
full_keys.push_back(key_pool.pool(h_column_names[col_idx]));
|
||||||
full_values.push_back(sv);
|
full_values.push_back(sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -270,14 +270,14 @@ std::vector<drawvec_type> readGeometry(protozero::pbf_reader &pbf, size_t dim, d
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<std::string> &keys, struct serialization_state *sst, int layer, std::string layername) {
|
void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<std::string> &keys, struct serialization_state *sst, int layer, std::string layername, key_pool &key_pool) {
|
||||||
std::vector<drawvec_type> dv;
|
std::vector<drawvec_type> dv;
|
||||||
long long id = 0;
|
long long id = 0;
|
||||||
bool has_id = false;
|
bool has_id = false;
|
||||||
std::vector<serial_val> values;
|
std::vector<serial_val> values;
|
||||||
std::map<std::string, serial_val> other;
|
std::map<std::string, serial_val> other;
|
||||||
|
|
||||||
std::vector<std::string> full_keys;
|
std::vector<std::shared_ptr<std::string>> full_keys;
|
||||||
std::vector<serial_val> full_values;
|
std::vector<serial_val> full_values;
|
||||||
|
|
||||||
while (pbf.next()) {
|
while (pbf.next()) {
|
||||||
@@ -338,7 +338,7 @@ void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<s
|
|||||||
exit(EXIT_IMPOSSIBLE);
|
exit(EXIT_IMPOSSIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
full_keys.push_back(keys[properties[i]]);
|
full_keys.push_back(key_pool.pool(keys[properties[i]]));
|
||||||
full_values.push_back(values[properties[i + 1]]);
|
full_values.push_back(values[properties[i + 1]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -434,10 +434,11 @@ struct queue_run_arg {
|
|||||||
|
|
||||||
void *run_parse_feature(void *v) {
|
void *run_parse_feature(void *v) {
|
||||||
struct queue_run_arg *qra = (struct queue_run_arg *) v;
|
struct queue_run_arg *qra = (struct queue_run_arg *) v;
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
for (size_t i = qra->start; i < qra->end; i++) {
|
for (size_t i = qra->start; i < qra->end; i++) {
|
||||||
struct queued_feature &qf = feature_queue[i];
|
struct queued_feature &qf = feature_queue[i];
|
||||||
readFeature(qf.pbf, qf.dim, qf.e, *qf.keys, &(*qf.sst)[qra->segment], qf.layer, qf.layername);
|
readFeature(qf.pbf, qf.dim, qf.e, *qf.keys, &(*qf.sst)[qra->segment], qf.layer, qf.layername, key_pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
+3
-2
@@ -58,6 +58,7 @@ void parse_geocsv(std::vector<struct serialization_state> &sst, std::string fnam
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t seq = 0;
|
size_t seq = 0;
|
||||||
|
key_pool key_pool;
|
||||||
while ((s = csv_getline(f)).size() > 0) {
|
while ((s = csv_getline(f)).size() > 0) {
|
||||||
std::string err = check_utf8(s);
|
std::string err = check_utf8(s);
|
||||||
if (err != "") {
|
if (err != "") {
|
||||||
@@ -89,7 +90,7 @@ void parse_geocsv(std::vector<struct serialization_state> &sst, std::string fnam
|
|||||||
drawvec dv;
|
drawvec dv;
|
||||||
dv.push_back(draw(VT_MOVETO, x, y));
|
dv.push_back(draw(VT_MOVETO, x, y));
|
||||||
|
|
||||||
std::vector<std::string> full_keys;
|
std::vector<std::shared_ptr<std::string>> full_keys;
|
||||||
std::vector<serial_val> full_values;
|
std::vector<serial_val> full_values;
|
||||||
|
|
||||||
for (size_t i = 0; i < line.size(); i++) {
|
for (size_t i = 0; i < line.size(); i++) {
|
||||||
@@ -107,7 +108,7 @@ void parse_geocsv(std::vector<struct serialization_state> &sst, std::string fnam
|
|||||||
}
|
}
|
||||||
sv.s = line[i];
|
sv.s = line[i];
|
||||||
|
|
||||||
full_keys.push_back(header[i]);
|
full_keys.push_back(key_pool.pool(header[i]));
|
||||||
full_values.push_back(sv);
|
full_values.push_back(sv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -182,17 +182,18 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom
|
|||||||
nprop = properties->value.object.length;
|
nprop = properties->value.object.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> keys;
|
std::vector<std::shared_ptr<std::string>> full_keys;
|
||||||
std::vector<serial_val> values;
|
std::vector<serial_val> values;
|
||||||
|
|
||||||
keys.reserve(nprop);
|
full_keys.reserve(nprop);
|
||||||
values.reserve(nprop);
|
values.reserve(nprop);
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
for (size_t i = 0; i < nprop; i++) {
|
for (size_t i = 0; i < nprop; i++) {
|
||||||
if (properties->value.object.keys[i]->type == JSON_STRING) {
|
if (properties->value.object.keys[i]->type == JSON_STRING) {
|
||||||
serial_val sv = stringify_value(properties->value.object.values[i], sst->fname, sst->line, feature);
|
serial_val sv = stringify_value(properties->value.object.values[i], sst->fname, sst->line, feature);
|
||||||
|
|
||||||
keys.emplace_back(properties->value.object.keys[i]->value.string.string);
|
full_keys.emplace_back(key_pool.pool(properties->value.object.keys[i]->value.string.string));
|
||||||
values.push_back(std::move(sv));
|
values.push_back(std::move(sv));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,7 +212,7 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom
|
|||||||
sf.geometry = dv;
|
sf.geometry = dv;
|
||||||
sf.feature_minzoom = 0; // Will be filled in during index merging
|
sf.feature_minzoom = 0; // Will be filled in during index merging
|
||||||
sf.seq = *(sst->layer_seq);
|
sf.seq = *(sst->layer_seq);
|
||||||
sf.full_keys = std::move(keys);
|
sf.full_keys = std::move(full_keys);
|
||||||
sf.full_values = std::move(values);
|
sf.full_values = std::move(values);
|
||||||
|
|
||||||
return serialize_feature(sst, sf, tippecanoe_layername);
|
return serialize_feature(sst, sf, tippecanoe_layername);
|
||||||
|
|||||||
@@ -1241,6 +1241,10 @@ int vertexcmp(const void *void1, const void *void2) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double round_droprate(double r) {
|
||||||
|
return std::round(r * 100000.0) / 100000.0;
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<int, metadata> 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, json_object *filter, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, long long *file_bbox1, long long *file_bbox2, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, bool guess_cluster_maxzoom, std::unordered_map<std::string, int> const *attribute_types, const char *pgm, std::unordered_map<std::string, attribute_op> const *attribute_accum, std::map<std::string, std::string> const &attribute_descriptions, std::string const &commandline, int minimum_maxzoom) {
|
std::pair<int, metadata> 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, json_object *filter, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, long long *file_bbox1, long long *file_bbox2, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, bool guess_cluster_maxzoom, std::unordered_map<std::string, int> const *attribute_types, const char *pgm, std::unordered_map<std::string, attribute_op> const *attribute_accum, std::map<std::string, std::string> const &attribute_descriptions, std::string const &commandline, int minimum_maxzoom) {
|
||||||
int ret = EXIT_SUCCESS;
|
int ret = EXIT_SUCCESS;
|
||||||
|
|
||||||
@@ -2295,6 +2299,7 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
double mean = 0;
|
double mean = 0;
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
double m2 = 0;
|
double m2 = 0;
|
||||||
|
size_t dupes = 0;
|
||||||
|
|
||||||
long long progress = -1;
|
long long progress = -1;
|
||||||
long long ip;
|
long long ip;
|
||||||
@@ -2330,6 +2335,8 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
mean += delta / count;
|
mean += delta / count;
|
||||||
double delta2 = newValue - mean;
|
double delta2 = newValue - mean;
|
||||||
m2 += delta * delta2;
|
m2 += delta * delta2;
|
||||||
|
} else {
|
||||||
|
dupes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
long long nprogress = 100 * ip / indices;
|
long long nprogress = 100 * ip / indices;
|
||||||
@@ -2373,16 +2380,6 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
double want = nearby_ft / 2;
|
double want = nearby_ft / 2;
|
||||||
|
|
||||||
maxzoom = ceil(log(360 / (.00000274 * want)) / log(2) - full_detail);
|
maxzoom = ceil(log(360 / (.00000274 * want)) / log(2) - full_detail);
|
||||||
if (maxzoom < 0) {
|
|
||||||
maxzoom = 0;
|
|
||||||
}
|
|
||||||
if (maxzoom > 32 - full_detail) {
|
|
||||||
maxzoom = 32 - full_detail;
|
|
||||||
}
|
|
||||||
if (maxzoom > 33 - low_detail) { // that is, maxzoom - 1 > 32 - low_detail
|
|
||||||
maxzoom = 33 - low_detail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Choosing a maxzoom of -z%d for features typically %d feet (%d meters) apart, ",
|
"Choosing a maxzoom of -z%d for features typically %d feet (%d meters) apart, ",
|
||||||
@@ -2413,7 +2410,7 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
// features is small, the drop rate should be large because the features are evenly
|
// features is small, the drop rate should be large because the features are evenly
|
||||||
// spaced, and if the standard deviation is large, the drop rate can be small because
|
// spaced, and if the standard deviation is large, the drop rate can be small because
|
||||||
// the features are in clumps.
|
// the features are in clumps.
|
||||||
droprate = exp(-0.7681 * log(stddev) + 1.582);
|
droprate = round_droprate(exp(-0.7681 * log(stddev) + 1.582));
|
||||||
|
|
||||||
if (droprate < 0) {
|
if (droprate < 0) {
|
||||||
droprate = 0;
|
droprate = 0;
|
||||||
@@ -2422,6 +2419,13 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Choosing a drop rate of %f\n", droprate);
|
fprintf(stderr, "Choosing a drop rate of %f\n", droprate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dupes != 0 && droprate != 0) {
|
||||||
|
maxzoom += std::round(log((dupes + count) / count) / log(droprate));
|
||||||
|
if (!quiet) {
|
||||||
|
fprintf(stderr, "Increasing maxzoom to %d to account for %zu duplicate feature locations\n", maxzoom, dupes);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2430,16 +2434,6 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
double want2 = exp(dist_sum / dist_count) / 8;
|
double want2 = exp(dist_sum / dist_count) / 8;
|
||||||
int mz = ceil(log(360 / (.00000274 * want2)) / log(2) - full_detail);
|
int mz = ceil(log(360 / (.00000274 * want2)) / log(2) - full_detail);
|
||||||
|
|
||||||
if (mz < 0) {
|
|
||||||
mz = 0;
|
|
||||||
}
|
|
||||||
if (mz > 32 - full_detail) {
|
|
||||||
mz = 32 - full_detail;
|
|
||||||
}
|
|
||||||
if (mz > 33 - low_detail) { // that is, mz - 1 > 32 - low_detail
|
|
||||||
mz = 33 - low_detail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mz > maxzoom || count <= 0) {
|
if (mz > maxzoom || count <= 0) {
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Choosing a maxzoom of -z%d for resolution of about %d feet (%d meters) within features\n", mz, (int) exp(dist_sum / dist_count), (int) (exp(dist_sum / dist_count) / 3.28084));
|
fprintf(stderr, "Choosing a maxzoom of -z%d for resolution of about %d feet (%d meters) within features\n", mz, (int) exp(dist_sum / dist_count), (int) (exp(dist_sum / dist_count) / 3.28084));
|
||||||
@@ -2448,6 +2442,16 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (maxzoom < 0) {
|
||||||
|
maxzoom = 0;
|
||||||
|
}
|
||||||
|
if (maxzoom > 32 - full_detail) {
|
||||||
|
maxzoom = 32 - full_detail;
|
||||||
|
}
|
||||||
|
if (maxzoom > 33 - low_detail) { // that is, maxzoom - 1 > 32 - low_detail
|
||||||
|
maxzoom = 33 - low_detail;
|
||||||
|
}
|
||||||
|
|
||||||
double total_tile_count = 0;
|
double total_tile_count = 0;
|
||||||
for (int i = 1; i <= maxzoom; i++) {
|
for (int i = 1; i <= maxzoom; i++) {
|
||||||
double tile_count = ceil(area_sum / ((1LL << (32 - i)) * (1LL << (32 - i))));
|
double tile_count = ceil(area_sum / ((1LL << (32 - i)) * (1LL << (32 - i))));
|
||||||
@@ -2608,7 +2612,7 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
if (maxzoom == 0) {
|
if (maxzoom == 0) {
|
||||||
droprate = 2.5;
|
droprate = 2.5;
|
||||||
} else {
|
} else {
|
||||||
droprate = exp(log((double) max[0].count / max[maxzoom].count) / (maxzoom));
|
droprate = round_droprate(exp(log((double) max[0].count / max[maxzoom].count) / (maxzoom)));
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Choosing a drop rate of -r%f to get from %lld to %lld in %d zooms\n", droprate, max[maxzoom].count, max[0].count, maxzoom);
|
fprintf(stderr, "Choosing a drop rate of -r%f to get from %lld to %lld in %d zooms\n", droprate, max[maxzoom].count, max[0].count, maxzoom);
|
||||||
}
|
}
|
||||||
@@ -2634,7 +2638,7 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
|
|
||||||
if (max[z].count / interval >= max_features) {
|
if (max[z].count / interval >= max_features) {
|
||||||
interval = (double) max[z].count / max_features;
|
interval = (double) max[z].count / max_features;
|
||||||
droprate = exp(log(interval) / (basezoom - z));
|
droprate = round_droprate(exp(log(interval) / (basezoom - z)));
|
||||||
interval = exp(log(droprate) * (basezoom - z));
|
interval = exp(log(droprate) * (basezoom - z));
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
|
|||||||
+2
-2
@@ -145,7 +145,7 @@ std::vector<mvt_layer> parse_layers(int fd, int z, unsigned x, unsigned y, std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reads from the prefilter
|
// Reads from the prefilter
|
||||||
serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, bool postfilter) {
|
serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, bool postfilter, key_pool &key_pool) {
|
||||||
serial_feature sf;
|
serial_feature sf;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -354,7 +354,7 @@ serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::
|
|||||||
// would have already run before prefiltering
|
// would have already run before prefiltering
|
||||||
|
|
||||||
if (v.type != mvt_null) {
|
if (v.type != mvt_null) {
|
||||||
sf.full_keys.push_back(std::string(properties->value.object.keys[i]->value.string.string));
|
sf.full_keys.push_back(key_pool.pool(std::string(properties->value.object.keys[i]->value.string.string)));
|
||||||
sf.full_values.push_back(v);
|
sf.full_values.push_back(v);
|
||||||
|
|
||||||
if (!postfilter) {
|
if (!postfilter) {
|
||||||
|
|||||||
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
struct key_pool;
|
||||||
std::vector<mvt_layer> filter_layers(const char *filter, std::vector<mvt_layer> &layer, unsigned z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, int extent);
|
std::vector<mvt_layer> filter_layers(const char *filter, std::vector<mvt_layer> &layer, unsigned z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, int extent);
|
||||||
void setup_filter(const char *filter, int *write_to, int *read_from, pid_t *pid, unsigned z, unsigned x, unsigned y);
|
void setup_filter(const char *filter, int *write_to, int *read_from, pid_t *pid, unsigned z, unsigned x, unsigned y);
|
||||||
serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, bool filters);
|
serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, bool filters, key_pool &key_pool);
|
||||||
|
|||||||
+11
-10
@@ -415,6 +415,7 @@ static void add_scaled_node(struct reader *r, serialization_state *sst, draw g)
|
|||||||
// called from frontends
|
// called from frontends
|
||||||
int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::string const &layername) {
|
int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::string const &layername) {
|
||||||
struct reader *r = &(*sst->readers)[sst->segment];
|
struct reader *r = &(*sst->readers)[sst->segment];
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
sf.bbox[0] = LLONG_MAX;
|
sf.bbox[0] = LLONG_MAX;
|
||||||
sf.bbox[1] = LLONG_MAX;
|
sf.bbox[1] = LLONG_MAX;
|
||||||
@@ -714,7 +715,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
|
|
||||||
bbox_index = encode_index(midx, midy);
|
bbox_index = encode_index(midx, midy);
|
||||||
if (additional[A_CALCULATE_INDEX]) {
|
if (additional[A_CALCULATE_INDEX]) {
|
||||||
sf.full_keys.push_back("tippecanoe:index");
|
sf.full_keys.push_back(key_pool.pool("tippecanoe:index"));
|
||||||
|
|
||||||
serial_val sv;
|
serial_val sv;
|
||||||
sv.type = mvt_double;
|
sv.type = mvt_double;
|
||||||
@@ -776,7 +777,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
for (auto &kv : set_attributes) {
|
for (auto &kv : set_attributes) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
if (sf.full_keys[i] == kv.first) {
|
if (*sf.full_keys[i] == kv.first) {
|
||||||
sf.full_values[i] = kv.second;
|
sf.full_values[i] = kv.second;
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
@@ -784,13 +785,13 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
sf.full_keys.push_back(kv.first);
|
sf.full_keys.push_back(key_pool.pool(kv.first));
|
||||||
sf.full_values.push_back(kv.second);
|
sf.full_values.push_back(kv.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) {
|
for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) {
|
||||||
coerce_value(sf.full_keys[i], sf.full_values[i].type, sf.full_values[i].s, sst->attribute_types);
|
coerce_value(*sf.full_keys[i], sf.full_values[i].type, sf.full_values[i].s, sst->attribute_types);
|
||||||
|
|
||||||
if (prevent[P_SINGLE_PRECISION]) {
|
if (prevent[P_SINGLE_PRECISION]) {
|
||||||
if (sf.full_values[i].type == mvt_double) {
|
if (sf.full_values[i].type == mvt_double) {
|
||||||
@@ -801,12 +802,12 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sf.full_keys[i] == attribute_for_id) {
|
if (*sf.full_keys[i] == attribute_for_id) {
|
||||||
if (sf.full_values[i].type != mvt_double && !additional[A_CONVERT_NUMERIC_IDS]) {
|
if (sf.full_values[i].type != mvt_double && !additional[A_CONVERT_NUMERIC_IDS]) {
|
||||||
static bool warned = false;
|
static bool warned = false;
|
||||||
|
|
||||||
if (!warned) {
|
if (!warned) {
|
||||||
fprintf(stderr, "Warning: Attribute \"%s\"=\"%s\" as feature ID is not a number\n", sf.full_keys[i].c_str(), sf.full_values[i].s.c_str());
|
fprintf(stderr, "Warning: Attribute \"%s\"=\"%s\" as feature ID is not a number\n", sf.full_keys[i]->c_str(), sf.full_values[i].s.c_str());
|
||||||
warned = true;
|
warned = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -839,12 +840,12 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sst->exclude_all) {
|
if (sst->exclude_all) {
|
||||||
if (sst->include->count(sf.full_keys[i]) == 0) {
|
if (sst->include->count(*sf.full_keys[i]) == 0) {
|
||||||
sf.full_keys.erase(sf.full_keys.begin() + i);
|
sf.full_keys.erase(sf.full_keys.begin() + i);
|
||||||
sf.full_values.erase(sf.full_values.begin() + i);
|
sf.full_values.erase(sf.full_values.begin() + i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else if (sst->exclude->count(sf.full_keys[i]) != 0) {
|
} else if (sst->exclude->count(*sf.full_keys[i]) != 0) {
|
||||||
sf.full_keys.erase(sf.full_keys.begin() + i);
|
sf.full_keys.erase(sf.full_keys.begin() + i);
|
||||||
sf.full_values.erase(sf.full_values.begin() + i);
|
sf.full_values.erase(sf.full_values.begin() + i);
|
||||||
continue;
|
continue;
|
||||||
@@ -854,7 +855,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
if (!sst->filters) {
|
if (!sst->filters) {
|
||||||
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
auto ts = sst->layermap->find(layername);
|
auto ts = sst->layermap->find(layername);
|
||||||
add_to_tilestats(ts->second.tilestats, sf.full_keys[i], sf.full_values[i]);
|
add_to_tilestats(ts->second.tilestats, *sf.full_keys[i], sf.full_values[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -867,7 +868,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
sf.keys.push_back(addpool(r->poolfile, r->treefile, sf.full_keys[i].c_str(), mvt_string, r->key_dedup));
|
sf.keys.push_back(addpool(r->poolfile, r->treefile, sf.full_keys[i]->c_str(), mvt_string, r->key_dedup));
|
||||||
sf.values.push_back(addpool(r->poolfile, r->treefile, sf.full_values[i].s.c_str(), sf.full_values[i].type, r->value_dedup));
|
sf.values.push_back(addpool(r->poolfile, r->treefile, sf.full_values[i].s.c_str(), sf.full_values[i].type, r->value_dedup));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-1
@@ -6,6 +6,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
#include <memory>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "geometry.hpp"
|
#include "geometry.hpp"
|
||||||
#include "mbtiles.hpp"
|
#include "mbtiles.hpp"
|
||||||
@@ -71,6 +72,22 @@ struct serial_val {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct key_pool {
|
||||||
|
std::unordered_map<std::string, std::shared_ptr<std::string>> mapping;
|
||||||
|
|
||||||
|
std::shared_ptr<std::string> pool(std::string const &s) {
|
||||||
|
auto f = mapping.find(s);
|
||||||
|
if (f != mapping.end()) {
|
||||||
|
return f->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<std::string> p = std::make_shared<std::string>();
|
||||||
|
*p = s;
|
||||||
|
mapping.emplace(s, p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct serial_feature {
|
struct serial_feature {
|
||||||
long long layer = 0;
|
long long layer = 0;
|
||||||
int segment = 0;
|
int segment = 0;
|
||||||
@@ -95,7 +112,7 @@ struct serial_feature {
|
|||||||
// to create the keys and values references into the string pool
|
// to create the keys and values references into the string pool
|
||||||
// during initial serialization
|
// during initial serialization
|
||||||
|
|
||||||
std::vector<std::string> full_keys{};
|
std::vector<std::shared_ptr<std::string>> full_keys{};
|
||||||
std::vector<serial_val> full_values{};
|
std::vector<serial_val> full_values{};
|
||||||
|
|
||||||
// These fields are generated from full_keys and full_values
|
// These fields are generated from full_keys and full_values
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"maxzoom": "13",
|
"maxzoom": "13",
|
||||||
"minzoom": "11",
|
"minzoom": "11",
|
||||||
"name": "tests/muni/out/-Z11_-z13_-rf2000.json.check.mbtiles",
|
"name": "tests/muni/out/-Z11_-z13_-rf2000.json.check.mbtiles",
|
||||||
"strategies": "[{},{},{},{},{},{},{},{},{},{},{},{\"dropped_by_rate\":2542},{\"dropped_by_rate\":1547},{}]",
|
"strategies": "[{},{},{},{},{},{},{},{},{},{},{},{\"dropped_by_rate\":2544},{\"dropped_by_rate\":1546},{}]",
|
||||||
"tippecanoe_decisions": "{\"basezoom\":13,\"droprate\":1.4510341140028376,\"retain_points_multiplier\":1}",
|
"tippecanoe_decisions": "{\"basezoom\":13,\"droprate\":1.45103,\"retain_points_multiplier\":1}",
|
||||||
"type": "overlay",
|
"type": "overlay",
|
||||||
"version": "2"
|
"version": "2"
|
||||||
}, "features": [
|
}, "features": [
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475286, 37.721102 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475286, 37.721102 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Avenue & Holloway St" }, "geometry": { "type": "Point", "coordinates": [ -122.475071, 37.721204 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475071, 37.721238 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY" }, "geometry": { "type": "Point", "coordinates": [ -122.475114, 37.720967 ] } }
|
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY" }, "geometry": { "type": "Point", "coordinates": [ -122.475114, 37.720967 ] } }
|
||||||
,
|
,
|
||||||
@@ -90,8 +90,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "GRAFTON AVE & PLYMOUTH AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.457047, 37.720118 ] } }
|
{ "type": "Feature", "properties": { "name": "GRAFTON AVE & PLYMOUTH AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.457047, 37.720118 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Grafton Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.720118 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719982 ] } }
|
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719982 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Grafton Ave & Brighton Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.454987, 37.720084 ] } }
|
{ "type": "Feature", "properties": { "name": "Grafton Ave & Brighton Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.454987, 37.720084 ] } }
|
||||||
@@ -150,7 +148,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.427478, 37.721238 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.427478, 37.721238 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Persia Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.428679, 37.719745 ] } }
|
{ "type": "Feature", "properties": { "name": "Moscow St & Persia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428765, 37.719812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720525 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720525 ] } }
|
||||||
,
|
,
|
||||||
@@ -218,7 +216,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Font Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.475886, 37.716689 ] } }
|
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Font Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.475886, 37.716689 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Josepha Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.477174, 37.715976 ] } }
|
{ "type": "Feature", "properties": { "name": "Garces Dr & Gonzalez Dr" }, "geometry": { "type": "Point", "coordinates": [ -122.478333, 37.715841 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474427, 37.717266 ] } }
|
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474427, 37.717266 ] } }
|
||||||
,
|
,
|
||||||
@@ -248,7 +246,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.471251, 37.713532 ] } }
|
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.471251, 37.713532 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Palmetto Av" }, "geometry": { "type": "Point", "coordinates": [ -122.470994, 37.710918 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Randolph St" }, "geometry": { "type": "Point", "coordinates": [ -122.470007, 37.714415 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Randolph St" }, "geometry": { "type": "Point", "coordinates": [ -122.470007, 37.714449 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Randolph St" }, "geometry": { "type": "Point", "coordinates": [ -122.470007, 37.714449 ] } }
|
||||||
,
|
,
|
||||||
@@ -256,7 +254,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Broad St & Arch St" }, "geometry": { "type": "Point", "coordinates": [ -122.467389, 37.712514 ] } }
|
{ "type": "Feature", "properties": { "name": "Broad St & Arch St" }, "geometry": { "type": "Point", "coordinates": [ -122.467389, 37.712514 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Randolph St & Arch St" }, "geometry": { "type": "Point", "coordinates": [ -122.467217, 37.714211 ] } }
|
{ "type": "Feature", "properties": { "name": "Alemany Blvd & St Charles Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.469449, 37.710341 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brotherhood Way & Arch ST" }, "geometry": { "type": "Point", "coordinates": [ -122.466874, 37.712344 ] } }
|
{ "type": "Feature", "properties": { "name": "Brotherhood Way & Arch ST" }, "geometry": { "type": "Point", "coordinates": [ -122.466874, 37.712344 ] } }
|
||||||
,
|
,
|
||||||
@@ -318,7 +316,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Broad St" }, "geometry": { "type": "Point", "coordinates": [ -122.453141, 37.713294 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Broad St" }, "geometry": { "type": "Point", "coordinates": [ -122.453141, 37.713294 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452240, 37.714177 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452154, 37.714143 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452068, 37.714075 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452068, 37.714075 ] } }
|
||||||
,
|
,
|
||||||
@@ -332,7 +330,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission St & Sickles Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.453313, 37.708643 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & Sickles Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.453313, 37.708643 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission St & Lawrence Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.450867, 37.709492 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & Acton St" }, "geometry": { "type": "Point", "coordinates": [ -122.452197, 37.708881 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
||||||
,
|
,
|
||||||
@@ -388,7 +386,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "South Hill Blvd & Chicago Way" }, "geometry": { "type": "Point", "coordinates": [ -122.431512, 37.710714 ] } }
|
{ "type": "Feature", "properties": { "name": "South Hill Blvd & Chicago Way" }, "geometry": { "type": "Point", "coordinates": [ -122.431512, 37.710714 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428164, 37.711868 ] } }
|
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428293, 37.711733 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1721 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426276, 37.711088 ] } }
|
{ "type": "Feature", "properties": { "name": "1721 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426276, 37.711088 ] } }
|
||||||
,
|
,
|
||||||
@@ -458,7 +456,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Delta St & Wilde Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407436, 37.717776 ] } }
|
{ "type": "Feature", "properties": { "name": "Delta St & Wilde Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407436, 37.717776 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407608, 37.717165 ] } }
|
{ "type": "Feature", "properties": { "name": "Delta St & Tioga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407737, 37.717300 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405806, 37.716655 ] } }
|
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405806, 37.716655 ] } }
|
||||||
,
|
,
|
||||||
@@ -528,7 +526,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405033, 37.708949 ] } }
|
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405033, 37.708949 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404861, 37.709085 ] } }
|
{ "type": "Feature", "properties": { "name": "Not a public stop" }, "geometry": { "type": "Point", "coordinates": [ -122.404647, 37.709526 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708813 ] } }
|
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708813 ] } }
|
||||||
,
|
,
|
||||||
@@ -1074,7 +1072,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ortega St & 48th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.507515, 37.750935 ] } }
|
{ "type": "Feature", "properties": { "name": "Ortega St & 48th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.507515, 37.750935 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505498, 37.752835 ] } }
|
{ "type": "Feature", "properties": { "name": "Noriega St & 46th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.505584, 37.752903 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505326, 37.752835 ] } }
|
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505326, 37.752835 ] } }
|
||||||
,
|
,
|
||||||
@@ -1450,7 +1448,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "9th Ave & Irving St" }, "geometry": { "type": "Point", "coordinates": [ -122.466230, 37.764269 ] } }
|
{ "type": "Feature", "properties": { "name": "9th Ave & Irving St" }, "geometry": { "type": "Point", "coordinates": [ -122.466230, 37.764269 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Irving St & 9th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.466145, 37.764099 ] } }
|
{ "type": "Feature", "properties": { "name": "Lincoln Way & 7th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.464600, 37.766101 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Irving St. & 9th Ave." }, "geometry": { "type": "Point", "coordinates": [ -122.466145, 37.764099 ] } }
|
{ "type": "Feature", "properties": { "name": "Irving St. & 9th Ave." }, "geometry": { "type": "Point", "coordinates": [ -122.466145, 37.764099 ] } }
|
||||||
,
|
,
|
||||||
@@ -1610,7 +1608,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444773, 37.776922 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444773, 37.776922 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "McAllister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443399, 37.777092 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443314, 37.777160 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Ashbury St" }, "geometry": { "type": "Point", "coordinates": [ -122.447562, 37.773802 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Ashbury St" }, "geometry": { "type": "Point", "coordinates": [ -122.447562, 37.773802 ] } }
|
||||||
,
|
,
|
||||||
@@ -1882,7 +1880,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Castro St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.434645, 37.757619 ] } }
|
{ "type": "Feature", "properties": { "name": "Castro St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.434645, 37.757619 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Castro St & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.434473, 37.754633 ] } }
|
{ "type": "Feature", "properties": { "name": "Castro St & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.434473, 37.755957 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th Ave & Ortega St" }, "geometry": { "type": "Point", "coordinates": [ -122.473097, 37.752394 ] } }
|
{ "type": "Feature", "properties": { "name": "16th Ave & Ortega St" }, "geometry": { "type": "Point", "coordinates": [ -122.473097, 37.752394 ] } }
|
||||||
,
|
,
|
||||||
@@ -1920,7 +1918,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ulloa St. & 17th Ave." }, "geometry": { "type": "Point", "coordinates": [ -122.473526, 37.741196 ] } }
|
{ "type": "Feature", "properties": { "name": "Ulloa St. & 17th Ave." }, "geometry": { "type": "Point", "coordinates": [ -122.473526, 37.741196 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "14th Ave & Taraval St" }, "geometry": { "type": "Point", "coordinates": [ -122.470307, 37.743402 ] } }
|
{ "type": "Feature", "properties": { "name": "15th Ave & Taraval St" }, "geometry": { "type": "Point", "coordinates": [ -122.471380, 37.743062 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "14th Ave & Taraval St" }, "geometry": { "type": "Point", "coordinates": [ -122.470179, 37.743164 ] } }
|
{ "type": "Feature", "properties": { "name": "14th Ave & Taraval St" }, "geometry": { "type": "Point", "coordinates": [ -122.470179, 37.743164 ] } }
|
||||||
,
|
,
|
||||||
@@ -2070,7 +2068,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475286, 37.721102 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475286, 37.721102 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Avenue & Holloway St" }, "geometry": { "type": "Point", "coordinates": [ -122.475071, 37.721170 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475071, 37.721238 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY" }, "geometry": { "type": "Point", "coordinates": [ -122.475114, 37.720967 ] } }
|
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY" }, "geometry": { "type": "Point", "coordinates": [ -122.475114, 37.720967 ] } }
|
||||||
,
|
,
|
||||||
@@ -2140,7 +2138,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "GRAFTON AVE & PLYMOUTH AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.457047, 37.720084 ] } }
|
{ "type": "Feature", "properties": { "name": "GRAFTON AVE & PLYMOUTH AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.457047, 37.720084 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Grafton Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.720118 ] } }
|
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456017, 37.721747 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719948 ] } }
|
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719948 ] } }
|
||||||
,
|
,
|
||||||
@@ -2356,7 +2354,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave&I-280 on-ramp NE-NS/SB" }, "geometry": { "type": "Point", "coordinates": [ -122.446918, 37.723037 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave&I-280 on-ramp NE-NS/SB" }, "geometry": { "type": "Point", "coordinates": [ -122.446918, 37.723037 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Ocean Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444687, 37.723071 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & San Jose Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444944, 37.723003 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Ocean Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444386, 37.723207 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Ocean Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444386, 37.723207 ] } }
|
||||||
,
|
,
|
||||||
@@ -2394,7 +2392,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722732 ] } }
|
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722732 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Ocean Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444730, 37.722800 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Ocean Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444901, 37.722935 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave & San Jose St" }, "geometry": { "type": "Point", "coordinates": [ -122.444386, 37.722901 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & San Jose St" }, "geometry": { "type": "Point", "coordinates": [ -122.444386, 37.722901 ] } }
|
||||||
,
|
,
|
||||||
@@ -2604,7 +2602,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.422028, 37.790421 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.422028, 37.790421 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.422285, 37.789506 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Polk St" }, "geometry": { "type": "Point", "coordinates": [ -122.420826, 37.790489 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bush St &Van ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.421813, 37.788387 ] } }
|
{ "type": "Feature", "properties": { "name": "Bush St &Van ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.421813, 37.788387 ] } }
|
||||||
,
|
,
|
||||||
@@ -2676,7 +2674,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pacific Ave & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420011, 37.795135 ] } }
|
{ "type": "Feature", "properties": { "name": "Pacific Ave & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420011, 37.795135 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hyde St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.418551, 37.796492 ] } }
|
{ "type": "Feature", "properties": { "name": "Hyde St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.796356 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pacific Ave & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.795373 ] } }
|
{ "type": "Feature", "properties": { "name": "Pacific Ave & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.795373 ] } }
|
||||||
,
|
,
|
||||||
@@ -2830,7 +2828,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Battery St & Jackson St" }, "geometry": { "type": "Point", "coordinates": [ -122.400784, 37.796865 ] } }
|
{ "type": "Feature", "properties": { "name": "Battery St & Jackson St" }, "geometry": { "type": "Point", "coordinates": [ -122.400784, 37.796865 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Stockton St & Jackson St" }, "geometry": { "type": "Point", "coordinates": [ -122.408295, 37.795746 ] } }
|
{ "type": "Feature", "properties": { "name": "Pacific Ave & Stockton St" }, "geometry": { "type": "Point", "coordinates": [ -122.408595, 37.796729 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Stockton St & Pacific Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.408252, 37.796255 ] } }
|
{ "type": "Feature", "properties": { "name": "Stockton St & Pacific Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.408252, 37.796255 ] } }
|
||||||
,
|
,
|
||||||
@@ -3062,7 +3060,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Avenue H & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.366409, 37.819921 ] } }
|
{ "type": "Feature", "properties": { "name": "Avenue H & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.366409, 37.819921 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Avenue H" }, "geometry": { "type": "Point", "coordinates": [ -122.366109, 37.819921 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Avenue C" }, "geometry": { "type": "Point", "coordinates": [ -122.370143, 37.818328 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Treasure Island Rd & Macalla Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.371130, 37.813073 ] } }
|
{ "type": "Feature", "properties": { "name": "Treasure Island Rd & Macalla Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.371130, 37.813073 ] } }
|
||||||
,
|
,
|
||||||
@@ -3132,7 +3130,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Laguna St" }, "geometry": { "type": "Point", "coordinates": [ -122.426705, 37.779331 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Laguna St" }, "geometry": { "type": "Point", "coordinates": [ -122.426705, 37.779331 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.428250, 37.776244 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.427564, 37.776244 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Laguna St & Hayes St" }, "geometry": { "type": "Point", "coordinates": [ -122.426276, 37.776753 ] } }
|
{ "type": "Feature", "properties": { "name": "Laguna St & Hayes St" }, "geometry": { "type": "Point", "coordinates": [ -122.426276, 37.776753 ] } }
|
||||||
,
|
,
|
||||||
@@ -3202,7 +3200,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hyde St & Turk St" }, "geometry": { "type": "Point", "coordinates": [ -122.415805, 37.782655 ] } }
|
{ "type": "Feature", "properties": { "name": "Hyde St & Turk St" }, "geometry": { "type": "Point", "coordinates": [ -122.415805, 37.782655 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Larkin St & Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416878, 37.780552 ] } }
|
{ "type": "Feature", "properties": { "name": "Larkin St&Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416835, 37.780382 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.415848, 37.780620 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.415848, 37.780620 ] } }
|
||||||
,
|
,
|
||||||
@@ -3220,7 +3218,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "O'Farrell St & Jones St" }, "geometry": { "type": "Point", "coordinates": [ -122.412500, 37.785809 ] } }
|
{ "type": "Feature", "properties": { "name": "O'Farrell St & Jones St" }, "geometry": { "type": "Point", "coordinates": [ -122.412500, 37.785809 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geary Blvd & Taylor St" }, "geometry": { "type": "Point", "coordinates": [ -122.411685, 37.786962 ] } }
|
{ "type": "Feature", "properties": { "name": "Eddy St & Jones St" }, "geometry": { "type": "Point", "coordinates": [ -122.412415, 37.783876 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geary Blvd & Mason St" }, "geometry": { "type": "Point", "coordinates": [ -122.410269, 37.787166 ] } }
|
{ "type": "Feature", "properties": { "name": "Geary Blvd & Mason St" }, "geometry": { "type": "Point", "coordinates": [ -122.410269, 37.787166 ] } }
|
||||||
,
|
,
|
||||||
@@ -3256,6 +3254,8 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Market St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419367, 37.775226 ] } }
|
{ "type": "Feature", "properties": { "name": "Market St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419367, 37.775226 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Market St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419195, 37.775226 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "11th St/btw Market & Mission" }, "geometry": { "type": "Point", "coordinates": [ -122.418637, 37.775498 ] } }
|
{ "type": "Feature", "properties": { "name": "11th St/btw Market & Mission" }, "geometry": { "type": "Point", "coordinates": [ -122.418637, 37.775498 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "11th St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.418509, 37.775498 ] } }
|
{ "type": "Feature", "properties": { "name": "11th St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.418509, 37.775498 ] } }
|
||||||
@@ -3290,7 +3290,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "8th St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.414603, 37.778483 ] } }
|
{ "type": "Feature", "properties": { "name": "8th St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.414603, 37.778483 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "8th St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.413015, 37.777228 ] } }
|
{ "type": "Feature", "properties": { "name": "Market St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.414389, 37.779093 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission St & 8th St" }, "geometry": { "type": "Point", "coordinates": [ -122.412715, 37.777703 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & 8th St" }, "geometry": { "type": "Point", "coordinates": [ -122.412715, 37.777703 ] } }
|
||||||
,
|
,
|
||||||
@@ -3586,7 +3586,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "2nd St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.394991, 37.784079 ] } }
|
{ "type": "Feature", "properties": { "name": "2nd St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.394991, 37.784079 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.397437, 37.782621 ] } }
|
{ "type": "Feature", "properties": { "name": "Harrison St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.397652, 37.782417 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.398081, 37.779466 ] } }
|
{ "type": "Feature", "properties": { "name": "Bryant St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.398081, 37.779466 ] } }
|
||||||
,
|
,
|
||||||
@@ -3646,7 +3646,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "4th St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.389669, 37.772954 ] } }
|
{ "type": "Feature", "properties": { "name": "4th St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.389669, 37.772954 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission Bay North & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.389627, 37.771156 ] } }
|
{ "type": "Feature", "properties": { "name": "Third Street & Mission Rock St" }, "geometry": { "type": "Point", "coordinates": [ -122.389712, 37.772818 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.407651, 37.768238 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.407651, 37.768238 ] } }
|
||||||
,
|
,
|
||||||
@@ -3656,7 +3656,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407651, 37.765694 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407651, 37.765694 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407522, 37.764235 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407351, 37.764744 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405505, 37.765864 ] } }
|
{ "type": "Feature", "properties": { "name": "16th St & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405505, 37.765864 ] } }
|
||||||
,
|
,
|
||||||
@@ -3722,11 +3722,11 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "20th St & Rhode Island St" }, "geometry": { "type": "Point", "coordinates": [ -122.402244, 37.759621 ] } }
|
{ "type": "Feature", "properties": { "name": "20th St & Rhode Island St" }, "geometry": { "type": "Point", "coordinates": [ -122.402244, 37.759621 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Rhode Island St & Southern Heights Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.402072, 37.758501 ] } }
|
{ "type": "Feature", "properties": { "name": "Rhode Island St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401986, 37.759587 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & 19th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401128, 37.760944 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & 19th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401128, 37.760944 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Southern Heights Ave & De Haro St" }, "geometry": { "type": "Point", "coordinates": [ -122.400784, 37.758094 ] } }
|
{ "type": "Feature", "properties": { "name": "Southern Heights Ave & De Haro St" }, "geometry": { "type": "Point", "coordinates": [ -122.401128, 37.758128 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & Southern Heights Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.758026 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & Southern Heights Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.758026 ] } }
|
||||||
,
|
,
|
||||||
@@ -3760,7 +3760,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "18th St & Pennsylvania Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.393231, 37.762742 ] } }
|
{ "type": "Feature", "properties": { "name": "18th St & Pennsylvania Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.393231, 37.762742 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.390699, 37.766746 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission Bay South & 4th St SE-FS/ BZ" }, "geometry": { "type": "Point", "coordinates": [ -122.391043, 37.770511 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1731 3RD ST" }, "geometry": { "type": "Point", "coordinates": [ -122.389283, 37.769697 ] } }
|
{ "type": "Feature", "properties": { "name": "1731 3RD ST" }, "geometry": { "type": "Point", "coordinates": [ -122.389283, 37.769697 ] } }
|
||||||
,
|
,
|
||||||
@@ -4050,7 +4050,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.427478, 37.721204 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.427478, 37.721204 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Persia Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.428679, 37.719711 ] } }
|
{ "type": "Feature", "properties": { "name": "Moscow St & Persia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428765, 37.719812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720525 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720525 ] } }
|
||||||
,
|
,
|
||||||
@@ -4120,7 +4120,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "University St & Wayland St" }, "geometry": { "type": "Point", "coordinates": [ -122.412887, 37.723818 ] } }
|
{ "type": "Feature", "properties": { "name": "University St & Wayland St" }, "geometry": { "type": "Point", "coordinates": [ -122.412887, 37.723818 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Woolsey St & Dartmouth St" }, "geometry": { "type": "Point", "coordinates": [ -122.410612, 37.723105 ] } }
|
{ "type": "Feature", "properties": { "name": "Woolsey St & Colby St" }, "geometry": { "type": "Point", "coordinates": [ -122.411427, 37.722935 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "University St & Woolsey St" }, "geometry": { "type": "Point", "coordinates": [ -122.412543, 37.722732 ] } }
|
{ "type": "Feature", "properties": { "name": "University St & Woolsey St" }, "geometry": { "type": "Point", "coordinates": [ -122.412543, 37.722732 ] } }
|
||||||
,
|
,
|
||||||
@@ -4192,11 +4192,11 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Connecticut St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.396321, 37.751410 ] } }
|
{ "type": "Feature", "properties": { "name": "Connecticut St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.396321, 37.751410 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.397051, 37.749035 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.396879, 37.749069 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Connecticut St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.396364, 37.749849 ] } }
|
{ "type": "Feature", "properties": { "name": "Connecticut St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.396364, 37.749849 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "25th St & Dakota St" }, "geometry": { "type": "Point", "coordinates": [ -122.394819, 37.752496 ] } }
|
{ "type": "Feature", "properties": { "name": "Dakota St & 25th St" }, "geometry": { "type": "Point", "coordinates": [ -122.394691, 37.752665 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Napoleon St" }, "geometry": { "type": "Point", "coordinates": [ -122.396235, 37.747338 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Napoleon St" }, "geometry": { "type": "Point", "coordinates": [ -122.396235, 37.747338 ] } }
|
||||||
,
|
,
|
||||||
@@ -4234,7 +4234,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Evans Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.388124, 37.742451 ] } }
|
{ "type": "Feature", "properties": { "name": "3rd St & Evans Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.388124, 37.742451 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Phelps St & Mckinnon Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.738073 ] } }
|
{ "type": "Feature", "properties": { "name": "Jerrold Ave & Phelps St" }, "geometry": { "type": "Point", "coordinates": [ -122.391429, 37.739838 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Phelps St & Mckinnon Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.737870 ] } }
|
{ "type": "Feature", "properties": { "name": "Phelps St & Mckinnon Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.737870 ] } }
|
||||||
,
|
,
|
||||||
@@ -4262,7 +4262,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Silver Ave & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405677, 37.732338 ] } }
|
{ "type": "Feature", "properties": { "name": "Silver Ave & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405677, 37.732338 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Silver Ave & Charter Oak Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404304, 37.733254 ] } }
|
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404733, 37.733220 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404819, 37.732983 ] } }
|
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404819, 37.732983 ] } }
|
||||||
,
|
,
|
||||||
@@ -4546,8 +4546,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Font Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.475886, 37.716689 ] } }
|
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Font Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.475886, 37.716689 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gonzalez Dr & Josepha Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.477174, 37.715976 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474427, 37.717266 ] } }
|
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474427, 37.717266 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474256, 37.717436 ] } }
|
{ "type": "Feature", "properties": { "name": "Cambon Dr & Castelo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.474256, 37.717436 ] } }
|
||||||
@@ -4596,7 +4594,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Delta St & Wilde Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407436, 37.717776 ] } }
|
{ "type": "Feature", "properties": { "name": "Delta St & Wilde Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407436, 37.717776 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407608, 37.717165 ] } }
|
{ "type": "Feature", "properties": { "name": "Delta St & Tioga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407737, 37.717300 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405806, 37.716655 ] } }
|
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405806, 37.716655 ] } }
|
||||||
,
|
,
|
||||||
@@ -4634,8 +4632,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Van Ness Station Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.419324, 37.775226 ] } }
|
{ "type": "Feature", "properties": { "name": "Van Ness Station Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.419324, 37.775226 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Metro Van Ness Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.419238, 37.775125 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Outbd" }, "geometry": { "type": "Point", "coordinates": [ -122.414989, 37.778686 ] } }
|
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Outbd" }, "geometry": { "type": "Point", "coordinates": [ -122.414989, 37.778686 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Metro Church Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.429323, 37.767322 ] } }
|
{ "type": "Feature", "properties": { "name": "Metro Church Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.429323, 37.767322 ] } }
|
||||||
@@ -4822,7 +4818,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.471251, 37.713549 ] } }
|
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.471251, 37.713549 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Junipero Serra Blvd & Palmetto Av" }, "geometry": { "type": "Point", "coordinates": [ -122.470994, 37.710901 ] } }
|
{ "type": "Feature", "properties": { "name": "JUNIPERO SERRA BLVD/S.F. Golf Club" }, "geometry": { "type": "Point", "coordinates": [ -122.471316, 37.710697 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Randolph St" }, "geometry": { "type": "Point", "coordinates": [ -122.470028, 37.714398 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Randolph St" }, "geometry": { "type": "Point", "coordinates": [ -122.470028, 37.714398 ] } }
|
||||||
,
|
,
|
||||||
@@ -4924,7 +4920,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Broad St" }, "geometry": { "type": "Point", "coordinates": [ -122.453141, 37.713294 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Broad St" }, "geometry": { "type": "Point", "coordinates": [ -122.453141, 37.713294 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452219, 37.714160 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452283, 37.713939 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452133, 37.714143 ] } }
|
{ "type": "Feature", "properties": { "name": "San Jose Ave & Farallones St" }, "geometry": { "type": "Point", "coordinates": [ -122.452133, 37.714143 ] } }
|
||||||
,
|
,
|
||||||
@@ -5498,7 +5494,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Noriega St & 46th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.505713, 37.753022 ] } }
|
{ "type": "Feature", "properties": { "name": "Noriega St & 46th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.505713, 37.753022 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505476, 37.752835 ] } }
|
{ "type": "Feature", "properties": { "name": "Noriega St & 46th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.505562, 37.752886 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505326, 37.752818 ] } }
|
{ "type": "Feature", "properties": { "name": "46th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.505326, 37.752818 ] } }
|
||||||
,
|
,
|
||||||
@@ -6274,7 +6270,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444751, 37.776939 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.444751, 37.776939 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "McAllister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443421, 37.777092 ] } }
|
{ "type": "Feature", "properties": { "name": "Central Ave & McAllister St" }, "geometry": { "type": "Point", "coordinates": [ -122.444837, 37.776804 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443314, 37.777160 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443314, 37.777160 ] } }
|
||||||
,
|
,
|
||||||
@@ -6942,7 +6938,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475092, 37.721255 ] } }
|
{ "type": "Feature", "properties": { "name": "19TH AVE & HOLLOWAY Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475092, 37.721255 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Avenue & Holloway St" }, "geometry": { "type": "Point", "coordinates": [ -122.475092, 37.721187 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475092, 37.721238 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475221, 37.721068 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.475221, 37.721068 ] } }
|
||||||
,
|
,
|
||||||
@@ -7044,7 +7040,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.721934 ] } }
|
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.721934 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Grafton Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456210, 37.720101 ] } }
|
{ "type": "Feature", "properties": { "name": "Plymouth Ave & Holloway Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456038, 37.721764 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719965 ] } }
|
{ "type": "Feature", "properties": { "name": "Grafton Ave & Plymouth Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456231, 37.719965 ] } }
|
||||||
,
|
,
|
||||||
@@ -7988,7 +7984,7 @@
|
|||||||
{ "type": "FeatureCollection", "properties": { "layer": "muni", "version": 2, "extent": 4096 }, "features": [
|
{ "type": "FeatureCollection", "properties": { "layer": "muni", "version": 2, "extent": 4096 }, "features": [
|
||||||
{ "type": "Feature", "properties": { "name": "Naples St & Russia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.432413, 37.719201 ] } }
|
{ "type": "Feature", "properties": { "name": "Naples St & Russia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.432413, 37.719201 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Persia Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.428679, 37.719728 ] } }
|
{ "type": "Feature", "properties": { "name": "Moscow St & Persia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428765, 37.719829 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Persia Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.427349, 37.718930 ] } }
|
{ "type": "Feature", "properties": { "name": "Persia Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.427349, 37.718930 ] } }
|
||||||
,
|
,
|
||||||
@@ -8044,7 +8040,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Chicago Way & South Hill Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.431383, 37.710561 ] } }
|
{ "type": "Feature", "properties": { "name": "Chicago Way & South Hill Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.431383, 37.710561 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428186, 37.711868 ] } }
|
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428293, 37.711733 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1701 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426770, 37.711105 ] } }
|
{ "type": "Feature", "properties": { "name": "1701 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426770, 37.711105 ] } }
|
||||||
,
|
,
|
||||||
@@ -8146,7 +8142,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Wilde Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407179, 37.717810 ] } }
|
{ "type": "Feature", "properties": { "name": "Wilde Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407179, 37.717810 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407629, 37.717148 ] } }
|
{ "type": "Feature", "properties": { "name": "Delta St & Tioga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407715, 37.717283 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405784, 37.716655 ] } }
|
{ "type": "Feature", "properties": { "name": "Tioga Ave & Rutland St" }, "geometry": { "type": "Point", "coordinates": [ -122.405784, 37.716655 ] } }
|
||||||
,
|
,
|
||||||
@@ -8248,7 +8244,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "BAY SHORE BLVD & SUNNYDALE AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.405055, 37.708830 ] } }
|
{ "type": "Feature", "properties": { "name": "BAY SHORE BLVD & SUNNYDALE AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.405055, 37.708830 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404840, 37.709085 ] } }
|
{ "type": "Feature", "properties": { "name": "Not a public stop" }, "geometry": { "type": "Point", "coordinates": [ -122.404625, 37.709526 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708796 ] } }
|
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708796 ] } }
|
||||||
,
|
,
|
||||||
@@ -8474,7 +8470,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Laguna St" }, "geometry": { "type": "Point", "coordinates": [ -122.426705, 37.779331 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Laguna St" }, "geometry": { "type": "Point", "coordinates": [ -122.426705, 37.779331 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.428272, 37.776261 ] } }
|
{ "type": "Feature", "properties": { "name": "Grove St & Laguna St" }, "geometry": { "type": "Point", "coordinates": [ -122.426319, 37.777380 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.427542, 37.776244 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.427542, 37.776244 ] } }
|
||||||
,
|
,
|
||||||
@@ -8576,7 +8572,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mcallister St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417414, 37.780501 ] } }
|
{ "type": "Feature", "properties": { "name": "Mcallister St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417414, 37.780501 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Larkin St & Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416856, 37.780569 ] } }
|
{ "type": "Feature", "properties": { "name": "Larkin St & Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416964, 37.780755 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Larkin St&Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416835, 37.780382 ] } }
|
{ "type": "Feature", "properties": { "name": "Larkin St&Mcallister St" }, "geometry": { "type": "Point", "coordinates": [ -122.416835, 37.780382 ] } }
|
||||||
,
|
,
|
||||||
@@ -9128,7 +9124,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Perry St" }, "geometry": { "type": "Point", "coordinates": [ -122.397459, 37.782706 ] } }
|
{ "type": "Feature", "properties": { "name": "3rd St & Perry St" }, "geometry": { "type": "Point", "coordinates": [ -122.397459, 37.782706 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.397437, 37.782638 ] } }
|
{ "type": "Feature", "properties": { "name": "Harrison St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.397673, 37.782434 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.398059, 37.779466 ] } }
|
{ "type": "Feature", "properties": { "name": "Bryant St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.398059, 37.779466 ] } }
|
||||||
,
|
,
|
||||||
@@ -9230,7 +9226,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407479, 37.766033 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407479, 37.766033 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407544, 37.764218 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407351, 37.764727 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405505, 37.765864 ] } }
|
{ "type": "Feature", "properties": { "name": "16th St & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405505, 37.765864 ] } }
|
||||||
,
|
,
|
||||||
@@ -9332,7 +9328,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401021, 37.759655 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401021, 37.759655 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Southern Heights Ave & De Haro St" }, "geometry": { "type": "Point", "coordinates": [ -122.400784, 37.758094 ] } }
|
{ "type": "Feature", "properties": { "name": "Southern Heights Ave & De Haro St" }, "geometry": { "type": "Point", "coordinates": [ -122.401106, 37.758128 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & Southern Heights Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.758009 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & Southern Heights Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.758009 ] } }
|
||||||
,
|
,
|
||||||
@@ -9802,7 +9798,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Munich St" }, "geometry": { "type": "Point", "coordinates": [ -122.426984, 37.720899 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Munich St" }, "geometry": { "type": "Point", "coordinates": [ -122.426984, 37.720899 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Persia Ave & Moscow St" }, "geometry": { "type": "Point", "coordinates": [ -122.428679, 37.719728 ] } }
|
{ "type": "Feature", "properties": { "name": "Moscow St & Persia Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428765, 37.719812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720508 ] } }
|
{ "type": "Feature", "properties": { "name": "Brazil Ave & Prague St" }, "geometry": { "type": "Point", "coordinates": [ -122.426147, 37.720508 ] } }
|
||||||
,
|
,
|
||||||
@@ -9904,7 +9900,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Woolsey St & Colby St" }, "geometry": { "type": "Point", "coordinates": [ -122.411449, 37.722935 ] } }
|
{ "type": "Feature", "properties": { "name": "Woolsey St & Colby St" }, "geometry": { "type": "Point", "coordinates": [ -122.411449, 37.722935 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Woolsey St & Dartmouth St" }, "geometry": { "type": "Point", "coordinates": [ -122.410591, 37.723122 ] } }
|
{ "type": "Feature", "properties": { "name": "Woolsey St & Dartmouth St" }, "geometry": { "type": "Point", "coordinates": [ -122.410419, 37.723241 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "University St & Woolsey St" }, "geometry": { "type": "Point", "coordinates": [ -122.412522, 37.722732 ] } }
|
{ "type": "Feature", "properties": { "name": "University St & Woolsey St" }, "geometry": { "type": "Point", "coordinates": [ -122.412522, 37.722732 ] } }
|
||||||
,
|
,
|
||||||
@@ -10006,7 +10002,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Connecticut St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.396343, 37.751427 ] } }
|
{ "type": "Feature", "properties": { "name": "Connecticut St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.396343, 37.751427 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.397072, 37.749018 ] } }
|
{ "type": "Feature", "properties": { "name": "26th St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.398660, 37.751105 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.396879, 37.749069 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.396879, 37.749069 ] } }
|
||||||
,
|
,
|
||||||
@@ -10108,7 +10104,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Silver Ave & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405698, 37.732338 ] } }
|
{ "type": "Feature", "properties": { "name": "Silver Ave & San Bruno Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405698, 37.732338 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Silver Ave & Charter Oak Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404282, 37.733271 ] } }
|
{ "type": "Feature", "properties": { "name": "San Bruno Ave & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405548, 37.732168 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404711, 37.733203 ] } }
|
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Silver Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.404711, 37.733203 ] } }
|
||||||
,
|
,
|
||||||
@@ -10514,6 +10510,8 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Wilde Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407179, 37.717810 ] } }
|
{ "type": "Feature", "properties": { "name": "Wilde Ave & Delta St" }, "geometry": { "type": "Point", "coordinates": [ -122.407179, 37.717810 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Delta St & Tioga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.407715, 37.717283 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gilman Ave & Griffith St" }, "geometry": { "type": "Point", "coordinates": [ -122.388275, 37.718234 ] } }
|
{ "type": "Feature", "properties": { "name": "Gilman Ave & Griffith St" }, "geometry": { "type": "Point", "coordinates": [ -122.388275, 37.718234 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Gilman Ave & Bill Walsh Way" }, "geometry": { "type": "Point", "coordinates": [ -122.386987, 37.717504 ] } }
|
{ "type": "Feature", "properties": { "name": "Gilman Ave & Bill Walsh Way" }, "geometry": { "type": "Point", "coordinates": [ -122.386987, 37.717504 ] } }
|
||||||
@@ -10760,7 +10758,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Polk St & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.420783, 37.790642 ] } }
|
{ "type": "Feature", "properties": { "name": "Polk St & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.420783, 37.790642 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.422307, 37.789506 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Polk St" }, "geometry": { "type": "Point", "coordinates": [ -122.420826, 37.790489 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bush St &Van ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.421834, 37.788404 ] } }
|
{ "type": "Feature", "properties": { "name": "Bush St &Van ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.421834, 37.788404 ] } }
|
||||||
,
|
,
|
||||||
@@ -10862,7 +10860,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pacific Ave & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420032, 37.795152 ] } }
|
{ "type": "Feature", "properties": { "name": "Pacific Ave & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420032, 37.795152 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hyde St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.418573, 37.796492 ] } }
|
{ "type": "Feature", "properties": { "name": "Pacific Ave & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.419860, 37.795322 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hyde St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.796339 ] } }
|
{ "type": "Feature", "properties": { "name": "Hyde St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.796339 ] } }
|
||||||
,
|
,
|
||||||
@@ -11424,7 +11422,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Avenue H & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.366409, 37.819938 ] } }
|
{ "type": "Feature", "properties": { "name": "Avenue H & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.366409, 37.819938 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Avenue H" }, "geometry": { "type": "Point", "coordinates": [ -122.366130, 37.819921 ] } }
|
{ "type": "Feature", "properties": { "name": "Avenue H & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.366323, 37.819989 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Avenue C" }, "geometry": { "type": "Point", "coordinates": [ -122.370143, 37.818328 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Avenue C" }, "geometry": { "type": "Point", "coordinates": [ -122.370143, 37.818328 ] } }
|
||||||
,
|
,
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"maxzoom": "13",
|
"maxzoom": "13",
|
||||||
"minzoom": "11",
|
"minzoom": "11",
|
||||||
"name": "tests/muni/out/-Z11_-z13_-rf2000_-g2.json.check.mbtiles",
|
"name": "tests/muni/out/-Z11_-z13_-rf2000_-g2.json.check.mbtiles",
|
||||||
"strategies": "[{},{},{},{},{},{},{},{},{},{},{},{\"dropped_by_rate\":1349,\"dropped_by_gamma\":963},{\"dropped_by_rate\":747,\"dropped_by_gamma\":752},{\"dropped_by_gamma\":514}]",
|
"strategies": "[{},{},{},{},{},{},{},{},{},{},{},{\"dropped_by_rate\":1349,\"dropped_by_gamma\":964},{\"dropped_by_rate\":748,\"dropped_by_gamma\":751},{\"dropped_by_gamma\":514}]",
|
||||||
"tippecanoe_decisions": "{\"basezoom\":13,\"droprate\":1.176222768016331,\"retain_points_multiplier\":1}",
|
"tippecanoe_decisions": "{\"basezoom\":13,\"droprate\":1.17622,\"retain_points_multiplier\":1}",
|
||||||
"type": "overlay",
|
"type": "overlay",
|
||||||
"version": "2"
|
"version": "2"
|
||||||
}, "features": [
|
}, "features": [
|
||||||
@@ -124,9 +124,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720627 ] } }
|
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720627 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720627 ] } }
|
{ "type": "Feature", "properties": { "name": "CAMERON BEACH YARD" }, "geometry": { "type": "Point", "coordinates": [ -122.446532, 37.720627 ] } }
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446704, 37.720457 ] } }
|
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geneva Ave & Delano Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445374, 37.720288 ] } }
|
{ "type": "Feature", "properties": { "name": "Geneva Ave & Delano Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445374, 37.720288 ] } }
|
||||||
,
|
,
|
||||||
@@ -158,8 +156,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Visitacion Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.411342, 37.718760 ] } }
|
{ "type": "Feature", "properties": { "name": "Mansell St & Visitacion Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.411342, 37.718760 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Dartmouth St" }, "geometry": { "type": "Point", "coordinates": [ -122.409067, 37.719371 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Hamilton St" }, "geometry": { "type": "Point", "coordinates": [ -122.407093, 37.719880 ] } }
|
{ "type": "Feature", "properties": { "name": "Mansell St & Hamilton St" }, "geometry": { "type": "Point", "coordinates": [ -122.407093, 37.719880 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.404346, 37.720763 ] } }
|
{ "type": "Feature", "properties": { "name": "Mansell St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.404346, 37.720763 ] } }
|
||||||
@@ -180,6 +176,8 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Third Street & Le Conte Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.718828 ] } }
|
{ "type": "Feature", "properties": { "name": "Third Street & Le Conte Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.718828 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "3rd St & Key St" }, "geometry": { "type": "Point", "coordinates": [ -122.396708, 37.719778 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.391429, 37.720967 ] } }
|
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.391429, 37.720967 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Hawes St" }, "geometry": { "type": "Point", "coordinates": [ -122.389584, 37.719914 ] } }
|
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Hawes St" }, "geometry": { "type": "Point", "coordinates": [ -122.389584, 37.719914 ] } }
|
||||||
@@ -238,7 +236,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brotherhood Way & Summit Way SE-FS/SB" }, "geometry": { "type": "Point", "coordinates": [ -122.474470, 37.713600 ] } }
|
{ "type": "Feature", "properties": { "name": "Brotherhood Way & Summit Way SE-FS/SB" }, "geometry": { "type": "Point", "coordinates": [ -122.474470, 37.713600 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Chumasero Dr & Galindo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.473140, 37.714041 ] } }
|
{ "type": "Feature", "properties": { "name": "Chumasero Dr & Galindo Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.473140, 37.714075 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Chumasero Dr & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.472925, 37.713294 ] } }
|
{ "type": "Feature", "properties": { "name": "Chumasero Dr & Brotherhood Way" }, "geometry": { "type": "Point", "coordinates": [ -122.472925, 37.713294 ] } }
|
||||||
,
|
,
|
||||||
@@ -356,7 +354,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.441168, 37.716520 ] } }
|
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.441082, 37.716723 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.440867, 37.716486 ] } }
|
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.440867, 37.716486 ] } }
|
||||||
,
|
,
|
||||||
@@ -410,7 +408,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428293, 37.711733 ] } }
|
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428293, 37.711733 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1721 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426276, 37.711088 ] } }
|
{ "type": "Feature", "properties": { "name": "1701 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426748, 37.711122 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "MANSELL ST & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.425675, 37.718285 ] } }
|
{ "type": "Feature", "properties": { "name": "MANSELL ST & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.425675, 37.718285 ] } }
|
||||||
,
|
,
|
||||||
@@ -438,7 +436,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.419066, 37.712615 ] } }
|
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.419066, 37.712615 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Santos St & Velasco Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419410, 37.710035 ] } }
|
{ "type": "Feature", "properties": { "name": "Santos St & Brookdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.418680, 37.711868 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Santos St & Blythdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.418766, 37.710612 ] } }
|
{ "type": "Feature", "properties": { "name": "Santos St & Blythdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.418766, 37.710612 ] } }
|
||||||
,
|
,
|
||||||
@@ -464,7 +462,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sunnydale Ave & Garrison Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.412758, 37.711054 ] } }
|
{ "type": "Feature", "properties": { "name": "Sunnydale Ave & Garrison Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.412758, 37.711054 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Visitacion Ave & Britton St" }, "geometry": { "type": "Point", "coordinates": [ -122.412372, 37.712751 ] } }
|
{ "type": "Feature", "properties": { "name": "Sunnydale Ave & Garrison Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.413015, 37.710986 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Visitacion Ave & Schwerin St" }, "geometry": { "type": "Point", "coordinates": [ -122.410483, 37.712242 ] } }
|
{ "type": "Feature", "properties": { "name": "Visitacion Ave & Schwerin St" }, "geometry": { "type": "Point", "coordinates": [ -122.410483, 37.712242 ] } }
|
||||||
,
|
,
|
||||||
@@ -560,9 +558,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405119, 37.708983 ] } }
|
{ "type": "Feature", "properties": { "name": "Bay Shore Blvd & Sunnydale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405119, 37.708983 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708813 ] } }
|
{ "type": "Feature", "properties": { "name": "Not a public stop" }, "geometry": { "type": "Point", "coordinates": [ -122.404647, 37.709526 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Blanken Ave & Nueva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.711189 ] } }
|
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & BAYSHORE BLVD" }, "geometry": { "type": "Point", "coordinates": [ -122.405248, 37.708813 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Blanken Ave & Nueva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397223, 37.711189 ] } }
|
{ "type": "Feature", "properties": { "name": "Blanken Ave & Nueva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397223, 37.711189 ] } }
|
||||||
,
|
,
|
||||||
@@ -894,7 +892,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Balboa St & 40th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.500391, 37.775633 ] } }
|
{ "type": "Feature", "properties": { "name": "Balboa St & 40th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.500391, 37.775633 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fulton St & 40th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.500348, 37.771868 ] } }
|
{ "type": "Feature", "properties": { "name": "Geary Blvd & 39th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.499833, 37.779297 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fulton St & 40th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.500091, 37.771902 ] } }
|
{ "type": "Feature", "properties": { "name": "Fulton St & 40th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.500091, 37.771902 ] } }
|
||||||
,
|
,
|
||||||
@@ -1176,7 +1174,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Noriega St & 23rd Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.480865, 37.753955 ] } }
|
{ "type": "Feature", "properties": { "name": "Noriega St & 23rd Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.480865, 37.753955 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476702, 37.756228 ] } }
|
{ "type": "Feature", "properties": { "name": "22nd Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.479620, 37.754328 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476401, 37.755991 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476401, 37.755991 ] } }
|
||||||
,
|
,
|
||||||
@@ -1788,7 +1786,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Clayton St" }, "geometry": { "type": "Point", "coordinates": [ -122.449150, 37.773598 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Clayton St" }, "geometry": { "type": "Point", "coordinates": [ -122.449150, 37.773598 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Turk St & Masonic Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.447219, 37.778652 ] } }
|
{ "type": "Feature", "properties": { "name": "Turk St & Masonic Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.447133, 37.778551 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Masonic Ave & Golden Gate Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.446918, 37.777533 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Turk St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445416, 37.778754 ] } }
|
{ "type": "Feature", "properties": { "name": "Turk St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445416, 37.778754 ] } }
|
||||||
,
|
,
|
||||||
@@ -1820,8 +1820,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.442842, 37.774277 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.442842, 37.774277 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Divisadero St" }, "geometry": { "type": "Point", "coordinates": [ -122.440696, 37.787946 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Divisadero St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.440310, 37.786996 ] } }
|
{ "type": "Feature", "properties": { "name": "Divisadero St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.440310, 37.786996 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Divisadero St & Bush St" }, "geometry": { "type": "Point", "coordinates": [ -122.440009, 37.786284 ] } }
|
{ "type": "Feature", "properties": { "name": "Divisadero St & Bush St" }, "geometry": { "type": "Point", "coordinates": [ -122.440009, 37.786284 ] } }
|
||||||
@@ -2096,7 +2094,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Grand View Ave & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.440438, 37.755041 ] } }
|
{ "type": "Feature", "properties": { "name": "Grand View Ave & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.440438, 37.755041 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hoffman Ave & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.440867, 37.754023 ] } }
|
{ "type": "Feature", "properties": { "name": "Grand View Ave & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.441125, 37.754057 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "20th St & Eureka St" }, "geometry": { "type": "Point", "coordinates": [ -122.437820, 37.757551 ] } }
|
{ "type": "Feature", "properties": { "name": "20th St & Eureka St" }, "geometry": { "type": "Point", "coordinates": [ -122.437820, 37.757551 ] } }
|
||||||
,
|
,
|
||||||
@@ -2228,7 +2226,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Laguna Honda Blvd & Vasquez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.458162, 37.746015 ] } }
|
{ "type": "Feature", "properties": { "name": "Laguna Honda Blvd & Vasquez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.458162, 37.746015 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Laguna Honda Blvd & Balceta Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.457089, 37.745370 ] } }
|
{ "type": "Feature", "properties": { "name": "Woodside Ave & Balceta Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.456446, 37.746490 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Laguna Honda Blvd & Balceta Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.457175, 37.745302 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Woodside Ave & Hernandez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455330, 37.746388 ] } }
|
{ "type": "Feature", "properties": { "name": "Woodside Ave & Hernandez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455330, 37.746388 ] } }
|
||||||
,
|
,
|
||||||
@@ -2362,7 +2362,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Monterey Blvd & Valdez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455630, 37.731455 ] } }
|
{ "type": "Feature", "properties": { "name": "Monterey Blvd & Valdez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455630, 37.731455 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave & Victoria St" }, "geometry": { "type": "Point", "coordinates": [ -122.464342, 37.726024 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & Victoria St" }, "geometry": { "type": "Point", "coordinates": [ -122.464342, 37.725990 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave & Jules Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.461381, 37.724938 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & Jules Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.461381, 37.724938 ] } }
|
||||||
,
|
,
|
||||||
@@ -2658,9 +2658,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720593 ] } }
|
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720593 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720627 ] } }
|
{ "type": "Feature", "properties": { "name": "CAMERON BEACH YARD" }, "geometry": { "type": "Point", "coordinates": [ -122.446532, 37.720593 ] } }
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446704, 37.720457 ] } }
|
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722732 ] } }
|
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722732 ] } }
|
||||||
,
|
,
|
||||||
@@ -2918,7 +2916,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Columbus Ave & Chestnut St" }, "geometry": { "type": "Point", "coordinates": [ -122.415118, 37.803782 ] } }
|
{ "type": "Feature", "properties": { "name": "Columbus Ave & Chestnut St" }, "geometry": { "type": "Point", "coordinates": [ -122.415118, 37.803782 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Columbus Ave & Taylor St" }, "geometry": { "type": "Point", "coordinates": [ -122.414646, 37.803274 ] } }
|
{ "type": "Feature", "properties": { "name": "COLUMBUS AVE & CHESTNUT ST" }, "geometry": { "type": "Point", "coordinates": [ -122.413960, 37.802833 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Columbus Ave & Lombard St" }, "geometry": { "type": "Point", "coordinates": [ -122.413659, 37.802596 ] } }
|
{ "type": "Feature", "properties": { "name": "Columbus Ave & Lombard St" }, "geometry": { "type": "Point", "coordinates": [ -122.413659, 37.802596 ] } }
|
||||||
,
|
,
|
||||||
@@ -2984,7 +2982,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "California St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.418895, 37.790862 ] } }
|
{ "type": "Feature", "properties": { "name": "California St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.418895, 37.790862 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pine St & Polk St" }, "geometry": { "type": "Point", "coordinates": [ -122.420611, 37.789675 ] } }
|
{ "type": "Feature", "properties": { "name": "Polk St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.420397, 37.789540 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sacramento St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.417436, 37.791982 ] } }
|
{ "type": "Feature", "properties": { "name": "Sacramento St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.417436, 37.791982 ] } }
|
||||||
,
|
,
|
||||||
@@ -3092,7 +3090,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "BROADWAY & GRANT AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.407351, 37.797848 ] } }
|
{ "type": "Feature", "properties": { "name": "BROADWAY & GRANT AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.407351, 37.797848 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Union St & Kearny St" }, "geometry": { "type": "Point", "coordinates": [ -122.406106, 37.800765 ] } }
|
{ "type": "Feature", "properties": { "name": "Union St & Kearny St" }, "geometry": { "type": "Point", "coordinates": [ -122.405977, 37.800900 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Union St & Montgomery St" }, "geometry": { "type": "Point", "coordinates": [ -122.404518, 37.800968 ] } }
|
{ "type": "Feature", "properties": { "name": "Union St & Montgomery St" }, "geometry": { "type": "Point", "coordinates": [ -122.404518, 37.800968 ] } }
|
||||||
,
|
,
|
||||||
@@ -3228,7 +3226,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sansome St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.792015 ] } }
|
{ "type": "Feature", "properties": { "name": "Sansome St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.400870, 37.792015 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bush St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400956, 37.791066 ] } }
|
{ "type": "Feature", "properties": { "name": "Pine St & Battery St" }, "geometry": { "type": "Point", "coordinates": [ -122.400098, 37.792287 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sutter St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400656, 37.790286 ] } }
|
{ "type": "Feature", "properties": { "name": "Sutter St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400656, 37.790286 ] } }
|
||||||
,
|
,
|
||||||
@@ -3492,7 +3490,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Page St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422500, 37.774039 ] } }
|
{ "type": "Feature", "properties": { "name": "Page St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422500, 37.774039 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Haight St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422285, 37.773089 ] } }
|
{ "type": "Feature", "properties": { "name": "Haight St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422543, 37.773191 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Page St & Franklin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420955, 37.774175 ] } }
|
{ "type": "Feature", "properties": { "name": "Page St & Franklin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420955, 37.774175 ] } }
|
||||||
,
|
,
|
||||||
@@ -3518,7 +3516,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "O'Farrell St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417994, 37.785097 ] } }
|
{ "type": "Feature", "properties": { "name": "O'Farrell St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417994, 37.785097 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.416234, 37.787233 ] } }
|
{ "type": "Feature", "properties": { "name": "Geary Blvd & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.416620, 37.786352 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Larkin St & O'Farrell St" }, "geometry": { "type": "Point", "coordinates": [ -122.417779, 37.785063 ] } }
|
{ "type": "Feature", "properties": { "name": "Larkin St & O'Farrell St" }, "geometry": { "type": "Point", "coordinates": [ -122.417779, 37.785063 ] } }
|
||||||
,
|
,
|
||||||
@@ -3590,6 +3588,8 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "McAllister St & Leavenworth St" }, "geometry": { "type": "Point", "coordinates": [ -122.413573, 37.780891 ] } }
|
{ "type": "Feature", "properties": { "name": "McAllister St & Leavenworth St" }, "geometry": { "type": "Point", "coordinates": [ -122.413573, 37.780891 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Mcallister St & 7th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413058, 37.781061 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Market St & 7th St" }, "geometry": { "type": "Point", "coordinates": [ -122.412415, 37.780552 ] } }
|
{ "type": "Feature", "properties": { "name": "Market St & 7th St" }, "geometry": { "type": "Point", "coordinates": [ -122.412415, 37.780552 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Market St & 7th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413187, 37.779806 ] } }
|
{ "type": "Feature", "properties": { "name": "Market St & 7th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413187, 37.779806 ] } }
|
||||||
@@ -3794,7 +3794,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.410784, 37.768103 ] } }
|
{ "type": "Feature", "properties": { "name": "Bryant St & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.410784, 37.768103 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.412972, 37.765524 ] } }
|
{ "type": "Feature", "properties": { "name": "16th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.413273, 37.765389 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.414904, 37.762200 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.414904, 37.762200 ] } }
|
||||||
,
|
,
|
||||||
@@ -3866,7 +3866,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Stockton St & Ellis St" }, "geometry": { "type": "Point", "coordinates": [ -122.406235, 37.785741 ] } }
|
{ "type": "Feature", "properties": { "name": "Stockton St & Ellis St" }, "geometry": { "type": "Point", "coordinates": [ -122.406235, 37.785741 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Market St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.405891, 37.785639 ] } }
|
{ "type": "Feature", "properties": { "name": "Market St & Stockton St" }, "geometry": { "type": "Point", "coordinates": [ -122.405720, 37.785843 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.404518, 37.784351 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & 4th St" }, "geometry": { "type": "Point", "coordinates": [ -122.404518, 37.784351 ] } }
|
||||||
,
|
,
|
||||||
@@ -3968,7 +3968,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Brannan St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.394562, 37.779975 ] } }
|
{ "type": "Feature", "properties": { "name": "Brannan St & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.394562, 37.779975 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Harrison St & 1st St" }, "geometry": { "type": "Point", "coordinates": [ -122.392931, 37.786182 ] } }
|
{ "type": "Feature", "properties": { "name": "3RD ST & BRANNAN ST" }, "geometry": { "type": "Point", "coordinates": [ -122.393489, 37.779568 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Harrison St & Main St" }, "geometry": { "type": "Point", "coordinates": [ -122.390614, 37.788014 ] } }
|
{ "type": "Feature", "properties": { "name": "Harrison St & Main St" }, "geometry": { "type": "Point", "coordinates": [ -122.390614, 37.788014 ] } }
|
||||||
,
|
,
|
||||||
@@ -4050,9 +4050,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Kansas St & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.403617, 37.764812 ] } }
|
{ "type": "Feature", "properties": { "name": "Kansas St & 17th St" }, "geometry": { "type": "Point", "coordinates": [ -122.403617, 37.764812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Rhode Island St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.402802, 37.766169 ] } }
|
{ "type": "Feature", "properties": { "name": "17TH ST & KANSAS ST" }, "geometry": { "type": "Point", "coordinates": [ -122.403445, 37.764812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St& Rhode Island St" }, "geometry": { "type": "Point", "coordinates": [ -122.402587, 37.765999 ] } }
|
{ "type": "Feature", "properties": { "name": "Rhode Island St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.402630, 37.766305 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401643, 37.766067 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401643, 37.766067 ] } }
|
||||||
,
|
,
|
||||||
@@ -4062,18 +4062,16 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Rhode Island St & Mariposa St" }, "geometry": { "type": "Point", "coordinates": [ -122.402501, 37.763251 ] } }
|
{ "type": "Feature", "properties": { "name": "Rhode Island St & Mariposa St" }, "geometry": { "type": "Point", "coordinates": [ -122.402501, 37.763251 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "16th Street & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.399840, 37.766271 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "17th St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.399969, 37.764981 ] } }
|
{ "type": "Feature", "properties": { "name": "17th St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.399969, 37.764981 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "17th St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.399282, 37.764914 ] } }
|
{ "type": "Feature", "properties": { "name": "17th St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.399282, 37.764914 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & Mariposa St" }, "geometry": { "type": "Point", "coordinates": [ -122.401342, 37.763489 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401257, 37.762200 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401257, 37.762200 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407265, 37.761623 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407265, 37.761623 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.409668, 37.759112 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407050, 37.759078 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407050, 37.759078 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Vermont St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.404175, 37.762030 ] } }
|
{ "type": "Feature", "properties": { "name": "Vermont St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.404175, 37.762030 ] } }
|
||||||
@@ -4260,8 +4258,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Church St & Day St" }, "geometry": { "type": "Point", "coordinates": [ -122.426662, 37.742791 ] } }
|
{ "type": "Feature", "properties": { "name": "Church St & Day St" }, "geometry": { "type": "Point", "coordinates": [ -122.426662, 37.742791 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "30th St & Sanchez St" }, "geometry": { "type": "Point", "coordinates": [ -122.428594, 37.742010 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "30th St & Church St" }, "geometry": { "type": "Point", "coordinates": [ -122.426748, 37.742044 ] } }
|
{ "type": "Feature", "properties": { "name": "30th St & Church St" }, "geometry": { "type": "Point", "coordinates": [ -122.426748, 37.742044 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "30th St & Church St" }, "geometry": { "type": "Point", "coordinates": [ -122.426362, 37.742146 ] } }
|
{ "type": "Feature", "properties": { "name": "30th St & Church St" }, "geometry": { "type": "Point", "coordinates": [ -122.426362, 37.742146 ] } }
|
||||||
@@ -4328,7 +4324,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez St. & Valencia St." }, "geometry": { "type": "Point", "coordinates": [ -122.420053, 37.748051 ] } }
|
{ "type": "Feature", "properties": { "name": "Cesar Chavez St. & Valencia St." }, "geometry": { "type": "Point", "coordinates": [ -122.420053, 37.748051 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.418380, 37.748220 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.418165, 37.748560 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mission St & Precita Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419109, 37.746931 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & Precita Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419109, 37.746931 ] } }
|
||||||
,
|
,
|
||||||
@@ -4348,7 +4344,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "26th St & Folsom St" }, "geometry": { "type": "Point", "coordinates": [ -122.413874, 37.749238 ] } }
|
{ "type": "Feature", "properties": { "name": "26th St & Folsom St" }, "geometry": { "type": "Point", "coordinates": [ -122.413874, 37.749238 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "24th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.412028, 37.752699 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413702, 37.749204 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "24th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.411728, 37.752598 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.413788, 37.748492 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.413788, 37.748492 ] } }
|
||||||
,
|
,
|
||||||
@@ -4356,7 +4354,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & Bessie St" }, "geometry": { "type": "Point", "coordinates": [ -122.413616, 37.746863 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & Bessie St" }, "geometry": { "type": "Point", "coordinates": [ -122.413616, 37.746863 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & Stoneman St" }, "geometry": { "type": "Point", "coordinates": [ -122.413359, 37.745302 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & Stoneman St" }, "geometry": { "type": "Point", "coordinates": [ -122.413445, 37.745200 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.411900, 37.748390 ] } }
|
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.411900, 37.748390 ] } }
|
||||||
,
|
,
|
||||||
@@ -4648,7 +4646,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393918, 37.746150 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393918, 37.746150 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pennsylvania Avenue & 25th Street" }, "geometry": { "type": "Point", "coordinates": [ -122.392759, 37.752631 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393832, 37.745981 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Pennsylvania Avenue & 25th Street" }, "geometry": { "type": "Point", "coordinates": [ -122.392759, 37.752462 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & 25th St" }, "geometry": { "type": "Point", "coordinates": [ -122.387867, 37.752530 ] } }
|
{ "type": "Feature", "properties": { "name": "3rd St & 25th St" }, "geometry": { "type": "Point", "coordinates": [ -122.387867, 37.752530 ] } }
|
||||||
,
|
,
|
||||||
@@ -4664,7 +4664,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Phelps St & Oakdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.394090, 37.736852 ] } }
|
{ "type": "Feature", "properties": { "name": "Phelps St & Oakdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.394090, 37.736852 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.390485, 37.744046 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.390528, 37.744250 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Jerrold Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.740890 ] } }
|
{ "type": "Feature", "properties": { "name": "Jerrold Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.740890 ] } }
|
||||||
,
|
,
|
||||||
@@ -4756,8 +4756,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bacon St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.406664, 37.726805 ] } }
|
{ "type": "Feature", "properties": { "name": "Bacon St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.406664, 37.726805 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Dartmouth St" }, "geometry": { "type": "Point", "coordinates": [ -122.409067, 37.719371 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Hamilton St" }, "geometry": { "type": "Point", "coordinates": [ -122.407093, 37.719880 ] } }
|
{ "type": "Feature", "properties": { "name": "Mansell St & Hamilton St" }, "geometry": { "type": "Point", "coordinates": [ -122.407093, 37.719880 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Mansell St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.404346, 37.720763 ] } }
|
{ "type": "Feature", "properties": { "name": "Mansell St & Goettingen St" }, "geometry": { "type": "Point", "coordinates": [ -122.404346, 37.720763 ] } }
|
||||||
@@ -4852,11 +4850,11 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Third Street & Le Conte Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.718828 ] } }
|
{ "type": "Feature", "properties": { "name": "Third Street & Le Conte Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.718828 ] } }
|
||||||
,
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "3rd St & Key St" }, "geometry": { "type": "Point", "coordinates": [ -122.396708, 37.719778 ] } }
|
||||||
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Third Street/Gilman/Paul" }, "geometry": { "type": "Point", "coordinates": [ -122.395635, 37.722392 ] } }
|
{ "type": "Feature", "properties": { "name": "Third Street/Gilman/Paul" }, "geometry": { "type": "Point", "coordinates": [ -122.395635, 37.722392 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Gilman Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.395420, 37.722630 ] } }
|
{ "type": "Feature", "properties": { "name": "Gilman Ave & 3rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.395420, 37.722460 ] } }
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & Gilman Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.395635, 37.722358 ] } }
|
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Jennings St" }, "geometry": { "type": "Point", "coordinates": [ -122.393317, 37.722019 ] } }
|
{ "type": "Feature", "properties": { "name": "Fitzgerald Ave & Jennings St" }, "geometry": { "type": "Point", "coordinates": [ -122.393317, 37.722019 ] } }
|
||||||
,
|
,
|
||||||
@@ -4908,7 +4906,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "EVANS AVE/Opposite US Post Office" }, "geometry": { "type": "Point", "coordinates": [ -122.382803, 37.739702 ] } }
|
{ "type": "Feature", "properties": { "name": "EVANS AVE/Opposite US Post Office" }, "geometry": { "type": "Point", "coordinates": [ -122.382803, 37.739702 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.384133, 37.737598 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.384133, 37.737700 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fairfax Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.381773, 37.738175 ] } }
|
{ "type": "Feature", "properties": { "name": "Fairfax Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.381773, 37.738175 ] } }
|
||||||
,
|
,
|
||||||
@@ -4932,7 +4930,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.385035, 37.733186 ] } }
|
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.385035, 37.733186 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ardath Ct" }, "geometry": { "type": "Point", "coordinates": [ -122.383060, 37.734680 ] } }
|
{ "type": "Feature", "properties": { "name": "Cashmere St & Hudson Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.383533, 37.735732 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.384863, 37.733050 ] } }
|
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.384863, 37.733050 ] } }
|
||||||
,
|
,
|
||||||
@@ -4958,7 +4956,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Whitney Young Cir" }, "geometry": { "type": "Point", "coordinates": [ -122.382116, 37.733356 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Whitney Young Cir" }, "geometry": { "type": "Point", "coordinates": [ -122.382116, 37.733356 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ingalls St & Harbor Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.380013, 37.733458 ] } }
|
{ "type": "Feature", "properties": { "name": "Ingalls St & Harbor Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.379842, 37.733288 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.379885, 37.732507 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.379885, 37.732507 ] } }
|
||||||
,
|
,
|
||||||
@@ -5056,7 +5054,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
{ "type": "Feature", "properties": { "name": "Alemany Blvd & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.442369, 37.717640 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.441168, 37.716520 ] } }
|
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.441082, 37.716723 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.440867, 37.716486 ] } }
|
{ "type": "Feature", "properties": { "name": "Geneva Ave & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.440867, 37.716486 ] } }
|
||||||
,
|
,
|
||||||
@@ -5976,7 +5974,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "23rd Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.480865, 37.754141 ] } }
|
{ "type": "Feature", "properties": { "name": "23rd Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.480865, 37.754141 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476680, 37.756211 ] } }
|
{ "type": "Feature", "properties": { "name": "22nd Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.479599, 37.754328 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476423, 37.755991 ] } }
|
{ "type": "Feature", "properties": { "name": "19th Ave & Moraga St" }, "geometry": { "type": "Point", "coordinates": [ -122.476423, 37.755991 ] } }
|
||||||
,
|
,
|
||||||
@@ -6776,7 +6774,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hayes St & Clayton St" }, "geometry": { "type": "Point", "coordinates": [ -122.449450, 37.773412 ] } }
|
{ "type": "Feature", "properties": { "name": "Hayes St & Clayton St" }, "geometry": { "type": "Point", "coordinates": [ -122.449450, 37.773412 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Turk St & Masonic Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.447197, 37.778652 ] } }
|
{ "type": "Feature", "properties": { "name": "Masonic Ave & Turk St" }, "geometry": { "type": "Point", "coordinates": [ -122.447155, 37.778754 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Masonic Ave & Turk St" }, "geometry": { "type": "Point", "coordinates": [ -122.447004, 37.778771 ] } }
|
{ "type": "Feature", "properties": { "name": "Masonic Ave & Turk St" }, "geometry": { "type": "Point", "coordinates": [ -122.447004, 37.778771 ] } }
|
||||||
,
|
,
|
||||||
@@ -7174,7 +7172,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Grand View Ave & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.440417, 37.755041 ] } }
|
{ "type": "Feature", "properties": { "name": "Grand View Ave & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.440417, 37.755041 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hoffman Ave & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.440889, 37.754006 ] } }
|
{ "type": "Feature", "properties": { "name": "Grand View Ave & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.441146, 37.754040 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "20th St & Eureka St" }, "geometry": { "type": "Point", "coordinates": [ -122.437842, 37.757551 ] } }
|
{ "type": "Feature", "properties": { "name": "20th St & Eureka St" }, "geometry": { "type": "Point", "coordinates": [ -122.437842, 37.757551 ] } }
|
||||||
,
|
,
|
||||||
@@ -7524,7 +7522,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Monterey Blvd & Valdez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455652, 37.731438 ] } }
|
{ "type": "Feature", "properties": { "name": "Monterey Blvd & Valdez Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.455652, 37.731438 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave & Victoria St" }, "geometry": { "type": "Point", "coordinates": [ -122.464342, 37.726024 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & Victoria St" }, "geometry": { "type": "Point", "coordinates": [ -122.464364, 37.725973 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ocean Ave & Fairfield Way" }, "geometry": { "type": "Point", "coordinates": [ -122.464063, 37.726007 ] } }
|
{ "type": "Feature", "properties": { "name": "Ocean Ave & Fairfield Way" }, "geometry": { "type": "Point", "coordinates": [ -122.464063, 37.726007 ] } }
|
||||||
,
|
,
|
||||||
@@ -7914,9 +7912,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720610 ] } }
|
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446575, 37.720610 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SAN JOSE AVE & GENEVA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.446554, 37.720610 ] } }
|
{ "type": "Feature", "properties": { "name": "CAMERON BEACH YARD" }, "geometry": { "type": "Point", "coordinates": [ -122.446532, 37.720610 ] } }
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "San Jose Ave & Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.446682, 37.720457 ] } }
|
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722749 ] } }
|
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445030, 37.722749 ] } }
|
||||||
,
|
,
|
||||||
@@ -8566,7 +8562,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428186, 37.711868 ] } }
|
{ "type": "Feature", "properties": { "name": "1650 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.428186, 37.711868 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "1721 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426255, 37.711071 ] } }
|
{ "type": "Feature", "properties": { "name": "1701 Geneva Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.426770, 37.711105 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "MANSELL ST & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.425675, 37.718285 ] } }
|
{ "type": "Feature", "properties": { "name": "MANSELL ST & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.425675, 37.718285 ] } }
|
||||||
,
|
,
|
||||||
@@ -8600,7 +8596,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.419088, 37.712598 ] } }
|
{ "type": "Feature", "properties": { "name": "SUNNYDALE AVE & PERSIA AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.419088, 37.712598 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Santos St & Velasco Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.419431, 37.710018 ] } }
|
{ "type": "Feature", "properties": { "name": "Sunnydale Ave & Santos St" }, "geometry": { "type": "Point", "coordinates": [ -122.418165, 37.712412 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Santos St & Brookdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.418680, 37.711852 ] } }
|
{ "type": "Feature", "properties": { "name": "Santos St & Brookdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.418680, 37.711852 ] } }
|
||||||
,
|
,
|
||||||
@@ -9068,7 +9064,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Page St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422521, 37.774022 ] } }
|
{ "type": "Feature", "properties": { "name": "Page St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422521, 37.774022 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Haight St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422285, 37.773072 ] } }
|
{ "type": "Feature", "properties": { "name": "Haight St & Gough St" }, "geometry": { "type": "Point", "coordinates": [ -122.422543, 37.773174 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Page St & Franklin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420955, 37.774192 ] } }
|
{ "type": "Feature", "properties": { "name": "Page St & Franklin St" }, "geometry": { "type": "Point", "coordinates": [ -122.420955, 37.774192 ] } }
|
||||||
,
|
,
|
||||||
@@ -9100,7 +9096,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417715, 37.787047 ] } }
|
{ "type": "Feature", "properties": { "name": "Post St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417715, 37.787047 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.416255, 37.787233 ] } }
|
{ "type": "Feature", "properties": { "name": "Geary Blvd & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.416599, 37.786352 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Larkin St & O'Farrell St" }, "geometry": { "type": "Point", "coordinates": [ -122.417779, 37.785080 ] } }
|
{ "type": "Feature", "properties": { "name": "Larkin St & O'Farrell St" }, "geometry": { "type": "Point", "coordinates": [ -122.417779, 37.785080 ] } }
|
||||||
,
|
,
|
||||||
@@ -9468,7 +9464,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.410805, 37.768103 ] } }
|
{ "type": "Feature", "properties": { "name": "Bryant St & Alameda St" }, "geometry": { "type": "Point", "coordinates": [ -122.410805, 37.768103 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.412972, 37.765524 ] } }
|
{ "type": "Feature", "properties": { "name": "16th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.413294, 37.765372 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.414904, 37.762216 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.414904, 37.762216 ] } }
|
||||||
,
|
,
|
||||||
@@ -9824,9 +9820,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "17th St & Kansas St" }, "geometry": { "type": "Point", "coordinates": [ -122.403467, 37.764812 ] } }
|
{ "type": "Feature", "properties": { "name": "17th St & Kansas St" }, "geometry": { "type": "Point", "coordinates": [ -122.403467, 37.764812 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Rhode Island St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.402802, 37.766152 ] } }
|
{ "type": "Feature", "properties": { "name": "Rhode Island St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.402630, 37.766322 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "16th Street & Rhode Islandi St" }, "geometry": { "type": "Point", "coordinates": [ -122.402630, 37.766118 ] } }
|
{ "type": "Feature", "properties": { "name": "16th St& Rhode Island St" }, "geometry": { "type": "Point", "coordinates": [ -122.402587, 37.765999 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "De Haro St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401621, 37.766050 ] } }
|
{ "type": "Feature", "properties": { "name": "De Haro St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.401621, 37.766050 ] } }
|
||||||
,
|
,
|
||||||
@@ -9850,7 +9846,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407286, 37.761640 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407286, 37.761640 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bryant St & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.409647, 37.759112 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 18th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407050, 37.761843 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Potrero Ave & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407050, 37.759078 ] } }
|
{ "type": "Feature", "properties": { "name": "Potrero Ave & 20th St" }, "geometry": { "type": "Point", "coordinates": [ -122.407050, 37.759078 ] } }
|
||||||
,
|
,
|
||||||
@@ -10184,7 +10180,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez & Bartlett" }, "geometry": { "type": "Point", "coordinates": [ -122.419024, 37.748203 ] } }
|
{ "type": "Feature", "properties": { "name": "Cesar Chavez & Bartlett" }, "geometry": { "type": "Point", "coordinates": [ -122.419024, 37.748203 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.418358, 37.748237 ] } }
|
{ "type": "Feature", "properties": { "name": "Mission St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.418165, 37.748560 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.418079, 37.748101 ] } }
|
{ "type": "Feature", "properties": { "name": "Cesar Chavez St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.418079, 37.748101 ] } }
|
||||||
,
|
,
|
||||||
@@ -10210,7 +10206,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "26th St & Folsom St" }, "geometry": { "type": "Point", "coordinates": [ -122.413874, 37.749221 ] } }
|
{ "type": "Feature", "properties": { "name": "26th St & Folsom St" }, "geometry": { "type": "Point", "coordinates": [ -122.413874, 37.749221 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "24th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.412050, 37.752682 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & 26th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413702, 37.749221 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "24th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.411728, 37.752581 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Folsom St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.413788, 37.748475 ] } }
|
{ "type": "Feature", "properties": { "name": "Folsom St & Cesar Chavez St" }, "geometry": { "type": "Point", "coordinates": [ -122.413788, 37.748475 ] } }
|
||||||
,
|
,
|
||||||
@@ -10598,7 +10596,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393918, 37.746167 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393918, 37.746167 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Pennsylvania Avenue & 25th Street" }, "geometry": { "type": "Point", "coordinates": [ -122.392759, 37.752614 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Selby St" }, "geometry": { "type": "Point", "coordinates": [ -122.393832, 37.745964 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Pennsylvania Avenue & 25th Street" }, "geometry": { "type": "Point", "coordinates": [ -122.392759, 37.752462 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "3rd St & 25th St" }, "geometry": { "type": "Point", "coordinates": [ -122.387846, 37.752547 ] } }
|
{ "type": "Feature", "properties": { "name": "3rd St & 25th St" }, "geometry": { "type": "Point", "coordinates": [ -122.387846, 37.752547 ] } }
|
||||||
,
|
,
|
||||||
@@ -10624,7 +10624,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Palou Ave & Phelps St" }, "geometry": { "type": "Point", "coordinates": [ -122.394540, 37.736088 ] } }
|
{ "type": "Feature", "properties": { "name": "Palou Ave & Phelps St" }, "geometry": { "type": "Point", "coordinates": [ -122.394540, 37.736088 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Evans Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.390463, 37.744029 ] } }
|
{ "type": "Feature", "properties": { "name": "Evans Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.390528, 37.744233 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Jerrold Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.740890 ] } }
|
{ "type": "Feature", "properties": { "name": "Jerrold Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.392974, 37.740890 ] } }
|
||||||
,
|
,
|
||||||
@@ -10942,7 +10942,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "EVANS AVE/Opposite US Post Office" }, "geometry": { "type": "Point", "coordinates": [ -122.382803, 37.739719 ] } }
|
{ "type": "Feature", "properties": { "name": "EVANS AVE/Opposite US Post Office" }, "geometry": { "type": "Point", "coordinates": [ -122.382803, 37.739719 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.384155, 37.737581 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.384112, 37.737700 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Fairfax Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.381794, 37.738158 ] } }
|
{ "type": "Feature", "properties": { "name": "Fairfax Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.381794, 37.738158 ] } }
|
||||||
,
|
,
|
||||||
@@ -10972,8 +10972,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Cashmere St" }, "geometry": { "type": "Point", "coordinates": [ -122.383533, 37.735952 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Cashmere St" }, "geometry": { "type": "Point", "coordinates": [ -122.383533, 37.735952 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ardath Ct" }, "geometry": { "type": "Point", "coordinates": [ -122.383039, 37.734680 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.384863, 37.733033 ] } }
|
{ "type": "Feature", "properties": { "name": "Newcomb Ave & La Salle Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.384863, 37.733033 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Whitney Young Cir & Progress St" }, "geometry": { "type": "Point", "coordinates": [ -122.383318, 37.733339 ] } }
|
{ "type": "Feature", "properties": { "name": "Whitney Young Cir & Progress St" }, "geometry": { "type": "Point", "coordinates": [ -122.383318, 37.733339 ] } }
|
||||||
@@ -11002,7 +11000,9 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Whitney Young Cir" }, "geometry": { "type": "Point", "coordinates": [ -122.382116, 37.733356 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Whitney Young Cir" }, "geometry": { "type": "Point", "coordinates": [ -122.382116, 37.733356 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Ingalls St & Harbor Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.380013, 37.733458 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Whitney Young Cir" }, "geometry": { "type": "Point", "coordinates": [ -122.381837, 37.733322 ] } }
|
||||||
|
,
|
||||||
|
{ "type": "Feature", "properties": { "name": "Ingalls St & Harbor Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.379842, 37.733288 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.379906, 37.732490 ] } }
|
{ "type": "Feature", "properties": { "name": "Hudson Ave & Ingalls St" }, "geometry": { "type": "Point", "coordinates": [ -122.379906, 37.732490 ] } }
|
||||||
,
|
,
|
||||||
@@ -11384,7 +11384,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Columbus Ave & Chestnut St" }, "geometry": { "type": "Point", "coordinates": [ -122.415140, 37.803782 ] } }
|
{ "type": "Feature", "properties": { "name": "Columbus Ave & Chestnut St" }, "geometry": { "type": "Point", "coordinates": [ -122.415140, 37.803782 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Columbus Ave & Chestnut St" }, "geometry": { "type": "Point", "coordinates": [ -122.414582, 37.803409 ] } }
|
{ "type": "Feature", "properties": { "name": "Columbus Ave & Taylor St" }, "geometry": { "type": "Point", "coordinates": [ -122.414646, 37.803274 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "COLUMBUS AVE & CHESTNUT ST" }, "geometry": { "type": "Point", "coordinates": [ -122.413981, 37.802833 ] } }
|
{ "type": "Feature", "properties": { "name": "COLUMBUS AVE & CHESTNUT ST" }, "geometry": { "type": "Point", "coordinates": [ -122.413981, 37.802833 ] } }
|
||||||
,
|
,
|
||||||
@@ -11788,7 +11788,7 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sansome St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.400849, 37.792015 ] } }
|
{ "type": "Feature", "properties": { "name": "Sansome St & Pine St" }, "geometry": { "type": "Point", "coordinates": [ -122.400849, 37.792015 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Bush St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400935, 37.791066 ] } }
|
{ "type": "Feature", "properties": { "name": "Pine St & Battery St" }, "geometry": { "type": "Point", "coordinates": [ -122.400076, 37.792287 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Sutter St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400677, 37.790286 ] } }
|
{ "type": "Feature", "properties": { "name": "Sutter St & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.400677, 37.790286 ] } }
|
||||||
,
|
,
|
||||||
@@ -12040,8 +12040,6 @@
|
|||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417715, 37.787047 ] } }
|
{ "type": "Feature", "properties": { "name": "Post St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.417715, 37.787047 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Hyde St" }, "geometry": { "type": "Point", "coordinates": [ -122.416255, 37.787233 ] } }
|
|
||||||
,
|
|
||||||
{ "type": "Feature", "properties": { "name": "Leavenworth St & Post St" }, "geometry": { "type": "Point", "coordinates": [ -122.414882, 37.787352 ] } }
|
{ "type": "Feature", "properties": { "name": "Leavenworth St & Post St" }, "geometry": { "type": "Point", "coordinates": [ -122.414882, 37.787352 ] } }
|
||||||
,
|
,
|
||||||
{ "type": "Feature", "properties": { "name": "Post St & Leavenworth St" }, "geometry": { "type": "Point", "coordinates": [ -122.414582, 37.787454 ] } }
|
{ "type": "Feature", "properties": { "name": "Post St & Leavenworth St" }, "geometry": { "type": "Point", "coordinates": [ -122.414582, 37.787454 ] } }
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
"minzoom": "0",
|
"minzoom": "0",
|
||||||
"name": "tests/ne_110m_populated_places/out/--smallest-maximum-zoom-guess_2_-Bf20_-rf20_-pb.json.check.mbtiles",
|
"name": "tests/ne_110m_populated_places/out/--smallest-maximum-zoom-guess_2_-Bf20_-rf20_-pb.json.check.mbtiles",
|
||||||
"strategies": "[{\"dropped_by_rate\":237},{\"dropped_by_rate\":229},{}]",
|
"strategies": "[{\"dropped_by_rate\":237},{\"dropped_by_rate\":229},{}]",
|
||||||
"tippecanoe_decisions": "{\"basezoom\":2,\"droprate\":6.599999999999999,\"retain_points_multiplier\":1}",
|
"tippecanoe_decisions": "{\"basezoom\":2,\"droprate\":6.6,\"retain_points_multiplier\":1}",
|
||||||
"type": "overlay",
|
"type": "overlay",
|
||||||
"version": "2"
|
"version": "2"
|
||||||
}, "features": [
|
}, "features": [
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"minzoom": "0",
|
"minzoom": "0",
|
||||||
"name": "tests/ne_110m_populated_places/out/--smallest-maximum-zoom-guess_3_-rp.json.check.mbtiles",
|
"name": "tests/ne_110m_populated_places/out/--smallest-maximum-zoom-guess_3_-rp.json.check.mbtiles",
|
||||||
"strategies": "[{\"dropped_by_rate\":230},{\"dropped_by_rate\":231},{\"dropped_by_rate\":160},{}]",
|
"strategies": "[{\"dropped_by_rate\":230},{\"dropped_by_rate\":231},{\"dropped_by_rate\":160},{}]",
|
||||||
"tippecanoe_decisions": "{\"basezoom\":3,\"droprate\":2.6582825467008166,\"retain_points_multiplier\":1}",
|
"tippecanoe_decisions": "{\"basezoom\":3,\"droprate\":2.65828,\"retain_points_multiplier\":1}",
|
||||||
"type": "overlay",
|
"type": "overlay",
|
||||||
"version": "2"
|
"version": "2"
|
||||||
}, "features": [
|
}, "features": [
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17212", "USER_OWNER": "CITY VINTNERS SAN FRANCISCO WINERY LLC", "USER_OPERA": null, "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "City Vintners San Francisco Winery Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21516", "USER_OWNER": "WEBSTER GRANGER MARQUEZ", "USER_OPERA": "PEDRO GOMEZ INDUSTRIES", "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": null, "Owner_cln": "Webster Granger Marquez", "Oper_cln": "Pedro Gomez Industries" }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21912", "USER_OWNER": "PHILIP C. BOWERS", "USER_OPERA": "CB WINE CELLARS", "USER_STREE": "1225 MINNESOTA ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": null, "Owner_cln": "Philip C. Bowers", "Oper_cln": "Cb Wine Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.389455, 37.75494 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21396", "USER_OWNER": "KYLE ROEMER AND SAMANTHA ROEMER", "USER_OPERA": "NICHOLAS & RAE WINERY", "USER_STREE": "2455 THIRD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": null, "Owner_cln": "Kyle Roemer And Samantha Roemer", "Oper_cln": "Nicholas & Rae Winery" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21066", "USER_OWNER": "THE SAN FRANCISCO MEAD COMPANY, LLC", "USER_OPERA": "THE SAN FRANCISCO MEADERY", "USER_STREE": "1180 SHAFTER AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "USA", "Owner_cln": "The San Francisco Mead Company, Llc", "Oper_cln": "The San Francisco Meadery" }, "geometry": { "type": "Point", "coordinates": [ -122.382693, 37.726785 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23922", "USER_OWNER": "OTTAVINO WINES LLC", "USER_OPERA": null, "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": null, "Owner_cln": "Ottavino Wines Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21933", "USER_OWNER": "PHILIP CUADRA", "USER_OPERA": "HIGHLAWN WINE COMPANY", "USER_STREE": "540 BARNEVELD AVE STE K & L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": null, "Owner_cln": "Philip Cuadra", "Oper_cln": "Highlawn Wine Company" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22828", "USER_OWNER": "SURFACE AREA, LLC", "USER_OPERA": "WOODS BEER CO.", "USER_STREE": "422 CLIPPER COVE WAY", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": null, "Owner_cln": "Surface Area, Llc", "Oper_cln": "Woods Beer Co." }, "geometry": { "type": "Point", "coordinates": [ -122.3698481, 37.8168703 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17266", "USER_OWNER": "DAN BALDWIN", "USER_OPERA": "THE SAN FRANCISCO BAY WINERY", "USER_STREE": "2029 RESEARCH DR", "USER_CITY": "LIVERMORE", "USER_STATE": "CA", "USER_ZIP": 94550, "USER_COUNT": "ALAMEDA", "Owner_cln": "Dan Baldwin", "Oper_cln": "The San Francisco Bay Winery" }, "geometry": { "type": "Point", "coordinates": [ -121.721474, 37.679387 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "NM-W-21035", "USER_OWNER": "DH WINERY - 139 WSF, LLC", "USER_OPERA": null, "USER_STREE": "139 W SAN FRANCISCO ST", "USER_CITY": "SANTA FE", "USER_STATE": "NM", "USER_ZIP": 87501, "USER_COUNT": "SANTA FE", "Owner_cln": "Dh Winery - 139 Wsf, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -105.940259, 35.687807 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23988", "USER_OWNER": "47 HILLS BREWING COMPANY, LLC", "USER_OPERA": "47 HILLS BREWING COMPANY", "USER_STREE": "137 S LINDEN AVE", "USER_CITY": "SOUTH SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94080, "USER_COUNT": "SAN MATEO", "Owner_cln": "47 Hills Brewing Company, Llc", "Oper_cln": "47 Hills Brewing Company" }, "geometry": { "type": "Point", "coordinates": [ -122.413615, 37.644257 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17487", "USER_OWNER": "WAIT CELLARS, LLC", "USER_OPERA": "WAIT CELLARS", "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Wait Cellars, Llc", "Oper_cln": "Wait Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17398", "USER_OWNER": "MICHAEL JAMES WINES, INC.", "USER_OPERA": "MICHAEL JAMES WINES", "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Michael James Wines, Inc.", "Oper_cln": "Michael James Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17354", "USER_OWNER": "PUG WINE, LLC", "USER_OPERA": "PUG WINE", "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Pug Wine, Llc", "Oper_cln": "Pug Wine" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21880", "USER_OWNER": "SMASHING GRAPES, LLC", "USER_OPERA": "TIMARK WINES", "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Smashing Grapes, Llc", "Oper_cln": "Timark Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-24229", "USER_OWNER": "WILLIAM LANE WINE COMPANY LLC", "USER_OPERA": "WILLIAM LANE WINE COMPANY", "USER_STREE": "995 9TH ST BLDG 201\/RM 104", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94103, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "William Lane Wine Company Llc", "Oper_cln": "William Lane Wine Company" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22659", "USER_OWNER": "HACKBERRY HILL CELLARS, LLC", "USER_OPERA": null, "USER_STREE": "2455 THIRD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Hackberry Hill Cellars, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17377", "USER_OWNER": "ALCHEMIST CELLARS LLC", "USER_OPERA": "ALCHEMIST CELLARS", "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Alchemist Cellars Llc", "Oper_cln": "Alchemist Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21270", "USER_OWNER": "HARDBALL CELLARS INC.", "USER_OPERA": "HARDBALL CELLARS", "USER_STREE": "2455 THIRD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Hardball Cellars Inc.", "Oper_cln": "Hardball Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17609", "USER_OWNER": "SEAMUS WINES, LLC", "USER_OPERA": "SEAMUS WINES", "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Seamus Wines, Llc", "Oper_cln": "Seamus Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21743", "USER_OWNER": "FORTUNATUS, LLC", "USER_OPERA": "BRAVIUM", "USER_STREE": "1225 MINNESOTA ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Fortunatus, Llc", "Oper_cln": "Bravium" }, "geometry": { "type": "Point", "coordinates": [ -122.389455, 37.75494 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21846", "USER_OWNER": "COSENZA CELLARS LLC", "USER_OPERA": null, "USER_STREE": "5361 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Cosenza Cellars Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.3961401, 37.777432 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21120", "USER_OWNER": "VOLEURS DE VIN, LLC", "USER_OPERA": "VOLEURS DE VIN", "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Voleurs De Vin, Llc", "Oper_cln": "Voleurs De Vin" }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17719", "USER_OWNER": "CHRISTOPHER VON HOLT AND PAMELA VON HOLT", "USER_OPERA": "VON HOLT WINES", "USER_STREE": "1225 MINNESOTA ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Christopher Von Holt And Pamela Von Holt", "Oper_cln": "Von Holt Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.389455, 37.75494 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17212", "USER_OWNER": "CITY VINTNERS SAN FRANCISCO WINERY LLC", "USER_OPERA": null, "USER_STREE": "53 BLUXOME ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "City Vintners San Francisco Winery Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.396824, 37.776482 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17424", "USER_OWNER": "FURTHERMORE, LLC", "USER_OPERA": "FURTHERMORE PINOT NOIR", "USER_STREE": "1225 MINNESOTA ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Furthermore, Llc", "Oper_cln": "Furthermore Pinot Noir" }, "geometry": { "type": "Point", "coordinates": [ -122.389455, 37.75494 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21023", "USER_OWNER": "ARAN O. HEALY AND DAVID G. GREGA", "USER_OPERA": "CARLOTTA CELLARS", "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Aran O. Healy And David G. Grega", "Oper_cln": "Carlotta Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21253", "USER_OWNER": "WINEDOCTORS, LLC", "USER_OPERA": null, "USER_STREE": "2455 3RD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Winedoctors, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21217", "USER_OWNER": "LOOS FAMILY WINERY, LLC", "USER_OPERA": null, "USER_STREE": "2455 THIRD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Loos Family Winery, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-15734", "USER_OWNER": "CARL E. & SHARON H. SUTTON", "USER_OPERA": "SUTTON CELLARS", "USER_STREE": "601 22ND ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Carl E. & Sharon H. Sutton", "Oper_cln": "Sutton Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.387697, 37.757076 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17319", "USER_OWNER": "ERISTAVI WINERY LLC", "USER_OPERA": null, "USER_STREE": "1300 POTRERO AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94110, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Eristavi Winery Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.40646, 37.751125 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23518", "USER_OWNER": "BAREBOTTLE BREWING COMPANY, INC.", "USER_OPERA": "BAREBOTTLE BREWING COMPANY", "USER_STREE": "1525 CORTLAND AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94110, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Barebottle Brewing Company, Inc.", "Oper_cln": "Barebottle Brewing Company" }, "geometry": { "type": "Point", "coordinates": [ -122.409057, 37.740083 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23463", "USER_OWNER": "LES AMERICAINES LLC", "USER_OPERA": "CLAIRE HILL WINES", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Les Americaines Llc", "Oper_cln": "Claire Hill Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22655", "USER_OWNER": "BRAZEN VENTURES LLC", "USER_OPERA": "BRAZEN VENTURES", "USER_STREE": "2455 THIRD ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94107, "USER_COUNT": "SAN FRANCISO", "Owner_cln": "Brazen Ventures Llc", "Oper_cln": "Brazen Ventures" }, "geometry": { "type": "Point", "coordinates": [ -122.387918, 37.759243 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21050", "USER_OWNER": "TANK WINES LLC", "USER_OPERA": "TANK WINES", "USER_STREE": "18 DORE ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94117, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Tank Wines Llc", "Oper_cln": "Tank Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.413548, 37.774095 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17327", "USER_OWNER": "WAITS-MAST FAMILY CELLARS, LLC", "USER_OPERA": null, "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Waits-mast Family Cellars, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22193", "USER_OWNER": "URBAN CELLARS LLC", "USER_OPERA": "URBAN CELLARS", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Urban Cellars Llc", "Oper_cln": "Urban Cellars" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22454", "USER_OWNER": "ESS EFF WINES, LLC", "USER_OPERA": "ESS EFF WINES", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCCO", "Owner_cln": "Ess Eff Wines, Llc", "Oper_cln": "Ess Eff Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-3592", "USER_OWNER": "AUGUST WEST WINES, LLC", "USER_OPERA": "AUGUST WEST", "USER_STREE": "540 BARNEVELD AVE SUITES K A", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "August West Wines, Llc", "Oper_cln": "August West" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23055", "USER_OWNER": "MANSFIELD-DUNNE WINES, LLC", "USER_OPERA": null, "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Mansfield-dunne Wines, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-15425", "USER_OWNER": "BARBARA J. GRATTA", "USER_OPERA": "GRATTA WINES", "USER_STREE": "1469 HUDSON AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Barbara J. Gratta", "Oper_cln": "Gratta Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.385892, 37.738472 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-15292", "USER_OWNER": "BRYAN RULISON HARRINGTON", "USER_OPERA": "HARRINGTON WINES", "USER_STREE": "1559 CUSTER AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Bryan Rulison Harrington", "Oper_cln": "Harrington Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.390741, 37.745662 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22247", "USER_OWNER": "CJM WINE GROUP LLC", "USER_OPERA": "FALLON PLACE WINES", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Cjm Wine Group Llc", "Oper_cln": "Fallon Place Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21774", "USER_OWNER": "HERSLY WINES LLC", "USER_OPERA": "HERSLY WINES", "USER_STREE": "540 BARNEVELD AVE STE K, L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Hersly Wines Llc", "Oper_cln": "Hersly Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22069", "USER_OWNER": "RUSSE WINE PARTNERS, LLC", "USER_OPERA": "MONTAGNE RUSSE", "USER_STREE": "540 BARNEVELD AVE STE K & L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Russe Wine Partners, Llc", "Oper_cln": "Montagne Russe" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22595", "USER_OWNER": "JOHN DAVID LOUIS BRY", "USER_OPERA": "PERFUSION VINEYARD", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "John David Louis Bry", "Oper_cln": "Perfusion Vineyard" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-24254", "USER_OWNER": "DEMEO VINEYARDS INC.", "USER_OPERA": "DEMEO VINEYARDS", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Demeo Vineyards Inc.", "Oper_cln": "Demeo Vineyards" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17490", "USER_OWNER": "33RD STREET CELLARS, LLC", "USER_OPERA": "CELLARS 33", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "33rd Street Cellars, Llc", "Oper_cln": "Cellars 33" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21765", "USER_OWNER": "MAGIC BAG MEADERY LLC", "USER_OPERA": "MAGIC BAG MEADERY", "USER_STREE": "1180 SHAFTER AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Magic Bag Meadery Llc", "Oper_cln": "Magic Bag Meadery" }, "geometry": { "type": "Point", "coordinates": [ -122.382693, 37.726785 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21705", "USER_OWNER": "CATHERINE COCHRANE, COURTNEY COCHRANE, AND SEAN COCHRANE", "USER_OPERA": "RYAN COCHRANE WINES", "USER_STREE": "540 BARNEVELD AVE STE K & L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Catherine Cochrane, Courtney Cochrane, And Sean Cochrane", "Oper_cln": "Ryan Cochrane Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-24286", "USER_OWNER": "OUROBOROS WINES LLC", "USER_OPERA": "OUROBOROS WINES", "USER_STREE": "495 BARNEVELD AVE", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Ouroboros Wines Llc", "Oper_cln": "Ouroboros Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.403411, 37.740376 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21034", "USER_OWNER": "EDWARD S. KURTZMAN", "USER_OPERA": "SANDLER WINE COMPANY", "USER_STREE": "540 BARNEVELD AVE STE K AND L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Edward S. Kurtzman", "Oper_cln": "Sandler Wine Company" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-22040", "USER_OWNER": "THEOPOLIS ENTERPRISES, LLC", "USER_OPERA": "THEOPOLIS VINEYARDS", "USER_STREE": "540 BARNEVELD AVE STE K & L", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94124, "USER_COUNT": "SAN FRANCISCO COUNTY", "Owner_cln": "Theopolis Enterprises, Llc", "Oper_cln": "Theopolis Vineyards" }, "geometry": { "type": "Point", "coordinates": [ -122.404604, 37.74056 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-16651", "USER_OWNER": "PB WINES, INC.", "USER_OPERA": null, "USER_STREE": "1080 AVENUE M UNIT C", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Pb Wines, Inc.", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.368843, 37.829147 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17548", "USER_OWNER": "HDC WINE COMPANY LLC", "USER_OPERA": "HDC WINE COMPANY", "USER_STREE": "995 9TH ST BLDG 201,", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Hdc Wine Company Llc", "Oper_cln": "Hdc Wine Company" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-15779", "USER_OWNER": "KENDRIC VINEYARDS, LLC", "USER_OPERA": "KENDRIC VINEYARDS", "USER_STREE": "401 13TH ST BUILDING 3", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Kendric Vineyards, Llc", "Oper_cln": "Kendric Vineyards" }, "geometry": { "type": "Point", "coordinates": [ -122.3738416, 37.8276279 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-15973", "USER_OWNER": "SOL ROUGE LLC", "USER_OPERA": "SOL ROUGE", "USER_STREE": "200 CALIFORNIA AVE BLDG 180 N", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Sol Rouge Llc", "Oper_cln": "Sol Rouge" }, "geometry": { "type": "Point", "coordinates": [ -122.3692839, 37.8185833 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-24253", "USER_OWNER": "MAYEAUX GRAPE CLINIC LLC", "USER_OPERA": "STAGIAIRE WINE", "USER_STREE": "995 9TH ST BLDG 201 RM 104", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Mayeaux Grape Clinic Llc", "Oper_cln": "Stagiaire Wine" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21125", "USER_OWNER": "PASSAGGIO WINES LLC", "USER_OPERA": "PASSAGGIO WINES", "USER_STREE": "995 9TH ST BLDG 201", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Passaggio Wines Llc", "Oper_cln": "Passaggio Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17549", "USER_OWNER": "MORGAN FAMILY WINES LLC", "USER_OPERA": "MORGAN FAMILY WINES", "USER_STREE": "995 9TH ST BLDG 201,", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Morgan Family Wines Llc", "Oper_cln": "Morgan Family Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17516", "USER_OWNER": "CASA NO COMPRENDE, INC.", "USER_OPERA": "TREASURE ISLAND WINES", "USER_STREE": "995 NINTH", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Casa No Comprende, Inc.", "Oper_cln": "Treasure Island Wines" }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-16641", "USER_OWNER": "YERBA BUENA BEVERAGE, LLC", "USER_OPERA": "TREASURE ISLAND BRANDS", "USER_STREE": "750 6TH ST", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Yerba Buena Beverage, Llc", "Oper_cln": "Treasure Island Brands" }, "geometry": { "type": "Point", "coordinates": [ -122.3671488, 37.8243095 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-24193", "USER_OWNER": "DE VIN, LLC", "USER_OPERA": null, "USER_STREE": "995 9TH ST BLDG 201 RM 104", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "De Vin, Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-23993", "USER_OWNER": "JUST ENOUGH WINES LLC", "USER_OPERA": null, "USER_STREE": "995 9TH ST UNIT 201 RM104", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 94130, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Just Enough Wines Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.3689769, 37.8257667 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17110", "USER_OWNER": "FORTUNATUS, LLC", "USER_OPERA": "BRAVIUM", "USER_STREE": "16370 DYERVILLE LOOP RD BLDG 201,", "USER_CITY": "MYERS FLAT", "USER_STATE": "CA", "USER_ZIP": 95554, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Fortunatus, Llc", "Oper_cln": "Bravium" }, "geometry": { "type": "Point", "coordinates": [ -123.7657329, 40.2465359 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-21971", "USER_OWNER": "SEVEN HILL LLC", "USER_OPERA": null, "USER_STREE": "28740 INWOOD RD", "USER_CITY": "SHINGLETOWN", "USER_STATE": "CA", "USER_ZIP": 96088, "USER_COUNT": "SAN FRANCISCO", "Owner_cln": "Seven Hill Llc", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -121.982482, 40.511239 ] } }
|
||||||
|
{ "type": "Feature", "properties": { "USER_PERMI": "CA-W-17255", "USER_OWNER": "MORNINGWOOD VINEYARDS AND WINERY, INC.", "USER_OPERA": null, "USER_STREE": "NOT PROVIDED", "USER_CITY": "SAN FRANCISCO", "USER_STATE": "CA", "USER_ZIP": 0, "USER_COUNT": "Geocoded_city_Center", "Owner_cln": "Morningwood Vineyards And Winery, Inc.", "Oper_cln": null }, "geometry": { "type": "Point", "coordinates": [ -122.372965, 37.82457 ] } }
|
||||||
File diff suppressed because one or more lines are too long
@@ -143,9 +143,9 @@ static int coalcmp(const void *v1, const void *v2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < c1->full_keys.size(); i++) {
|
for (size_t i = 0; i < c1->full_keys.size(); i++) {
|
||||||
if (c1->full_keys[i] < c2->full_keys[i]) {
|
if (*c1->full_keys[i] < *c2->full_keys[i]) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (c1->full_keys[i] > c2->full_keys[i]) {
|
} else if (*c1->full_keys[i] > *c2->full_keys[i]) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@ static mvt_value find_attribute_value(const serial_feature *c1, std::string cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < c1->full_keys.size(); i++) {
|
for (size_t i = 0; i < c1->full_keys.size(); i++) {
|
||||||
if (c1->full_keys[i] == key) {
|
if (*c1->full_keys[i] == key) {
|
||||||
return stringified_to_mvt_value(c1->full_values[i].type, c1->full_values[i].s.c_str(), c1->tile_stringpool);
|
return stringified_to_mvt_value(c1->full_values[i].type, c1->full_values[i].s.c_str(), c1->tile_stringpool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -384,7 +384,7 @@ static std::vector<std::vector<serial_feature>> assemble_multiplier_clusters(std
|
|||||||
bool is_cluster_start = false;
|
bool is_cluster_start = false;
|
||||||
|
|
||||||
for (size_t i = 0; i < feature.full_keys.size(); i++) {
|
for (size_t i = 0; i < feature.full_keys.size(); i++) {
|
||||||
if (feature.full_keys[i] == "tippecanoe:retain_points_multiplier_first") {
|
if (*feature.full_keys[i] == "tippecanoe:retain_points_multiplier_first") {
|
||||||
is_cluster_start = true;
|
is_cluster_start = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -412,7 +412,7 @@ static std::vector<serial_feature> disassemble_multiplier_clusters(std::vector<s
|
|||||||
// gets the marker attribute
|
// gets the marker attribute
|
||||||
for (size_t i = 0; i < cluster.size(); i++) {
|
for (size_t i = 0; i < cluster.size(); i++) {
|
||||||
for (size_t j = 0; j < cluster[i].full_keys.size(); j++) {
|
for (size_t j = 0; j < cluster[i].full_keys.size(); j++) {
|
||||||
if (cluster[i].full_keys[j] == "tippecanoe:retain_points_multiplier_first") {
|
if (*cluster[i].full_keys[j] == "tippecanoe:retain_points_multiplier_first") {
|
||||||
cluster[0].full_keys.push_back(std::move(cluster[i].full_keys[j]));
|
cluster[0].full_keys.push_back(std::move(cluster[i].full_keys[j]));
|
||||||
cluster[0].full_values.push_back(std::move(cluster[i].full_values[j]));
|
cluster[0].full_values.push_back(std::move(cluster[i].full_values[j]));
|
||||||
|
|
||||||
@@ -1012,7 +1012,7 @@ static void remove_attributes(serial_feature &sf, std::set<std::string> const &e
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ssize_t i = sf.full_keys.size() - 1; i >= 0; i--) {
|
for (ssize_t i = sf.full_keys.size() - 1; i >= 0; i--) {
|
||||||
std::string key = sf.full_keys[i];
|
std::string key = *sf.full_keys[i];
|
||||||
if (exclude_attributes.count(key) > 0) {
|
if (exclude_attributes.count(key) > 0) {
|
||||||
sf.full_keys.erase(sf.full_keys.begin() + i);
|
sf.full_keys.erase(sf.full_keys.begin() + i);
|
||||||
sf.full_values.erase(sf.full_values.begin() + i);
|
sf.full_values.erase(sf.full_values.begin() + i);
|
||||||
@@ -1063,6 +1063,7 @@ struct next_feature_state {
|
|||||||
// geometry type set to -2.
|
// geometry type set to -2.
|
||||||
static serial_feature next_feature(decompressor *geoms, std::atomic<long long> *geompos_in, int z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y, long long *original_features, long long *unclipped_features, int nextzoom, int maxzoom, int minzoom, int max_zoom_increment, size_t pass, std::atomic<long long> *along, long long alongminus, int buffer, std::atomic<bool> *within, compressor **geomfile, std::atomic<long long> *geompos, long long start_geompos[], std::atomic<double> *oprogress, double todo, const char *fname, int child_shards, json_object *filter, const char *global_stringpool, long long *pool_off, std::vector<std::vector<std::string>> *layer_unmaps, bool first_time, bool compressed, multiplier_state *multiplier_state, std::shared_ptr<std::string> &tile_stringpool, std::vector<std::string> const &unidecode_data, next_feature_state &next_feature_state, double droprate) {
|
static serial_feature next_feature(decompressor *geoms, std::atomic<long long> *geompos_in, int z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y, long long *original_features, long long *unclipped_features, int nextzoom, int maxzoom, int minzoom, int max_zoom_increment, size_t pass, std::atomic<long long> *along, long long alongminus, int buffer, std::atomic<bool> *within, compressor **geomfile, std::atomic<long long> *geompos, long long start_geompos[], std::atomic<double> *oprogress, double todo, const char *fname, int child_shards, json_object *filter, const char *global_stringpool, long long *pool_off, std::vector<std::vector<std::string>> *layer_unmaps, bool first_time, bool compressed, multiplier_state *multiplier_state, std::shared_ptr<std::string> &tile_stringpool, std::vector<std::string> const &unidecode_data, next_feature_state &next_feature_state, double droprate) {
|
||||||
double extra_multiplier_zooms = log(retain_points_multiplier) / log(droprate);
|
double extra_multiplier_zooms = log(retain_points_multiplier) / log(droprate);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
serial_feature sf;
|
serial_feature sf;
|
||||||
long long len;
|
long long len;
|
||||||
@@ -1183,7 +1184,7 @@ static serial_feature next_feature(decompressor *geoms, std::atomic<long long> *
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
std::string key = sf.full_keys[i];
|
std::string key = *sf.full_keys[i];
|
||||||
mvt_value val = stringified_to_mvt_value(sf.full_values[i].type, sf.full_values[i].s.c_str(), tile_stringpool);
|
mvt_value val = stringified_to_mvt_value(sf.full_values[i].type, sf.full_values[i].s.c_str(), tile_stringpool);
|
||||||
|
|
||||||
attributes.insert(std::pair<std::string, mvt_value>(key, val));
|
attributes.insert(std::pair<std::string, mvt_value>(key, val));
|
||||||
@@ -1399,7 +1400,7 @@ void add_tilestats(std::string const &layername, int z, std::vector<std::map<std
|
|||||||
add_to_tilestats(ts->second.tilestats, key, val);
|
add_to_tilestats(ts->second.tilestats, key, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void promote_attribute(std::string const &key, serial_feature &p) {
|
void promote_attribute(std::string const &key, serial_feature &p, key_pool &key_pool) {
|
||||||
if (p.need_tilestats.count(key) == 0) {
|
if (p.need_tilestats.count(key) == 0) {
|
||||||
p.need_tilestats.insert(key);
|
p.need_tilestats.insert(key);
|
||||||
}
|
}
|
||||||
@@ -1413,7 +1414,7 @@ void promote_attribute(std::string const &key, serial_feature &p) {
|
|||||||
sv.s = p.stringpool + p.values[i] + 1;
|
sv.s = p.stringpool + p.values[i] + 1;
|
||||||
sv.type = p.stringpool[p.values[i]];
|
sv.type = p.stringpool[p.values[i]];
|
||||||
|
|
||||||
p.full_keys.push_back(key);
|
p.full_keys.push_back(key_pool.pool(key));
|
||||||
p.full_values.push_back(std::move(sv));
|
p.full_values.push_back(std::move(sv));
|
||||||
|
|
||||||
p.keys.erase(p.keys.begin() + i);
|
p.keys.erase(p.keys.begin() + i);
|
||||||
@@ -1424,7 +1425,7 @@ void promote_attribute(std::string const &key, serial_feature &p) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void promote_attribute_prefix(std::string const &key, std::string const &prefixed_key, serial_feature &p) {
|
void promote_attribute_prefix(std::string const &key, std::string const &prefixed_key, serial_feature &p, key_pool &key_pool) {
|
||||||
if (p.need_tilestats.count(prefixed_key) == 0) {
|
if (p.need_tilestats.count(prefixed_key) == 0) {
|
||||||
p.need_tilestats.insert(prefixed_key);
|
p.need_tilestats.insert(prefixed_key);
|
||||||
}
|
}
|
||||||
@@ -1432,18 +1433,18 @@ void promote_attribute_prefix(std::string const &key, std::string const &prefixe
|
|||||||
// does the prefixed attribute already exist as a full key?
|
// does the prefixed attribute already exist as a full key?
|
||||||
ssize_t found_as = -1;
|
ssize_t found_as = -1;
|
||||||
for (size_t i = 0; i < p.full_keys.size(); i++) {
|
for (size_t i = 0; i < p.full_keys.size(); i++) {
|
||||||
if (prefixed_key == p.full_keys[i]) {
|
if (prefixed_key == *p.full_keys[i]) {
|
||||||
// yes, so we're done
|
// yes, so we're done
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (key == p.full_keys[i]) {
|
if (key == *p.full_keys[i]) {
|
||||||
found_as = i;
|
found_as = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// or did we find the source as a full key? then copy it
|
// or did we find the source as a full key? then copy it
|
||||||
if (found_as >= 0) {
|
if (found_as >= 0) {
|
||||||
p.full_keys.push_back(prefixed_key);
|
p.full_keys.push_back(key_pool.pool(prefixed_key));
|
||||||
p.full_values.push_back(p.full_values[found_as]);
|
p.full_values.push_back(p.full_values[found_as]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1457,7 +1458,7 @@ void promote_attribute_prefix(std::string const &key, std::string const &prefixe
|
|||||||
sv.s = p.stringpool + p.values[i] + 1;
|
sv.s = p.stringpool + p.values[i] + 1;
|
||||||
sv.type = p.stringpool[p.values[i]];
|
sv.type = p.stringpool[p.values[i]];
|
||||||
|
|
||||||
p.full_keys.push_back(prefixed_key);
|
p.full_keys.push_back(key_pool.pool(prefixed_key));
|
||||||
p.full_values.push_back(std::move(sv));
|
p.full_values.push_back(std::move(sv));
|
||||||
|
|
||||||
p.keys.erase(p.keys.begin() + i);
|
p.keys.erase(p.keys.begin() + i);
|
||||||
@@ -1475,7 +1476,7 @@ void promote_attribute_prefix(std::string const &key, std::string const &prefixe
|
|||||||
sv.s = p.stringpool + p.values[found_as] + 1;
|
sv.s = p.stringpool + p.values[found_as] + 1;
|
||||||
sv.type = p.stringpool[p.values[found_as]];
|
sv.type = p.stringpool[p.values[found_as]];
|
||||||
|
|
||||||
p.full_keys.push_back(prefixed_key);
|
p.full_keys.push_back(key_pool.pool(prefixed_key));
|
||||||
p.full_values.push_back(std::move(sv));
|
p.full_values.push_back(std::move(sv));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -1485,7 +1486,7 @@ void promote_attribute_prefix(std::string const &key, std::string const &prefixe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// accumulate attribute values from sf onto p
|
// accumulate attribute values from sf onto p
|
||||||
void preserve_attributes(std::unordered_map<std::string, attribute_op> const *attribute_accum, const serial_feature &sf, serial_feature &p) {
|
void preserve_attributes(std::unordered_map<std::string, attribute_op> const *attribute_accum, const serial_feature &sf, serial_feature &p, key_pool &key_pool) {
|
||||||
std::string accumulate_numeric_colon = accumulate_numeric + ":";
|
std::string accumulate_numeric_colon = accumulate_numeric + ":";
|
||||||
|
|
||||||
for (size_t i = 0; i < sf.keys.size(); i++) {
|
for (size_t i = 0; i < sf.keys.size(); i++) {
|
||||||
@@ -1498,8 +1499,8 @@ void preserve_attributes(std::unordered_map<std::string, attribute_op> const *at
|
|||||||
sv.type = sf.stringpool[sf.values[i]];
|
sv.type = sf.stringpool[sf.values[i]];
|
||||||
sv.s = sf.stringpool + sf.values[i] + 1;
|
sv.s = sf.stringpool + sf.values[i] + 1;
|
||||||
|
|
||||||
promote_attribute(key, p);
|
promote_attribute(key, p, key_pool);
|
||||||
preserve_attribute(f->second, key, sv, p.full_keys, p.full_values, p.attribute_accum_state);
|
preserve_attribute(f->second, key, sv, p.full_keys, p.full_values, p.attribute_accum_state, key_pool);
|
||||||
} else if (type == mvt_double && accumulate_numeric.size() > 0 && !starts_with(key, accumulate_numeric_colon)) {
|
} else if (type == mvt_double && accumulate_numeric.size() > 0 && !starts_with(key, accumulate_numeric_colon)) {
|
||||||
for (auto const &operation : numeric_operations) {
|
for (auto const &operation : numeric_operations) {
|
||||||
serial_val sv;
|
serial_val sv;
|
||||||
@@ -1507,26 +1508,26 @@ void preserve_attributes(std::unordered_map<std::string, attribute_op> const *at
|
|||||||
sv.s = sf.stringpool + sf.values[i] + 1;
|
sv.s = sf.stringpool + sf.values[i] + 1;
|
||||||
|
|
||||||
std::string prefixed_key = accumulate_numeric + ":" + operation.first + ":" + key;
|
std::string prefixed_key = accumulate_numeric + ":" + operation.first + ":" + key;
|
||||||
promote_attribute_prefix(key, prefixed_key, p);
|
promote_attribute_prefix(key, prefixed_key, p, key_pool);
|
||||||
preserve_attribute(operation.second, prefixed_key, sv, p.full_keys, p.full_values, p.attribute_accum_state);
|
preserve_attribute(operation.second, prefixed_key, sv, p.full_keys, p.full_values, p.attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
const std::string &key = sf.full_keys[i];
|
const std::string key = *sf.full_keys[i];
|
||||||
int type = sf.full_values[i].type;
|
int type = sf.full_values[i].type;
|
||||||
|
|
||||||
auto f = attribute_accum->find(key);
|
auto f = attribute_accum->find(key);
|
||||||
if (f != attribute_accum->end()) {
|
if (f != attribute_accum->end()) {
|
||||||
const serial_val &sv = sf.full_values[i];
|
const serial_val &sv = sf.full_values[i];
|
||||||
|
|
||||||
promote_attribute(key, p); // promotes it in the target feature
|
promote_attribute(key, p, key_pool); // promotes it in the target feature
|
||||||
preserve_attribute(f->second, key, sv, p.full_keys, p.full_values, p.attribute_accum_state);
|
preserve_attribute(f->second, key, sv, p.full_keys, p.full_values, p.attribute_accum_state, key_pool);
|
||||||
} else if (type == mvt_double && accumulate_numeric.size() > 0 && !starts_with(key, accumulate_numeric_colon)) {
|
} else if (type == mvt_double && accumulate_numeric.size() > 0 && !starts_with(key, accumulate_numeric_colon)) {
|
||||||
for (auto const &operation : numeric_operations) {
|
for (auto const &operation : numeric_operations) {
|
||||||
std::string prefixed_key = accumulate_numeric + ":" + operation.first + ":" + key;
|
std::string prefixed_key = accumulate_numeric + ":" + operation.first + ":" + key;
|
||||||
promote_attribute_prefix(key, prefixed_key, p);
|
promote_attribute_prefix(key, prefixed_key, p, key_pool);
|
||||||
preserve_attribute(operation.second, prefixed_key, sf.full_values[i], p.full_keys, p.full_values, p.attribute_accum_state);
|
preserve_attribute(operation.second, prefixed_key, sf.full_values[i], p.full_keys, p.full_values, p.attribute_accum_state, key_pool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1620,7 +1621,7 @@ struct layer_features {
|
|||||||
size_t multiplier_cluster_size = 0; // The feature count of the current multiplier cluster
|
size_t multiplier_cluster_size = 0; // The feature count of the current multiplier cluster
|
||||||
};
|
};
|
||||||
|
|
||||||
bool drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer_features &layer, serial_feature &sf, std::vector<std::vector<std::string>> *layer_unmaps, strategy &strategy, bool &drop_rest, std::unordered_map<std::string, attribute_op> const *attribute_accum) {
|
bool drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer_features &layer, serial_feature &sf, std::vector<std::vector<std::string>> *layer_unmaps, strategy &strategy, bool &drop_rest, std::unordered_map<std::string, attribute_op> const *attribute_accum, key_pool &key_pool) {
|
||||||
ssize_t which_serial_feature;
|
ssize_t which_serial_feature;
|
||||||
|
|
||||||
if (find_feature_to_accumulate_onto(layer.features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
if (find_feature_to_accumulate_onto(layer.features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
||||||
@@ -1631,7 +1632,7 @@ bool drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer_features
|
|||||||
sf.dropped = layer.multiplier_cluster_size + 1;
|
sf.dropped = layer.multiplier_cluster_size + 1;
|
||||||
return false; // converted rather than dropped
|
return false; // converted rather than dropped
|
||||||
} else {
|
} else {
|
||||||
preserve_attributes(attribute_accum, sf, layer.features[which_serial_feature]);
|
preserve_attributes(attribute_accum, sf, layer.features[which_serial_feature], key_pool);
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
return true; // dropped
|
return true; // dropped
|
||||||
}
|
}
|
||||||
@@ -1741,6 +1742,8 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
bool too_many_features = false;
|
bool too_many_features = false;
|
||||||
bool too_many_bytes = false;
|
bool too_many_bytes = false;
|
||||||
|
|
||||||
|
key_pool key_pool;
|
||||||
|
|
||||||
std::atomic<bool> within[child_shards];
|
std::atomic<bool> within[child_shards];
|
||||||
long long start_geompos[child_shards];
|
long long start_geompos[child_shards];
|
||||||
for (size_t i = 0; i < (size_t) child_shards; i++) {
|
for (size_t i = 0; i < (size_t) child_shards; i++) {
|
||||||
@@ -1857,7 +1860,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
if (prefilter == NULL) {
|
if (prefilter == NULL) {
|
||||||
sf = next_feature(geoms, geompos_in, z, tx, ty, initial_x, initial_y, &original_features, &unclipped_features, nextzoom, maxzoom, minzoom, max_zoom_increment, pass, along, alongminus, buffer, within, geomfile, geompos, start_geompos, &oprogress, todo, fname, child_shards, filter, global_stringpool, pool_off, layer_unmaps, first_time, compressed_input, &multiplier_state, tile_stringpool, unidecode_data, next_feature_state, arg->droprate);
|
sf = next_feature(geoms, geompos_in, z, tx, ty, initial_x, initial_y, &original_features, &unclipped_features, nextzoom, maxzoom, minzoom, max_zoom_increment, pass, along, alongminus, buffer, within, geomfile, geompos, start_geompos, &oprogress, todo, fname, child_shards, filter, global_stringpool, pool_off, layer_unmaps, first_time, compressed_input, &multiplier_state, tile_stringpool, unidecode_data, next_feature_state, arg->droprate);
|
||||||
} else {
|
} else {
|
||||||
sf = parse_feature(prefilter_jp, z, tx, ty, layermaps, tiling_seg, layer_unmaps, postfilter != NULL);
|
sf = parse_feature(prefilter_jp, z, tx, ty, layermaps, tiling_seg, layer_unmaps, postfilter != NULL, key_pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sf.t < 0) {
|
if (sf.t < 0) {
|
||||||
@@ -1918,7 +1921,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
|
|
||||||
if (sf.dropped == FEATURE_DROPPED || drop_rest) {
|
if (sf.dropped == FEATURE_DROPPED || drop_rest) {
|
||||||
if (find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
if (find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.dropped_by_rate++;
|
strategy.dropped_by_rate++;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
continue;
|
continue;
|
||||||
@@ -1931,7 +1934,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
if (sf.dropped == FEATURE_KEPT) {
|
if (sf.dropped == FEATURE_KEPT) {
|
||||||
if (gamma > 0) {
|
if (gamma > 0) {
|
||||||
if (manage_gap(sf.index, &previndex, scale, gamma, &gap) && find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
if (manage_gap(sf.index, &previndex, scale, gamma, &gap) && find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.dropped_by_gamma++;
|
strategy.dropped_by_gamma++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
@@ -1959,7 +1962,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
features[which_serial_feature].geometry[0].y = y / (features[which_serial_feature].clustered + 1);
|
features[which_serial_feature].geometry[0].y = y / (features[which_serial_feature].clustered + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.coalesced_as_needed++;
|
strategy.coalesced_as_needed++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
@@ -1969,7 +1972,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
add_sample_to(gaps, sf.gap, gaps_increment, seq);
|
add_sample_to(gaps, sf.gap, gaps_increment, seq);
|
||||||
if (sf.gap < mingap) {
|
if (sf.gap < mingap) {
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum)) {
|
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum, key_pool)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1991,7 +1994,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
features[which_serial_feature].geometry[0].y = y / (features[which_serial_feature].clustered + 1);
|
features[which_serial_feature].geometry[0].y = y / (features[which_serial_feature].clustered + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.coalesced_as_needed++;
|
strategy.coalesced_as_needed++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
continue;
|
continue;
|
||||||
@@ -2002,7 +2005,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
coalesce_geometry(features[which_serial_feature], sf);
|
coalesce_geometry(features[which_serial_feature], sf);
|
||||||
features[which_serial_feature].coalesced = true;
|
features[which_serial_feature].coalesced = true;
|
||||||
coalesced_area += sf.extent;
|
coalesced_area += sf.extent;
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.coalesced_as_needed++;
|
strategy.coalesced_as_needed++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
@@ -2014,7 +2017,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
// so we shouldn't expect to find anything small that we can related this feature to.
|
// so we shouldn't expect to find anything small that we can related this feature to.
|
||||||
if (minextent != 0 && sf.extent + coalesced_area <= minextent) {
|
if (minextent != 0 && sf.extent + coalesced_area <= minextent) {
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum)) {
|
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum, key_pool)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2024,7 +2027,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
coalesce_geometry(features[which_serial_feature], sf);
|
coalesce_geometry(features[which_serial_feature], sf);
|
||||||
features[which_serial_feature].coalesced = true;
|
features[which_serial_feature].coalesced = true;
|
||||||
coalesced_area += sf.extent;
|
coalesced_area += sf.extent;
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.coalesced_as_needed++;
|
strategy.coalesced_as_needed++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
@@ -2034,7 +2037,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
add_sample_to(drop_sequences, drop_sequence, drop_sequences_increment, seq);
|
add_sample_to(drop_sequences, drop_sequence, drop_sequences_increment, seq);
|
||||||
if (mindrop_sequence != 0 && drop_sequence <= mindrop_sequence) {
|
if (mindrop_sequence != 0 && drop_sequence <= mindrop_sequence) {
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum)) {
|
if (drop_feature_unless_it_can_be_added_to_a_multiplier_cluster(layer, sf, layer_unmaps, strategy, drop_rest, arg->attribute_accum, key_pool)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2043,7 +2046,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
if (mindrop_sequence != 0 && drop_sequence <= mindrop_sequence && find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
if (mindrop_sequence != 0 && drop_sequence <= mindrop_sequence && find_feature_to_accumulate_onto(features, sf, which_serial_feature, layer_unmaps, LLONG_MAX)) {
|
||||||
coalesce_geometry(features[which_serial_feature], sf);
|
coalesce_geometry(features[which_serial_feature], sf);
|
||||||
features[which_serial_feature].coalesced = true;
|
features[which_serial_feature].coalesced = true;
|
||||||
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature]);
|
preserve_attributes(arg->attribute_accum, sf, features[which_serial_feature], key_pool);
|
||||||
strategy.coalesced_as_needed++;
|
strategy.coalesced_as_needed++;
|
||||||
drop_rest = true;
|
drop_rest = true;
|
||||||
can_stop_early = false;
|
can_stop_early = false;
|
||||||
@@ -2143,7 +2146,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sf.dropped == FEATURE_KEPT && retain_points_multiplier > 1) {
|
if (sf.dropped == FEATURE_KEPT && retain_points_multiplier > 1) {
|
||||||
sf.full_keys.push_back("tippecanoe:retain_points_multiplier_first");
|
sf.full_keys.push_back(key_pool.pool("tippecanoe:retain_points_multiplier_first"));
|
||||||
sf.full_values.emplace_back(mvt_bool, "true");
|
sf.full_values.emplace_back(mvt_bool, "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2313,10 +2316,10 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
size_t j = feature_sequences[i].second;
|
size_t j = feature_sequences[i].second;
|
||||||
serial_val sv(mvt_double, std::to_string(i));
|
serial_val sv(mvt_double, std::to_string(i));
|
||||||
|
|
||||||
features[j].full_keys.push_back("tippecanoe:retain_points_multiplier_sequence");
|
features[j].full_keys.push_back(key_pool.pool("tippecanoe:retain_points_multiplier_sequence"));
|
||||||
features[j].full_values.push_back(sv);
|
features[j].full_values.push_back(sv);
|
||||||
|
|
||||||
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, features[j].full_keys.back(), sv);
|
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, *features[j].full_keys.back(), sv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2328,28 +2331,28 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
long long point_count = p.clustered + 1;
|
long long point_count = p.clustered + 1;
|
||||||
char abbrev[20]; // to_string(LLONG_MAX).length() / 1000 + 1;
|
char abbrev[20]; // to_string(LLONG_MAX).length() / 1000 + 1;
|
||||||
|
|
||||||
p.full_keys.push_back("clustered");
|
p.full_keys.push_back(key_pool.pool("clustered"));
|
||||||
sv.type = mvt_bool;
|
sv.type = mvt_bool;
|
||||||
sv.s = "true";
|
sv.s = "true";
|
||||||
p.full_values.push_back(sv);
|
p.full_values.push_back(sv);
|
||||||
|
|
||||||
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "clustered", sv);
|
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "clustered", sv);
|
||||||
|
|
||||||
p.full_keys.push_back("point_count");
|
p.full_keys.push_back(key_pool.pool("point_count"));
|
||||||
sv2.type = mvt_double;
|
sv2.type = mvt_double;
|
||||||
sv2.s = std::to_string(point_count);
|
sv2.s = std::to_string(point_count);
|
||||||
p.full_values.push_back(sv2);
|
p.full_values.push_back(sv2);
|
||||||
|
|
||||||
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "point_count", sv2);
|
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "point_count", sv2);
|
||||||
|
|
||||||
p.full_keys.push_back("sqrt_point_count");
|
p.full_keys.push_back(key_pool.pool("sqrt_point_count"));
|
||||||
sv3.type = mvt_double;
|
sv3.type = mvt_double;
|
||||||
sv3.s = std::to_string(round(100 * sqrt(point_count)) / 100.0);
|
sv3.s = std::to_string(round(100 * sqrt(point_count)) / 100.0);
|
||||||
p.full_values.push_back(sv3);
|
p.full_values.push_back(sv3);
|
||||||
|
|
||||||
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "sqrt_point_count", sv3);
|
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, "sqrt_point_count", sv3);
|
||||||
|
|
||||||
p.full_keys.push_back("point_count_abbreviated");
|
p.full_keys.push_back(key_pool.pool("point_count_abbreviated"));
|
||||||
sv4.type = mvt_string;
|
sv4.type = mvt_string;
|
||||||
if (point_count >= 10000) {
|
if (point_count >= 10000) {
|
||||||
snprintf(abbrev, sizeof(abbrev), "%.0fk", point_count / 1000.0);
|
snprintf(abbrev, sizeof(abbrev), "%.0fk", point_count / 1000.0);
|
||||||
@@ -2366,8 +2369,8 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
|
|
||||||
if (p.need_tilestats.size() > 0) {
|
if (p.need_tilestats.size() > 0) {
|
||||||
for (size_t j = 0; j < p.full_keys.size(); j++) {
|
for (size_t j = 0; j < p.full_keys.size(); j++) {
|
||||||
if (p.need_tilestats.count(p.full_keys[j]) > 0) {
|
if (p.need_tilestats.count(*p.full_keys[j]) > 0) {
|
||||||
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, p.full_keys[j], p.full_values[j]);
|
add_tilestats(layername, z, layermaps, tiling_seg, layer_unmaps, *p.full_keys[j], p.full_values[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2559,7 +2562,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
|||||||
for (size_t a = 0; a < layer_features[x].full_keys.size(); a++) {
|
for (size_t a = 0; a < layer_features[x].full_keys.size(); a++) {
|
||||||
serial_val sv = layer_features[x].full_values[a];
|
serial_val sv = layer_features[x].full_values[a];
|
||||||
mvt_value v = stringified_to_mvt_value(sv.type, sv.s.c_str(), tile_stringpool);
|
mvt_value v = stringified_to_mvt_value(sv.type, sv.s.c_str(), tile_stringpool);
|
||||||
layer.tag(feature, layer_features[x].full_keys[a], v);
|
layer.tag(feature, *layer_features[x].full_keys[a], v);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (additional[A_CALCULATE_FEATURE_DENSITY]) {
|
if (additional[A_CALCULATE_FEATURE_DENSITY]) {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
#ifndef VERSION_HPP
|
#ifndef VERSION_HPP
|
||||||
#define VERSION_HPP
|
#define VERSION_HPP
|
||||||
|
|
||||||
#define VERSION "v2.66.0"
|
#define VERSION "v2.67.0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user