Создание карты по CARTO из таблицы с нулевым параметром the_geom - PullRequest
0 голосов
/ 25 апреля 2018

Я добавил новый набор данных в Carto Builder, используя файл .csv.Но есть пустой столбец the_geom.Поэтому, когда я создаю карту, используяactjs и carto.js через:

this.cartoClient = new carto.Client({ apiKey: 'key', username: 'user' });
<Map center={center} zoom={zoom} ref={node => { this.nativeMap = node && node.leafletElement }}>
          <Basemap attribution="" url={CARTO_BASEMAP} />

          <Layer
            source={airbnb.source}
            style={this.state.layerStyle}
            client={this.cartoClient}
            hidden={this.state.hidelayers}
          />
        </Map>

и используя airbnb.source

SELECT
  cartodb_id,  field_1,field_8, field_7, field_6, field_2, field_4, field_3, field_5,
  ST_SetSRID(    ST_MakePoint(
      field_4,
      field_3
    ),
    4326
  ) AS the_geom,
  ST_Transform(ST_Buffer(the_geom,0.001), 3857) as the_geom_webmercator
FROM (SELECT * FROM allreports) AS _camshaft_georeference_long_lat_analysis

Carto.js не помечает точки на моей карте, поэтому я получаюэто понятно.Как мне обойти the_geom, the_geom_webmercator, чтобы получить карту с точками, или проблема в другом месте?

1 Ответ

0 голосов
/ 25 апреля 2018

Работает ли тот же SQL в Builder?Откуда ты это взял?Не видя фактических данных, можно только догадываться, что можно сделать, и имена ваших полей здесь не очень полезны.Или это автоматически сгенерированный SQL из Builder?Я не уверен, если это хорошая идея взломать этот, даже если он работает сейчас, тогда эти внутренние структуры могут измениться в любое время.Как правило, существуют следующие сценарии получения данных для сопоставления:

  • Импортер пытается использовать некоторые эвристики из структуры таблицы, чтобы добавить их на карту.Например, если у вас есть имена столбцов latitude и longitude, таблица автоматически геокодируется, то есть поля geom заполняются, и таблица просто работает.Или, если есть столбец city с английскими названиями городов, то есть большая вероятность, что он будет на карте.Поэтому самый простой способ - использовать эти имена полей, если они уже есть в ваших данных.
  • Вы можете постоянно геокодировать таблицу, используя API Carto SQL, с чем-то вроде UPDATE {tablename} SET the_geom = cdb_geocode_namedplace_point({city_column}, {province_column}, {country_column}) в случае именованных мест, илиесли у вас есть поля wgs lat / lon, тогда UPDATE {tablename} SET the_geom = st_setsrid(st_point({lon_column}, {lat_column}),4326).Таким образом the_geom будет заполнен.Чтобы убедиться, что я также сделал бы UPDATE {tablename} SET the_geom_webercator = st_transform(the_geom, 3857).Конечно, вы можете использовать здесь st_buffer и т. Д.
  • вы также можете выполнить живой геокодирующий запрос, как вы сейчас пытаетесь, просто убедитесь, что есть уникальный cartodb_id, правильный the_geom (в wgs84) и the_geom_webmercator (в проекции epsg3857)так же, как у вас).Это имеет больше смысла, если ваши данные каким-то образом динамически обновляются, в противном случае я бы сделал одноразовый ОБНОВЛЕНИЕ для таблицы.
  • использовал бы анализ геокодирования Builder.Это создает другой «виртуальный» живой набор данных с геокодированными данными, и это может быть использовано при просмотре карты или при дальнейшем анализе.Боюсь, это невозможно сделать / показать на картах carto.js, это только в Builder.

ps, вы можете найти больше связанных с картами сообщений в https://gis.stackexchange.com/questions/tagged/carto

...