Anjo,
Great to hear that your view is working. To get the overlay to work, try
replacing the "source" and "source-layer" values with the name of your
view. So, changing "grade_i_buildings" to "condition"
Cheers,
Dennis
On Tuesday, May 1, 2018 at 11:34:50 AM UTC-7, Anjo Weichbrodt wrote:
>
> Hi Dennis,
>
> Thank you so much for your answer I really appreciate it.
> I managed to create a view which actually finds my resource labeled with
> good. I called the view *condition*:
>
>
> -- object: public.condition | type: VIEW --
> -- DROP VIEW IF EXISTS public.condition CASCADE;
> CREATE VIEW public.condition
> AS
> SELECT row_number() OVER () AS gid,
> mv.tileid,
> mv.resourceinstanceid,
> mv.nodeid,
> mv.geom,
> (name_tile.tiledata ->> '663c3a7c-44d2-11e8-b144-028e6def3b89'::text)
> AS name,
> 'National Monument' AS protection
> FROM ((mv_geojson_geoms mv
> LEFT JOIN tiles type_tile ON ((mv.resourceinstanceid = type_tile.
> resourceinstanceid)))
> LEFT JOIN tiles name_tile ON ((mv.resourceinstanceid = name_tile.
> resourceinstanceid)))
> WHERE (((type_tile.tiledata ->> '663c3aab-44d2-11e8-b144-028e6def3b89'::
> text) = '5c459cec-0e3f-4f5f-99e5-e4608530508b'::text) AND
> ((name_tile.tiledata
> ->> '663c3a7c-44d2-11e8-b144-028e6def3b89'::text) IS NOT NULL));
> -- ddl-end --
> ALTER VIEW public.condition OWNER TO postgres;
> -- ddl-end --
>
> but then I have trouble creating an overlay which actually represents the
> queried polygons (step 3).
>
> Should I just replace "grade_i_buildings" with national_monument?
> How does this relates to the view created in step 2.
>
> Thanks for your help,
> Anjo
>
> On Sunday, April 29, 2018 at 9:00:06 PM UTC-4, Dennis Wuthrich wrote:
>>
>> Hi Anjo,
>>
>> Yes, you can style resources based on concept values. Here are the steps:
>>
>> 1. Using a PostgreSQL tool (like PGAdmin, Navicat, or the command line)
>> confirm that Arches has loaded a materialized view called
>> mv_geojson_geoms. This view collects all the geometries for all resource
>> model in Arches. It includes the instance id, geometry, and node id for
>> every resource instance for every model in Arches. If your version of
>> Arches doesn't have it, it looks like this:
>>
>> SELECT t.tileid,
>> t.resourceinstanceid,
>> n.nodeid,
>>
>> (st_transform(st_setsrid(st_geomfromgeojson(((json_array_elements((((t.tiledata)::json
>>
>> -> (n.nodeid)::text) -> 'features'::text)) -> 'geometry'::text))::text),
>> 4326), 900913))::geometry(Geometry,900913) AS geom
>> FROM (tiles t
>> LEFT JOIN nodes n ON ((t.nodegroupid = n.nodegroupid)))
>> WHERE ((( SELECT count(*) AS count
>> FROM jsonb_object_keys(t.tiledata)
>> jsonb_object_keys(jsonb_object_keys)
>> WHERE (jsonb_object_keys.jsonb_object_keys IN ( SELECT
>> (n_1.nodeid)::text AS nodeid
>> FROM nodes n_1
>> WHERE (n_1.datatype =
>> 'geojson-feature-collection'::text)))) > 0) AND (n.datatype =
>> 'geojson-feature-collection'::text))
>>
>>
>>
>> 2. You will write a view that references mv_geojson_geoms to identify (in
>> your case) all instances where the condition type is not null. Here is an
>> example of a view that finds all buildings with "Grade I" protection type:
>>
>> SELECT row_number() OVER () AS gid,
>> mv.tileid,
>> mv.resourceinstanceid,
>> mv.nodeid,
>> mv.geom,
>> (name_tile.tiledata ->> '677f303d-09cc-11e7-9aa6-6c4008b05c4c'::text)
>> AS name,
>> 'Grade I Listed Building' AS protection
>> FROM ((mv_geojson_geoms mv
>> LEFT JOIN tiles type_tile ON ((mv.resourceinstanceid =
>> type_tile.resourceinstanceid)))
>> LEFT JOIN tiles name_tile ON ((mv.resourceinstanceid =
>> name_tile.resourceinstanceid)))
>> WHERE (((type_tile.tiledata ->>
>> '4ca32698-fa12-11e6-9e3e-026d961c88e6'::text) =
>> 'bc908dbc-45ff-426c-8713-f622907730ab'::text) AND ((name_tile.tiledata ->>
>> '677f303d-09cc-11e7-9aa6-6c4008b05c4c'::text) IS NOT NULL))
>>
>> A few things to note here:
>> a. the type_tile.tiledata ->>
>> ''4ca32698-fa12-11e6-9e3e-026d961c88e6'::text is used to identify the
>> concept node that you are interested in. In your case, this would be the
>> id of the Condition Type node in your model. You can use the json
>> representation of the your model (e.g.: export your model and use a text
>> editor to open it) to find the node id
>>
>> b. the = 'bc908dbc-45ff-426c-8713-f622907730ab'::text is used to
>> identify the id of the concept you want to match. In your case this would
>> be the id of the concept you want to match (e.g.: "good"). This value may
>> be in the model json that you used to find the concept id. Or you can use
>> the concepts.json file that came with the mapping file that you used to
>> import data into Arches. (note that you can re-create this file by going
>> to your resource model in Arches Designer, click on manage, and select
>> create mapping file)
>>
>> c. In this example, the name_tile.tiledata is used to identify the node
>> in the model that you use to name your instance.
>>
>>
>> 3. Once you have the view working, you can create a layer using Arches
>> built-in map server. Here's an example of a simple json configuration for
>> the view:
>>
>> {
>> "type": "vector",
>> "name": "Grade I Buildings",
>> "layers": [{
>> "id": "grade_i_buildings",
>> "type": "circle",
>> "minzoom": 11,
>> "maxzoom": 21,
>> "source": "grade_i_buildings",
>> "source-layer": "grade_i_buildings",
>> "layout": {
>> "visibility": "visible"
>> },
>> "paint": {
>> "circle-radius": {
>> "stops": [
>> [11, 2],
>> [15, 8],
>> [21, 50]
>> ]
>> }
>> ,
>> "circle-color": "rgba(58, 171, 209,0.25)",
>> "circle-stroke-color": "rgb(58, 171, 209)",
>> "circle-stroke-width": 1
>> }
>> }],
>> "config": {
>> "provider": {
>> "class": "TileStache.Goodies.VecTiles:Provider",
>> "kwargs": {
>> "dbinfo": {
>> "host": "localhost",
>> "user": "postgres",
>> "password": "postgis",
>> "database": "her_lincoln",
>> "port": "5432"
>> },
>> "simplify": 0.5,
>> "queries": [
>> "select gid as __id__, name as __name__, geom as __geometry__ from
>> grade_i_buildings"
>> ]
>> }
>> },
>> "allowed origin": "*",
>> "compress": true,
>> "write cache": false
>> }
>> }
>>
>> You can add this layer to Arches as an overlay using the following
>> command:
>>
>> python manage.py packages -o add_tileserver_layer -t
>> ~dwuthrich/arches/packages/lincoln_release/map_layers/tile_server/overlays/grade_i_buildings/grade_i_buildings.json
>>
>> -n "Grade I Buildings"
>>
>> (obviously, you'll need to replace this path and file name in this
>> example with your own path/file)
>>
>>
>> 4. You can now go to Arches map manager, navigate to overlays, and view
>> your layer. Note that you can click on the "service styling" tab and then
>> click on the black area to see the json used to style your data. If you
>> copy this json, you can paste it into any basemap (or other overlay) style
>> in Arches. In this way, you could automatically add your styled data to a
>> basemap, or aggregate multiple overlays into a single overlay or basemap.
>>
>>
>> I hope this helps.
>>
>> Cheers,
>>
>> Dennis
>>
>>
>> On Friday, April 27, 2018 at 12:31:45 PM UTC-7, Anjo Weichbrodt wrote:
>>>
>>> Hi,
>>>
>>> I would like to represent geometries of resources in different colors
>>> depending on their attributes.
>>> Example: there is the resource "Wall" which has the "Condition Type"s
>>> *good,
>>> fair, poor*. Is it possible to represent all walls with *good*
>>> condition green, *fair* condition orange and *poor* condition red?
>>>
>>> Thank you!
>>> Anjo
>>>
>>
--
-- To post, send email to [email protected]. To unsubscribe, send
email to [email protected]. For more information,
visit https://groups.google.com/d/forum/archesproject?hl=en
---
You received this message because you are subscribed to the Google Groups
"Arches Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.