This system is built to give a general overview of any urban area (a.k.a address portrait). It first partitions the spatial space into about 150m × 150m grids, then calculate multiple indicators of each grid, e.g., purchasing power, air quality, traffic flow, and etc, using multiple spatio-temporal data sources. The indicators of fine-grained urban areas are very helpful for billboard placement, location selection, and urban planning. Users can search the indicators of any area using a spatio-temporal range query based on JUST.
                This system utilizes the trajectories of couriers in JD Logistics to recover the road networks of living areas, which could be missing in commercial maps. A complete map is essential for path planning and package dispatching. The GPS logs of over 60,000 couriers are loaded into JUST in batches each day. With the help of JUST to manage and process trajectories, the map recovery system can repair the road networks in living areas, and infer the speed and traffic mode (e.g., riding or walking) of each road segment with much fewer efforts.
                Based on the Urban Block Indicator System, this system can help China Unicom to answer the following questions: 1) Where the new stores should be opened to attract target customers at most? 2) How to make bussiness strategies according to the current customers and surrounding environmental situations? This system is based on multiple data sources (e.g., cellular signaling data, demographic data, JD purchasing order data, road networks, and POIs), and adopts multi-source data fusion technology and cross-domain learning techniques.
                Forecasting the flow of crowds is of great importance to traffic management and public safety, and very challenging as it is affected by many complex factors, including spatial dependencies (nearby and distant), temporal dependencies (closeness, period, trend), and external conditions (e.g. weather and events). This system predicts the city-wide crowd flow with the help of JUST. In this case, JUST provides efficient real-time or historical crowd flow calculation, and spatio-temporal data processing. The demo system is shown in http://101.124.0.58/urbanflow_graph/.
                From the spatio-temporal perspective, we display the macroeconomic, microeconomic, industrial distribution, transportation facilities, real estate layout, natural disasters, enterprise chains and other data in a multi-dimensional combination, and build a complete city (grid) potential rating model based on six categories of indicators: transportation, economy, geographic characteristics, users, enterprises and commercial activities. The potential scoring model helps decision makers grasp the potential of urban property development from a macro perspective and assist in site selection decisions.
User Name and Password, then click the button 登录, as shown in the following picture.
Table Panel, View Panel, JustQL Panel, and Result Panel.
CREATE TABLE order_table(
    order_time Timestamp,
    order_position Point,
    attr1 integer,
    attr2 long,
    attr3 long,
    attr4 integer,
    attr5 string,
    attr6 integer,
    attr7 integer,
    attr8 integer,
    attr9 string,
    attr10 string,
    attr11 string,
    attr12 double,
    attr13 integer,
    attr14 integer,
    attr15 integer,
    attr16 integer,
    attr17 integer
  ) WITH (
    "geomesa.indices.enabled" = "z2,z2t",
    "geomesa.z3.interval" = "day",
    "geomesa.xz.precision" = "16"
  );
        
        
LOAD hive :just_tutorial.order_table to JUST :order_table (
  order_time to_timestampInMS(time),
  order_position st_makePoint(lng, lat),
  attr1 attr1,
  attr2 attr2,
  attr3 attr3,
  attr4 attr4,
  attr5 attr5,
  attr6 attr6,
  attr7 attr7,
  attr8 attr8,
  attr9 attr9,
  attr10 attr10,
  attr11 attr11,
  attr12 attr12,
  attr13 attr13,
  attr14 attr14,
  attr15 attr15,
  attr16 attr16,
  attr17 attr17
);
               
        
SELECT
  order_time,
  order_position,
  attr12
FROM
  order_table
WHERE
  st_within(
    order_position,
    st_makebbox(116, 39, 116.5, 39.5)
  )
        
        
SELECT
  order_time,
  order_position,
  attr12
FROM
  order_table
WHERE
  st_within(
    order_position,
    st_makebbox(116, 39, 116.5, 39.5)
  )
  AND order_time >= '2018-10-01 00:00:00'
  AND order_time <= '2018-11-01 00:00:00'
        
        
SELECT
  *
FROM
  order_table
WHERE
  st_knn(
    order_position,
    'POINT(115.71 39.57)',
    'common',
    2
  )
        
        
CREATE VIEW order_view AS
SELECT
  *
FROM
  order_table
WHERE
  attr12 > 3
  AND st_within(
    order_position,
    st_makebbox(116, 39, 116.5, 39.5)
  )
LIMIT
  200
        
        
STORE VIEW order_view TO TABLE order_table_small
        
        DBSCAN method: 
SELECT
  st_dbscan('order_position', t1, 1, 1)
FROM
  (
    SELECT
      collect_list(struct(*)) AS t1
    FROM
      order_table_small
  )
        
        minPts and radius respectively, representing there are at least minPts points within distance radius meters of a core point.
        
DROP VIEW order_view
        
        
DROP TABLE order_table
        
        
DROP TABLE order_table_small
        
        
CREATE TABLE trajectory_table (traj Trajectory)
        
        
LOAD hdfs:'/just_tutorial/trajectory_data' to JUST:trajectory_table (
    traj.oid 0,
    traj.time to_timestamp(3),
    traj.point st_makePoint(1,2)
);            
        
        
SELECT
  traj_linestring(traj), traj_starttime(traj)
FROM
  trajectory_table
WHERE
  st_within(
    traj_linestring(traj),
    st_makebbox(113.1, 23.2, 113.5, 23.6)
  )
              
        
SELECT
  *
FROM
  trajectory_table
WHERE
  st_within(
    traj_linestring(traj),
    st_makebbox(113.1, 23.2, 113.5, 23.6)
  )
  AND traj_starttime(traj) > '2014-03-01 00:00:00'
  AND traj_starttime(traj) < '2014-03-15 00:00:00'
        
        
SELECT
  *
FROM
  trajectory_table
WHERE
  st_knn(
    traj,
    'POINT(115.71 39.57)',
    'common',
    2
  )
        
        
CREATE VIEW trajectory_view AS 
SELECT
  traj
FROM
  trajectory_table
WHERE
  st_within(
    traj_linestring(traj),
    st_makebbox(113.1, 23.2, 113.5, 23.6)
  )
        
        
SELECT
  st_trajnoisefilter(
     traj,
    '{ "filterType": "COMPLEX_FILTER",
      "maxSpeedMeterPerSecond": 100.0,
      "segmenterParams": { "maxTimeIntervalInMinute": 60,
      "maxStayDistInMeter": 100,
      "minStayTimeInSecond": 100,
      "minTrajLengthInKM": 1,
      "segmenterType": "ST_DENSITY_SEGMENTER"}}'
  )
FROM
  trajectory_view       
        
        st_trajNoiseFilter is to config which filter method is used. If omited, we will use the default method.
SELECT
  st_trajsegmentation(
    traj,
    '{ "maxTimeIntervalInMinute": 10,
      "maxStayDistInMeter": 100,
      "minStayTimeInSecond": 100,
      "minTrajLengthInKM": 1,
      "segmenterType": "HYBRID_SEGMENTER"}'
  )
FROM
  trajectory_view
        
        st_trajSegmentation is to config which segmentation method is used. If omited, we will use the default method.
SELECT
  st_trajStayPoint(
    traj,
    '{ "maxStayDistInMeter": 10,
       "minStayTimeInSecond": 60,
       "stayPointType": "CLASSIC_DETECTOR"}'
  )
FROM
  trajectory_view
        
        st_trajStayPoint is to config which stay point detection method is used. If omited, we will use the default method.
CREATE VIEW stay_point_view AS 
SELECT
  st_trajStayPoint(
    traj,
    '{ "maxStayDistInMeter": 10,
       "minStayTimeInSecond": 60,
       "stayPointType": "CLASSIC_DETECTOR"}'
  )
FROM
  trajectory_view       
        
        
STORE VIEW stay_point_view TO TABLE stay_point_table
        
        
DROP VIEW trajectory_view
                
        
DROP VIEW stay_point_view
        
        
DROP TABLE trajectory_table
        
        
DROP TABLE stay_point_table
        
        
CREATE TABLE guiyang_rn (road roadSegment)
        
        
CREATE TABLE guiyang_traj_table (traj Trajectory)
        
        
LOAD hdfs: '/just_test_lhy/data/roadnetwork/guiyang_rn.csv' TO just: guiyang_rn(
  road.oid oid,
  road.direction direction,
  road.speed_limit speed_limit,
  road.level level,
  road.geom st_linefromtext(geom)
) WITH ("just.separator" = "|", "just.header" = "true")
        
        
LOAD hdfs :'/just_tutorial/guiyang_traj.csv' TO JUST :guiyang_traj_table (
  traj.oid oid,
  traj.time to_timestamp(time),
  traj.point st_makePoint(lng, lat)
) WITH ("just.separator" = "|", "just.header" = "true")
        
        
SELECT
  *
FROM
  guiyang_rn
WHERE
  st_within(
    roadsegment_linestring(road),
    st_makebbox(106.674686,26.635553,106.712055,26.667067)
  )
        
        
SELECT
  st_trajLmmMapMatchToProjection(t1.traj, t2.t)
FROM
  guiyang_traj_table t1,
  (
    SELECT
      st_makeRoadNetwork(collect_list(road)) AS t
    FROM
      guiyang_rn
  ) AS t2
        
        
DROP TABLE guiyang_rn
        
        
DROP TABLE guiyang_traj_table