Проблема со сложным SQL-запросом для Google Fusion Table. Могу ли я использовать внешние значения в своем запросе? - PullRequest
0 голосов
/ 02 мая 2018

Основная схема этого проекта - это визуальное представление времени в пути между лондонскими Уордс.

Пока что я создал таблицу Google Fusion, которая хорошо отвечает на основные запросы. Но теперь я пытаюсь изменить цвет моих полигонов таблицы фьюжн в соответствии с временем в пути к выбранному полигону и обратно.

function fillcolour(match) {
  var limit = 0;
  var filter = [];

  for (x in match) {
    if (limit < 5) {
      var duration = match[x];
      if (dataraw[1]) {
          //-------75 and 65 are stand in values at the moment. They will later be filled by variables.
          filter.push("(" + generateWhere(x, duration, 75, 65) + ")");
      }
      limit++;
    }
  }
  where = filter.join(' OR ');

  PolygonLayer.setOptions({
    query: {
      select: 'shape',
      from: mapTable
    },
    styles: [{
      polygonOptions: {
        fillColor: "#000FFF",
        fillOpacity: .8
      }
    },
    {
      where: where,
      polygonOptions: {
        fillColor: "#FFF000"
      }
    }],
  })
};

function generateWhere(Keys, duration, high, low) {
  var whereClause = [];
  whereClause.push("name");
  whereClause.push(" = '");
  whereClause.push(Keys);
  whereClause.push("' AND ");
  whereClause.push(duration);
  whereClause.push(" >= ");
  whereClause.push(low);
  whereClause.push(" AND ");
  whereClause.push(duration);
  whereClause.push(" < ");
  whereClause.push(high);
  return whereClause.join('');
}

Я понимаю, что, возможно, есть более простой способ работы с параметрами многоугольника, но в настоящее время мой SQL-запрос работает не так, как мне бы хотелось.

Это запрос, который подается в оператор where:

(имя = «Эбби Вуд» И 80> = 65 И 80 <75) ИЛИ (имя = «Актон» И 74> = 65 И 74 <75) ИЛИ (имя = «Анерли» И 46> = 65 И 46 <75) </p>

Кто-нибудь знает, почему это не сработает?

1 Ответ

0 голосов
/ 02 мая 2018

(имя = «Эбби Вуд» И 80> = 65 И 80 <75) ИЛИ (имя = «Актон» И 74> = 65 И 74 <75) ИЛИ (имя = «Анерли» И 46> = 65 И 46 <75) </p>

Есть две проблемы с запросом

1) Запросы Fusion Table * :

"Вы должны использовать кавычки вокруг любых имен столбцов в выборке или где поля, содержащие пробелы, зарезервированные слова или не начинающиеся с письмо ".

2) Справочник по SQL для запросов и запросов :

«ИЛИ не поддерживается.»

Так что вам нужно добавить кавычки и разбить ваши подзапросы OR на отдельные запросы

styles: [{
    polygonOptions: {
        fillColor: "#000FFF",
        fillOpacity: .8
    }
},
{
    where: "name = 'Abbey Wood' AND '80' >= 65 AND '80' < 75",
    polygonOptions: {
        fillColor: "#FFF000"   
    }
},
{
    where: "name = 'Acton' AND '74' >= 65 AND '74' < 75",
    polygonOptions: {
        fillColor: "#FFF000"    
    }
},
{
    where: "name = 'Anerley' AND '46' >= 65 AND '46' < 75",
    polygonOptions: {
        fillColor: "#FFF000"    
    }
}]
...