• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Will this help draw weather fronts with Photoshop and Javascript?

Community Beginner ,
Feb 15, 2018 Feb 15, 2018

Copy link to clipboard

Copied

I am a meteorologist. I use Photoshop to help annotate maps. One thing I always wanted to do, but couldn't, was draw weather fronts.

Recently I've come across some javascript used by leafletjs to draw fronts. Does any of what I've seen get me closer to being able to draw a front with a path? I know Photoshop understands javascript, but not much more.

This is very esoteric. There are few of you who can help. So thanks in advance.

Leafletjs example with fronts:  Weather Prediction Center

Javascript code defining fronts:  front example.txt - Google Drive

TOPICS
Actions and scripting

Views

2.7K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe
Community Expert ,
Feb 15, 2018 Feb 15, 2018

Copy link to clipboard

Copied

That is a very elaborate dynamic web page the has a world map you can drag around zoom in and out and control weather overlays. The overlays only seem to be available north America.  If you are asking if Photoshop can create a web page like that the answer is no.  Photoshop may be used to create some of the  overlays the web page uses Shape with fills,  Text,  Paths Stroked.   A Photoshop script may be able to be written to read a file that has prepared weather information fot plotting weather front, storms areas etc and create the overlays  for the web page to use and save them for the web server to access.  Some of the plots may be a special weather symbol font would be like text on a path.

Capture.jpg

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 15, 2018 Feb 15, 2018

Copy link to clipboard

Copied

First, thank you for your assistance.  Yes, the only thing I want to be able to do is draw fronts.  If you check Google over the years I've asked this question many times.  Sadly, the answer is no, or use Inkscape/Illustrator.

However, the fronts you see on the Weather Service site are produced using javascript (those are the descriptions in my file, the actual points are elsewhere in the code) and Photoshop speaks some javascript.

That last sentence is the extent of my knowledge.  But if it's possible to do, I'll do my best to figure it out.  This is a big deal for me.

Again, thanks.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 15, 2018 Feb 15, 2018

Copy link to clipboard

Copied

How are you getting the data on the fronts that you want to plot - meaning what format is it in? I looked at the code you provided, but I'm not too sure how that would translate to PS. You can draw paths with PS and wither use a script or the Deco Fill script to create the symbols on the path. The deco fill would be fairly easy to use for the warm and cold fronts, but it woudn't really work with the stationary fronts, as you would need to create a pattern of both the warm and cold front symbols into one pattern, and that would not take the curves well. With scripting, you could apply different shaped along a path. But all this also depends on how you get your data. Do you get data points and connect the dots or do you freehand the front lines on an overlay of a map?

Here's just a sample of using the deco fill script on a path:

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 15, 2018 Feb 15, 2018

Copy link to clipboard

Copied

Any JavaScript for web browser or for Photoshop would need input data information prepared for plotting fronts on a map of a particular size vector paths on the map. And also the legion information.  The also needs to be stacking order as some of the pattern filled shapes are over other pattern filled shapes.   The input data to need provide all that information and the java script need to know how to parse and use the input data.  Do you have a source for that data  do you  know JavaScript and Photoshop well if not you need to get the input data and get JavaScript programmer that knows how to script Photoshop.   Will not be easy and may be quite expensive.  You would probably be better off looking for an existing solution

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Chuck and JJ -

This is open source US Government data and the only thing I wish to plot in this manner are fronts.  The frontal positions are here at a series of lat/lon points:  http://www.wpc.ncep.noaa.gov/exper/nationalforecastchart/data/fronts92f.js

Which is:

TROF.push([[[32.2, -118.3], [34.3, -120.8], [36.3, -122.3], [39.4, -123.8], [42.1, -124.0]], [[18.7, -122.9], [21.1, -121.6], [23.9, -118.8], [26.1, -117.4], [26.9, -116.4]], [[28.8, -110.5], [26.2, -109.2], [23.5, -107.8], [20.8, -106.9]], [[53.3, -94.0], [56.0, -88.4], [58.2, -85.0], [60.3, -82.8]], [[55.3, -110.9], [57.4, -107.3], [59.2, -105.7]], [[46.0, -111.6], [48.5, -112.1], [50.7, -112.4], [52.8, -112.4]], [[44.3, -120.5], [46.3, -119.2], [48.3, -119.2], [50.1, -118.8]], [[31.8, -97.3], [30.1, -98.4], [27.8, -99.3], [26.4, -99.5]], [[26.4, -99.5], [25.6, -99.3], [24.1, -99.2], [23.0, -99.1], [21.8, -99.3]]]);

COLD.push([[[49.7, -64.5], [48.4, -65.4], [46.2, -68.1], [44.3, -72.2], [42.1, -77.8]], [[31.2, -104.6], [30.8, -106.6], [30.7, -109.4], [31.4, -111.8], [32.6, -113.5]], [[33.7, -94.4], [32.7, -96.3], [32.1, -98.3], [31.5, -100.4], [31.2, -101.8]], [[43.4, -68.8], [42.1, -70.7], [40.9, -74.1], [39.9, -76.0], [38.8, -79.3], [38.1, -83.9], [37.0, -86.9], [36.2, -89.3], [35.6, -90.8]], [[46.2, -56.3], [45.0, -56.8], [43.8, -59.0], [43.9, -61.7]], [[49.9, -128.9], [49.1, -130.9], [49.1, -133.1], [49.9, -137.3], [50.8, -140.4], [52.0, -143.6]], [[54.5, -112.9], [55.0, -117.4], [56.5, -121.3], [58.2, -125.5]], [[31.9, -102.8], [33.0, -105.0], [35.3, -106.3], [39.2, -105.6]], [[42.2, -77.7], [41.3, -79.8], [40.6, -82.8], [40.4, -85.0]]]);

WARM.push([[[46.2, -56.3], [44.7, -53.1], [43.8, -51.0], [42.5, -48.2]], [[43.4, -68.8], [43.4, -68.6], [44.0, -66.9], [44.0, -64.6], [43.9, -62.6], [43.9, -61.5]], [[49.9, -129.0], [49.2, -127.7], [48.7, -125.7], [47.8, -123.8], [46.1, -122.3]], [[54.5, -112.7], [53.4, -111.4], [51.0, -111.0], [48.8, -109.7], [46.5, -108.3], [44.4, -106.0], [41.8, -104.9], [41.5, -104.7]]]);

STNRY.push([[[51.2, -57.1], [50.8, -59.4], [50.6, -62.2], [49.7, -64.1]], [[31.2, -101.8], [31.3, -103.1], [31.2, -104.6]], [[36.0, -90.0], [35.2, -91.9], [34.3, -93.4], [33.8, -94.2]]]);

OCFNT.push([[[47.9, -58.0], [47.4, -57.3], [46.6, -56.4], [46.0, -56.3]], [[51.9, -128.6], [50.7, -128.5], [49.7, -129.1]]]);

LOWS.push([[49.6, -63.8], [43.5, -68.5], [31.3, -104.4], [33.9, -94.1], [54.5, -112.3], [52.1, -128.3], [26.6, -99.4]]);

HIGHS.push([[43.2, -111.3], [39.7, -107.8], [40.4, -98.6], [43.8, -123.8], [27.8, -73.6]]);

Chuck - Until I figure out more on scripting, how did you do that?  For years I've been told it can't be done!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Your data point are just numbers pushed to arrays for plotting. This could easily be transferred to PS, if you know how those point relay to a open file/map.

To make the front lines, I started by making the symbols, by themselves:

Starting with a 100px X 100PX file, I drew a symbol in the either the lower or upper half of the canvas. I put a very small square at the opposite side then adjusted the opacity to 1, so you can't see the square, but it helps center the pattern:

Create a patten of the file:

Next I drew the front line, this is where you would use a script to plot the front's points and either have the script draw a path, or you draw it and connect the dots. I use the pen tool and used just a stroke, no fill:

Next, I used the path selection tool to select the entire path. then I copied it and pasted it into a new path in the path panel.

I went back to the layers panel and added a blank layer and then selected the pattern I created using pattern as the fill option and script with place along path as the options.

In the next dialog, you can set the spacing and size of the patterns

Here's the final:

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

In the long run I would like to automate plotting fronts, but just being able to draw them by hand is a huge deal in and of itself.

I do know the lat/lon which is spread across the1920x1080 pixels, so conversion should be reasonably straightforward.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

I'll have to take a look, when I have some more time.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Depending on the direction you draw the path, the front symbols will face up or down. So I would be best to draw two sets for both direction, and if one is the wrong way, just redo it with the other pattern. With a script, that could be incorporated.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

The good news is cold fronts are out of the north or west around 99% of the time.  I saw the cold front you drew.  There could be one that looks like that, but I've never seen it.  They all bow positively.

Warm fronts are mainly from the south and west.

Of course south of the equator it's all reversed and near the equator there are no fronts at all.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

Okay, this script will only work with this map, as the points are adjusted for it.

Here's what I got plotting just the cold front.:

#target photoshop

//1035 px = 40 long  259 per 10 ----25.875 per 1 deg 12.9375 per 1/2 deg

//628 px = 20 lat  157 per 5------31px per 1 deg

//93px to left 130 long//156 to top 50 long

//left edge is 133.5942

//top edge is 55.0322

//right edge 58.91787

//botton edge  20.41935

var leftDeg = 133.5942

var topDeg = 55.0322

var longUnit = 25.875

var latUnit = 31

var doc = activeDocument;

var base = doc.activeLayer

var COLD = new Array();

COLD.push([[[49.7, -64.5], [48.4, -65.4], [46.2, -68.1], [44.3, -72.2], [42.1, -77.8]], [[31.2, -104.6], [30.8, -106.6], [30.7, -109.4], [31.4, -111.8], [32.6, -113.5]], [[33.7, -94.4], [32.7, -96.3], [32.1, -98.3], [31.5, -100.4], [31.2, -101.8]], [[43.4, -68.8], [42.1, -70.7], [40.9, -74.1], [39.9, -76.0], [38.8, -79.3], [38.1, -83.9], [37.0, -86.9], [36.2, -89.3], [35.6, -90.8]], [[46.2, -56.3], [45.0, -56.8], [43.8, -59.0], [43.9, -61.7]], [[49.9, -128.9], [49.1, -130.9], [49.1, -133.1], [49.9, -137.3], [50.8, -140.4], [52.0, -143.6]], [[54.5, -112.9], [55.0, -117.4], [56.5, -121.3], [58.2, -125.5]], [[31.9, -102.8], [33.0, -105.0], [35.3, -106.3], [39.2, -105.6]], [[42.2, -77.7], [41.3, -79.8], [40.6, -82.8], [40.4, -85.0]]]);

//$.writeln(COLD[0].length)

for (var i =0;i<COLD[0].length;i++){

    doc.activeLayer = base;

    mkLayer ('COLD-'+i);

    doc.activeLayer.name = 'COLD ' + i;

    for (var j=0;j<COLD[0].length;j++){

       

        mkDot (COLD[0][1] , COLD[0][0])

        }

    

    }

function mkDot(x1,y2){

    var x = (leftDeg - Math.abs(x1))*longUnit

    var y =(topDeg- y2)*latUnit

    var idMk = charIDToTypeID( "Mk  " );

        var desc3 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref2 = new ActionReference();

            var idcontentLayer = stringIDToTypeID( "contentLayer" );

            ref2.putClass( idcontentLayer );

        desc3.putReference( idnull, ref2 );

        var idUsng = charIDToTypeID( "Usng" );

            var desc4 = new ActionDescriptor();

            var idType = charIDToTypeID( "Type" );

                var desc5 = new ActionDescriptor();

                var idClr = charIDToTypeID( "Clr " );

                    var desc6 = new ActionDescriptor();

                    var idRd = charIDToTypeID( "Rd  " );

                    desc6.putDouble( idRd, 255.000000 );

                    var idGrn = charIDToTypeID( "Grn " );

                    desc6.putDouble( idGrn, 0.000000 );

                    var idBl = charIDToTypeID( "Bl  " );

                    desc6.putDouble( idBl, 255.000000 );

                var idRGBC = charIDToTypeID( "RGBC" );

                desc5.putObject( idClr, idRGBC, desc6 );

            var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

            desc4.putObject( idType, idsolidColorLayer, desc5 );

            var idShp = charIDToTypeID( "Shp " );

                var desc7 = new ActionDescriptor();

                var idunitValueQuadVersion = stringIDToTypeID( "unitValueQuadVersion" );

                desc7.putInteger( idunitValueQuadVersion, 1 );

                var idTop = charIDToTypeID( "Top " );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idTop, idPxl, y-5 );

                var idLeft = charIDToTypeID( "Left" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idLeft, idPxl, x-5 );

                var idBtom = charIDToTypeID( "Btom" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idBtom, idPxl, y+5 );

                var idRght = charIDToTypeID( "Rght" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idRght, idPxl, x+5 );

            var idElps = charIDToTypeID( "Elps" );

            desc4.putObject( idShp, idElps, desc7 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

                var desc8 = new ActionDescriptor();

                var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );

                desc8.putInteger( idstrokeStyleVersion, 2 );

                var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );

                desc8.putBoolean( idstrokeEnabled, false );

                var idfillEnabled = stringIDToTypeID( "fillEnabled" );

                desc8.putBoolean( idfillEnabled, true );

                var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc8.putUnitDouble( idstrokeStyleLineWidth, idPxl, 14.000000 );

                var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );

                var idPnt = charIDToTypeID( "#Pnt" );

                desc8.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.000000 );

                var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );

                desc8.putDouble( idstrokeStyleMiterLimit, 100.000000 );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );

                desc8.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );

                desc8.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleAlignInside = stringIDToTypeID( "strokeStyleAlignInside" );

                desc8.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignInside );

                var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );

                desc8.putBoolean( idstrokeStyleScaleLock, false );

                var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );

                desc8.putBoolean( idstrokeStyleStrokeAdjust, false );

                var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );

                    var list1 = new ActionList();

                desc8.putList( idstrokeStyleLineDashSet, list1 );

                var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );

                var idBlnM = charIDToTypeID( "BlnM" );

                var idNrml = charIDToTypeID( "Nrml" );

                desc8.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );

                var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );

                var idPrc = charIDToTypeID( "#Prc" );

                desc8.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );

                var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );

                    var desc9 = new ActionDescriptor();

                    var idClr = charIDToTypeID( "Clr " );

                        var desc10 = new ActionDescriptor();

                        var idRd = charIDToTypeID( "Rd  " );

                        desc10.putDouble( idRd, 0.000000 );

                        var idGrn = charIDToTypeID( "Grn " );

                        desc10.putDouble( idGrn, 0.000000 );

                        var idBl = charIDToTypeID( "Bl  " );

                        desc10.putDouble( idBl, 255.000000 );

                    var idRGBC = charIDToTypeID( "RGBC" );

                    desc9.putObject( idClr, idRGBC, desc10 );

                var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

                desc8.putObject( idstrokeStyleContent, idsolidColorLayer, desc9 );

                var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );

                desc8.putDouble( idstrokeStyleResolution, 72.000000 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

            desc4.putObject( idstrokeStyle, idstrokeStyle, desc8 );

        var idcontentLayer = stringIDToTypeID( "contentLayer" );

        desc3.putObject( idUsng, idcontentLayer, desc4 );

        var idLyrI = charIDToTypeID( "LyrI" );

        desc3.putInteger( idLyrI, 2 );

    executeAction( idMk, desc3, DialogModes.NO );   

    }

function mergeDown(){

    var idMrgtwo = charIDToTypeID( "Mrg2" );

        var desc12 = new ActionDescriptor();

executeAction( idMrgtwo, desc12, DialogModes.NO );   

    }

function mkLayer(name){

    var idMk = charIDToTypeID( "Mk  " );

        var desc2 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref1 = new ActionReference();

            var idlayerSection = stringIDToTypeID( "layerSection" );

            ref1.putClass( idlayerSection );

        desc2.putReference( idnull, ref1 );

        var idlayerSectionStart = stringIDToTypeID( "layerSectionStart" );

        desc2.putInteger( idlayerSectionStart, 3 );

        var idlayerSectionEnd = stringIDToTypeID( "layerSectionEnd" );

        desc2.putInteger( idlayerSectionEnd, 4 );

        var idNm = charIDToTypeID( "Nm  " );

        desc2.putString( idNm, name);

    executeAction( idMk, desc2, DialogModes.NO );

    }

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

So taking the first set of data points, I used the curvature pen tool, and just clicked on them in order to create a path, then used the deco fill to add the symbols.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

Yes -- that's from the original file I sent.  Unreal!

Where more than one front is described they are separated by double square brackets.

All the data is always in this directory.  Each of the front files is for a single time step.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

Made some more changes. If you save the data file as a .js file, you can change the path for that file in line 11 of this script. It will read the file and use that data. It plots all the data points in different colors and saves each front to a separate layer.

#target photoshop

//1035 px = 40 long  259 per 10 ----25.875 per 1 deg 12.9375 per 1/2 deg

//628 px = 20 lat  157 per 5------31px per 1 deg

//93px to left 130 long//156 to top 50 long

//left edge is 133.5942

//top edge is 55.0322

//right edge 58.91787

//botton edge  20.41935

var wFile = new File('/c/AAA DATA/Photos/test/weather.js')

COLD = new Array()

TROF = new Array()

WARM = new Array()

STNRY = new Array()

OCFNT = new Array()

LOWS = new Array()

HIGHS = new Array()

$.evalFile (wFile, 50000)

var leftDeg = 133.5942

var topDeg = 55.0322

var longUnit = 25.875

var latUnit = 31

var doc = activeDocument;

var base = doc.activeLayer

var gpLayer

runLoop ('TORF', TROF,255,0,255);

runLoop ('COLD', COLD,0,0,255);

runLoop ('WARM', WARM,255,0,0);

runLoop ('STNRY', STNRY,255,255,0);

runLoop ('OCFNT', OCFNT,0,255,255);

runLoopZone ('LOWS', LOWS,0,255,0);

runLoopZone ('HIGHS', HIGHS,0,0,0);

function runLoop(fName,fArray,r,g,b){

    for (var i =0;i<fArray[0].length;i++){

        doc.activeLayer = base;

        mkLayer (fName+'-'+i);

        gpLayer = doc.activeLayer;

        doc.activeLayer.name = fName +'-'+ i;

        for (var j=0;j<fArray[0].length;j++){

           

            mkDot (fArray[0][1] , fArray[0][0], r, g, b);

            }

         doc.activeLayer = gpLayer;

         mergeDown ();

        }

}

function runLoopZone(fName,fArray,r,g,b){

    for (var i =0;i<fArray.length;i++){

        doc.activeLayer = base;

        mkLayer (fName+'-'+i);

        gpLayer = doc.activeLayer;

        doc.activeLayer.name = fName +'-'+ i;

        for (var j=0;j<fArray.length;j++){

           

            mkDot (fArray[1] , fArray[0], r, g, b);

            }

         doc.activeLayer = gpLayer;

         mergeDown ();

        }

}

function mkDot(x1,y2, red, green, blue){

    var x = (leftDeg - Math.abs(x1))*longUnit

    var y =(topDeg- y2)*latUnit

    var idMk = charIDToTypeID( "Mk  " );

        var desc3 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref2 = new ActionReference();

            var idcontentLayer = stringIDToTypeID( "contentLayer" );

            ref2.putClass( idcontentLayer );

        desc3.putReference( idnull, ref2 );

        var idUsng = charIDToTypeID( "Usng" );

            var desc4 = new ActionDescriptor();

            var idType = charIDToTypeID( "Type" );

                var desc5 = new ActionDescriptor();

                var idClr = charIDToTypeID( "Clr " );

                    var desc6 = new ActionDescriptor();

                    var idRd = charIDToTypeID( "Rd  " );

                    desc6.putDouble( idRd, red );

                    var idGrn = charIDToTypeID( "Grn " );

                    desc6.putDouble( idGrn, green );

                    var idBl = charIDToTypeID( "Bl  " );

                    desc6.putDouble( idBl, blue );

                var idRGBC = charIDToTypeID( "RGBC" );

                desc5.putObject( idClr, idRGBC, desc6 );

            var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

            desc4.putObject( idType, idsolidColorLayer, desc5 );

            var idShp = charIDToTypeID( "Shp " );

                var desc7 = new ActionDescriptor();

                var idunitValueQuadVersion = stringIDToTypeID( "unitValueQuadVersion" );

                desc7.putInteger( idunitValueQuadVersion, 1 );

                var idTop = charIDToTypeID( "Top " );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idTop, idPxl, y-5 );

                var idLeft = charIDToTypeID( "Left" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idLeft, idPxl, x-5 );

                var idBtom = charIDToTypeID( "Btom" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idBtom, idPxl, y+5 );

                var idRght = charIDToTypeID( "Rght" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idRght, idPxl, x+5 );

            var idElps = charIDToTypeID( "Elps" );

            desc4.putObject( idShp, idElps, desc7 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

                var desc8 = new ActionDescriptor();

                var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );

                desc8.putInteger( idstrokeStyleVersion, 2 );

                var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );

                desc8.putBoolean( idstrokeEnabled, false );

                var idfillEnabled = stringIDToTypeID( "fillEnabled" );

                desc8.putBoolean( idfillEnabled, true );

                var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc8.putUnitDouble( idstrokeStyleLineWidth, idPxl, 14.000000 );

                var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );

                var idPnt = charIDToTypeID( "#Pnt" );

                desc8.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.000000 );

                var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );

                desc8.putDouble( idstrokeStyleMiterLimit, 100.000000 );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );

                desc8.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );

                desc8.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleAlignInside = stringIDToTypeID( "strokeStyleAlignInside" );

                desc8.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignInside );

                var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );

                desc8.putBoolean( idstrokeStyleScaleLock, false );

                var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );

                desc8.putBoolean( idstrokeStyleStrokeAdjust, false );

                var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );

                    var list1 = new ActionList();

                desc8.putList( idstrokeStyleLineDashSet, list1 );

                var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );

                var idBlnM = charIDToTypeID( "BlnM" );

                var idNrml = charIDToTypeID( "Nrml" );

                desc8.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );

                var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );

                var idPrc = charIDToTypeID( "#Prc" );

                desc8.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );

                var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );

                    var desc9 = new ActionDescriptor();

                    var idClr = charIDToTypeID( "Clr " );

                        var desc10 = new ActionDescriptor();

                        var idRd = charIDToTypeID( "Rd  " );

                        desc10.putDouble( idRd, 0.000000 );

                        var idGrn = charIDToTypeID( "Grn " );

                        desc10.putDouble( idGrn, 0.000000 );

                        var idBl = charIDToTypeID( "Bl  " );

                        desc10.putDouble( idBl, 255.000000 );

                    var idRGBC = charIDToTypeID( "RGBC" );

                    desc9.putObject( idClr, idRGBC, desc10 );

                var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

                desc8.putObject( idstrokeStyleContent, idsolidColorLayer, desc9 );

                var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );

                desc8.putDouble( idstrokeStyleResolution, 72.000000 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

            desc4.putObject( idstrokeStyle, idstrokeStyle, desc8 );

        var idcontentLayer = stringIDToTypeID( "contentLayer" );

        desc3.putObject( idUsng, idcontentLayer, desc4 );

        var idLyrI = charIDToTypeID( "LyrI" );

        desc3.putInteger( idLyrI, 2 );

    executeAction( idMk, desc3, DialogModes.NO );   

    }

function mergeDown(){

    var idMrgtwo = charIDToTypeID( "Mrg2" );

        var desc12 = new ActionDescriptor();

executeAction( idMrgtwo, desc12, DialogModes.NO );   

    }

function mkLayer(name){

    var idMk = charIDToTypeID( "Mk  " );

        var desc2 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref1 = new ActionReference();

            var idlayerSection = stringIDToTypeID( "layerSection" );

            ref1.putClass( idlayerSection );

        desc2.putReference( idnull, ref1 );

        var idlayerSectionStart = stringIDToTypeID( "layerSectionStart" );

        desc2.putInteger( idlayerSectionStart, 3 );

        var idlayerSectionEnd = stringIDToTypeID( "layerSectionEnd" );

        desc2.putInteger( idlayerSectionEnd, 4 );

        var idNm = charIDToTypeID( "Nm  " );

        desc2.putString( idNm, name);

    executeAction( idMk, desc2, DialogModes.NO );

    }

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

I downloaded the file then changed line 11.  Runs perfectly, but all I get are the points, no fronts.  File attached.

Can line 11 reference the online file as opposed to a file local to my drive?

the map.psd - Google Drive

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 18, 2018 Feb 18, 2018

Copy link to clipboard

Copied

Yea, right now, you still need to connect the dots with the pen tool. Curvature pen tool works better for this, as you just need to touch the dots. I'll have to see about scripting paths for it. I don't think it will work with a file that isn't local.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 18, 2018 Feb 18, 2018

Copy link to clipboard

Copied

Chuck -

If you want to I'll be grateful -- but you've already done plenty, much more than I could have ever expected.

As far as the remote file, it's pretty simple to automate an ftp session and the urls are static.  Even I can do that!  So it will be local.

My last computer class was as a senior in high school, '67-'68.  Everything else I've sort of picked up.  All the toys I wanted as a kid exist today and I'm still curious enough to want to learn how to use them.

Again, thank you.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 18, 2018 Feb 18, 2018

Copy link to clipboard

Copied

I haven't tried accessing a web address to get a file. I've read that there might be some issues with what they call a sandbox and security. As far as drawing the paths and symbols for the fronts, it starts to get a bit more complicated. I can draw a path/shape from a script, but I need to know not only the anchor points for the path, which would be the data points, but I would have to guess on the anchor points handles to make the path smooth, rather than just straight lines. Once the path is drawn, the symbols would have to be added, and some how figured out which side of the path they belong based on just the data points and the direction the path is drawn. It's interesting, but will take some work.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

For a stationary front, you could draw both the warm and cold fronts then mask them:

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Chuck - you are currently my favorite person on Earth.  I can't begin to thank you enough.  I've been looking to do this since I first started using Photoshop, over a decade ago.

I also had a chance last night to look at your pattern drawing app for Photoshop.  Thanks for making this contribution to the community.

I hope you don't mind, but I'll be back with questions later (surely).

Again, thank you.

Geoff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Playing around with your data. I'm not really sure how it's used, but looking at the data, it is a series of arrays for each type of front. I played with the cold front data. It seems to be a series of nine arrays with a series of coordinates in each of the 9 arrays. So I wrote a script that creates a group for each of the nine arrays and then plots a dot for each of the coordinates. I have not idea if this is correct, and to spread the dots out, I multiplied each x & y value by 10 and added 1500 to the y values, as they were negative values. So if you start with a 1000px X 1000px document with the unit values set to pixels, you can see how this works.

#target photoshop

var doc = activeDocument;

var base = doc.activeLayer

var COLD = new Array();

COLD.push([[[49.7, -64.5], [48.4, -65.4], [46.2, -68.1], [44.3, -72.2], [42.1, -77.8]], [[31.2, -104.6], [30.8, -106.6], [30.7, -109.4], [31.4, -111.8], [32.6, -113.5]], [[33.7, -94.4], [32.7, -96.3], [32.1, -98.3], [31.5, -100.4], [31.2, -101.8]], [[43.4, -68.8], [42.1, -70.7], [40.9, -74.1], [39.9, -76.0], [38.8, -79.3], [38.1, -83.9], [37.0, -86.9], [36.2, -89.3], [35.6, -90.8]], [[46.2, -56.3], [45.0, -56.8], [43.8, -59.0], [43.9, -61.7]], [[49.9, -128.9], [49.1, -130.9], [49.1, -133.1], [49.9, -137.3], [50.8, -140.4], [52.0, -143.6]], [[54.5, -112.9], [55.0, -117.4], [56.5, -121.3], [58.2, -125.5]], [[31.9, -102.8], [33.0, -105.0], [35.3, -106.3], [39.2, -105.6]], [[42.2, -77.7], [41.3, -79.8], [40.6, -82.8], [40.4, -85.0]]]);

for (var i =0;i<COLD[0].length;i++){

    doc.activeLayer = base;

    mkLayer ('COLD-'+i);

    doc.activeLayer.name = 'COLD ' + i;

    for (var j=0;j<COLD[0].length;j++){

       

        mkDot (COLD[0][0]*10 , COLD[0][1] *10+1500)

        }

    

    }

function mkDot(x,y){

    var idMk = charIDToTypeID( "Mk  " );

        var desc3 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref2 = new ActionReference();

            var idcontentLayer = stringIDToTypeID( "contentLayer" );

            ref2.putClass( idcontentLayer );

        desc3.putReference( idnull, ref2 );

        var idUsng = charIDToTypeID( "Usng" );

            var desc4 = new ActionDescriptor();

            var idType = charIDToTypeID( "Type" );

                var desc5 = new ActionDescriptor();

                var idClr = charIDToTypeID( "Clr " );

                    var desc6 = new ActionDescriptor();

                    var idRd = charIDToTypeID( "Rd  " );

                    desc6.putDouble( idRd, 0.000000 );

                    var idGrn = charIDToTypeID( "Grn " );

                    desc6.putDouble( idGrn, 0.000000 );

                    var idBl = charIDToTypeID( "Bl  " );

                    desc6.putDouble( idBl, 0.000000 );

                var idRGBC = charIDToTypeID( "RGBC" );

                desc5.putObject( idClr, idRGBC, desc6 );

            var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

            desc4.putObject( idType, idsolidColorLayer, desc5 );

            var idShp = charIDToTypeID( "Shp " );

                var desc7 = new ActionDescriptor();

                var idunitValueQuadVersion = stringIDToTypeID( "unitValueQuadVersion" );

                desc7.putInteger( idunitValueQuadVersion, 1 );

                var idTop = charIDToTypeID( "Top " );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idTop, idPxl, y-5 );

                var idLeft = charIDToTypeID( "Left" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idLeft, idPxl, x-5 );

                var idBtom = charIDToTypeID( "Btom" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idBtom, idPxl, y+5 );

                var idRght = charIDToTypeID( "Rght" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc7.putUnitDouble( idRght, idPxl, x+5 );

            var idElps = charIDToTypeID( "Elps" );

            desc4.putObject( idShp, idElps, desc7 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

                var desc8 = new ActionDescriptor();

                var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );

                desc8.putInteger( idstrokeStyleVersion, 2 );

                var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );

                desc8.putBoolean( idstrokeEnabled, false );

                var idfillEnabled = stringIDToTypeID( "fillEnabled" );

                desc8.putBoolean( idfillEnabled, true );

                var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );

                var idPxl = charIDToTypeID( "#Pxl" );

                desc8.putUnitDouble( idstrokeStyleLineWidth, idPxl, 14.000000 );

                var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );

                var idPnt = charIDToTypeID( "#Pnt" );

                desc8.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.000000 );

                var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );

                desc8.putDouble( idstrokeStyleMiterLimit, 100.000000 );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );

                var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );

                desc8.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );

                var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );

                desc8.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );

                var idstrokeStyleAlignInside = stringIDToTypeID( "strokeStyleAlignInside" );

                desc8.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignInside );

                var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );

                desc8.putBoolean( idstrokeStyleScaleLock, false );

                var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );

                desc8.putBoolean( idstrokeStyleStrokeAdjust, false );

                var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );

                    var list1 = new ActionList();

                desc8.putList( idstrokeStyleLineDashSet, list1 );

                var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );

                var idBlnM = charIDToTypeID( "BlnM" );

                var idNrml = charIDToTypeID( "Nrml" );

                desc8.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );

                var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );

                var idPrc = charIDToTypeID( "#Prc" );

                desc8.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );

                var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );

                    var desc9 = new ActionDescriptor();

                    var idClr = charIDToTypeID( "Clr " );

                        var desc10 = new ActionDescriptor();

                        var idRd = charIDToTypeID( "Rd  " );

                        desc10.putDouble( idRd, 0.000000 );

                        var idGrn = charIDToTypeID( "Grn " );

                        desc10.putDouble( idGrn, 0.000000 );

                        var idBl = charIDToTypeID( "Bl  " );

                        desc10.putDouble( idBl, 255.000000 );

                    var idRGBC = charIDToTypeID( "RGBC" );

                    desc9.putObject( idClr, idRGBC, desc10 );

                var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );

                desc8.putObject( idstrokeStyleContent, idsolidColorLayer, desc9 );

                var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );

                desc8.putDouble( idstrokeStyleResolution, 72.000000 );

            var idstrokeStyle = stringIDToTypeID( "strokeStyle" );

            desc4.putObject( idstrokeStyle, idstrokeStyle, desc8 );

        var idcontentLayer = stringIDToTypeID( "contentLayer" );

        desc3.putObject( idUsng, idcontentLayer, desc4 );

        var idLyrI = charIDToTypeID( "LyrI" );

        desc3.putInteger( idLyrI, 2 );

    executeAction( idMk, desc3, DialogModes.NO );   

    }

function mergeDown(){

    var idMrgtwo = charIDToTypeID( "Mrg2" );

        var desc12 = new ActionDescriptor();

executeAction( idMrgtwo, desc12, DialogModes.NO );   

    }

function mkLayer(name){

    var idMk = charIDToTypeID( "Mk  " );

        var desc2 = new ActionDescriptor();

        var idnull = charIDToTypeID( "null" );

            var ref1 = new ActionReference();

            var idlayerSection = stringIDToTypeID( "layerSection" );

            ref1.putClass( idlayerSection );

        desc2.putReference( idnull, ref1 );

        var idlayerSectionStart = stringIDToTypeID( "layerSectionStart" );

        desc2.putInteger( idlayerSectionStart, 3 );

        var idlayerSectionEnd = stringIDToTypeID( "layerSectionEnd" );

        desc2.putInteger( idlayerSectionEnd, 4 );

        var idNm = charIDToTypeID( "Nm  " );

        desc2.putString( idNm, name);

    executeAction( idMk, desc2, DialogModes.NO );

    }

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

It's going to take me a little while to absorb this.  Meanwhile here's how those points work...

COLD.push([[[49.7, -64.5], [48.4, -65.4], [46.2, -68.1], [44.3, -72.2], [42.1, -77.8]],

This cold front starts at 49.7N Latitude and -64.5W Longitude.  OK -- it really should be W or - not both,  but you get the idea.  So, this first point is around the Gulf of St. Lawrence in Canada, then into Maine and so forth.  Fronts are a little fluid.  These lines are never exact.  Each front runs to the first double closing brackets.

They use a fixed url to store this data, so http://www.wpc.ncep.noaa.gov/exper/nationalforecastchart/data/fronts92f.js  will always contain data corresponding to what's on the map.

Chuck, thanks again.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 16, 2018 Feb 16, 2018

Copy link to clipboard

Copied

Ok, so I did have the right idea that the set of coordinates were for o e front - each array with a set of coordinate arrays. Just need to figure out the plotting in relation to a Photoshop image and unit value.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2018 Feb 17, 2018

Copy link to clipboard

Copied

Do you have a standard image you use for the map that I can download?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines