Giter Club home page Giter Club logo

czml-writer's Introduction

czml-writer

This project provides .NET and Java libraries for writing CZML content for use with Cesium.

This project also contains the CZML specification which defines the structure of CZML.

Build status

License

Apache 2.0. czml-writer is free for both commercial and non-commercial use.

Downloads

.NET

Binary releases are available on NuGet, or on the releases page.

Java

Binary releases are available for download on the releases page.

Get Started

Check out the wiki, including the quick start. Also browse the forum for questions on Cesium.

czml-writer's People

Contributors

bagnell avatar cmorse avatar emackey avatar gbeatty avatar kring avatar kristiancalhoun avatar lilleyse avatar mramato avatar mrmattf avatar omarshehata avatar pjcozzi avatar shunter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

czml-writer's Issues

Bug in GrisuDotNet.Grisu.DoubleToString

this method sometimes renders the decimal in local notation, which breaks JSON.

Line 65 was replaced, which fixes the problem
writer.Write(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:R}", value));
//writer.Write("{0:R}", value);

Maybe there are other occurances which exhibit similar problems.

There is not writeEpoch in OrientationCesiumWriter

When i want to create a sensor, i need to set the orientation peoperty,and the result shuld be like that
"orientation":{ "interpolationAlgorithm":"LINEAR", "interpolationDegree":1, "epoch":"2012-03-14T16:00:00Z", "unitQuaternion":[ 0,0.5442469787907219,-0.3930414943582269,0.6791273595332279,0.29681583401707096, 60,0.5568574961878456,-0.3795119068692525,0.6694276502158563,0.31264526641282253, 120,0.5690856027377934,-0.3657216971011263,0.6592682247294563,0.32825999586928906, 180,0.5809229010307843,-0.3516803352070495,0.6486560598580954,0.3436492992805397, 240,0.5923612620368607,-0.33739746381396746,0.637598443295639,0.3588026083475122, 300,0.603392830688339,-0.3228828914006865,0.6261029686410711,0.3737095168355816, 360,0.614010031274122,-0.3081465855620958,0.6141775301837412,0.38835978772083696, 420,0.6242055726421669,-0.2931986661641189,0.6018303174821175,0.402743360220153, 480,0.633972453206541,-0.2780493983940966,0.5890698097397695,0.41685035670023496, 540,0.6433039657556208,-0.262709185711373,0.5759047699824437,0.4306710894608867, 600,0.6521937020581379,-0.24718856270292594,0.5623442390402289,0.4441960673878469 ] }

but when i use czml-writer to create the orientation property, there is no way to write the epoch

Cesium 1.0 to-do

  • Require a version property on the document object.
  • Remove BC code for pixelOffset
  • Remove BC code for Image properties
  • Remove extra conjugation in CZML quaternions
  • Remove existing vectors/sensors and add AGI extensions which will take their place.

1.0 push

  • Add a high-level Document class.
  • Write an explicit test case which will generate a CZML sample/gallery document.
  • Naming inconsistencies between types (rectangular/cartesian vs cartesian2/cartesian3, etc..)
  • Improve generated documentation
  • Review and streamline generated writers API
  • Does JSON schema have a way to define default values?

Ability to write an interval with a property

Here is my problem,
I am using Java to take a message passed in from a server and use that to write changes to CZML. we have our orientation property working fine, but we are using colors to determine a models temperature.

The czml writer will write the color property with and epoch and dates following, but the colors are interpolated and we need them to be changed immediately (time is of the essence, and colors are blue and red no aqua).

I have noticed there is no time interval with say color properties. I need to be able to write:

 "color": [
{
"interval" : "2012-08-04T16:00:00Z/2012-08-04T16:05:00Z",
"rgbaf" : [1, 0, 0, 1]
}, {
"interval" : "2012-08-04T16:01:00Z/2012-08-04T16:05:00Z",
"rgbaf" : [0, 1, 0, 1]
}, {
"interval" : "2012-08-04T16:02:00Z/2012-08-04T16:05:00Z",
"rgbaf" : [0, 0, 1, 1]
},
],

could this be done given a list of intervals and a list of colors?? i.e
IntervalWithProperty(List dates, List);
OR
IntervalWithProperty(List dates, PropertyType type, List value);

Or is there a workaround that I can do to make this work?

Document type identifier

It would be nice for the document object, which contains the version number, to also explicitly mention Cesium or Cesium Language or CZML so that any human inspecting such a stream can easily distinguish it from other types of JSON.

Animate viewFrom (Cesium czml)

I would like to move my camera smoothly around my aircraft. With viewer.trackedEntity = airplane, I have tried including multiple camera positions in czml:

"viewFrom" : {
	"epoch" : "2012-08-04T16:00:00Z",
	"cartesian" : [
	0, 100.0, 100.0, 100.0,
	100, 200.0, 200.0, 200.0
	]
}

But the camera stays locked in one position. Shouldn't this work? (https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/ViewFrom says "Interpolatable: yes")

Or is there a way to animate viewer.camera.position dynamically?

How to create a simple satellite trajectory

I use the. Net version of czml-writer.
I can run this, but I don’t know how to create a simple satellite trajectory.
Can we get its trajectory by some formula instead of listing it?

CesiumStreamWriter fails if using external network resource from behind firewall

If trying to create CZML from behind HTTP Proxy with network resource then CesiumStreamWriter fails.

Example:

	BillboardCesiumWriter billboard = packet.openBillboardProperty();
	billboard.writeColorProperty(123, 67, 0, 255);
	billboard.writeImageProperty(URI.create("http://cesiumjs.org/images/CesiumHeaderLogo.png"), CesiumResourceBehavior.EMBED);
	billboard.close();

One simple fix is adding check if http.proxy of https.proxy system property are set in System.property
then define in proxy before creating HttpWebRequest in CesiumFormattingHelper.

a/Java/CesiumLanguageWriter/translatedSrc/cesiumlanguagewriter/advanced/CesiumFormattingHelper.java
+++ b/Java/CesiumLanguageWriter/translatedSrc/cesiumlanguagewriter/advanced/CesiumFormattingHelper.java
@@ -16,6 +16,7 @@ import agi.foundation.compatibility.WebResponse;
 import cesiumlanguagewriter.*;
 import java.awt.image.RenderedImage;
 import java.io.InputStream;
+import java.net.Proxy;

 /**
  *
@@ -105,6 +106,21 @@ public final class CesiumFormattingHelper {
             return uri;
         }
         WebRequest request = WebRequest.create(uri);
+
+        // patch starts here 
+        final boolean isHttps = uri.startsWith("https");
+        String proxyHost = System.getProperty(isHttps ? "https.proxyHost" : "http.proxyHost", "");
+        if (!proxyHost.isEmpty()) {
+               String proxyPort = System.getProperty(isHttps ? "https.proxyPort" : "http.proxyPort", "");
+               if (!proxyPort.isEmpty()) {
+                       int port = Integer.parseInt(proxyPort);
+                       Proxy proxy = new Proxy(Proxy.Type.HTTP, new java.net.InetSocketAddress(proxyHost, port));
+                       request.setProxy(proxy);
+               }
+        }
+        // patch ends here
+
         HttpWebRequest httpWebRequest = (request instanceof HttpWebRequest) ? (HttpWebRequest) request : null;
         if (httpWebRequest != null) {
             httpWebRequest.setUserAgent("CesiumWriter");

quick start fail

When I select root directory \czml-writer\Java, I can't click "finish" button. And eclipse remind me "no projects are found to import".

Then I add .classpath and .project file to \czml-writer\Java. It works, I can click "finish" button now. But I can't click "Build All" button. I have no idea with this problem. Hope someone can help me. Thanks!

The content in .classpath and .project is listed below:

  • .classpath
      	<?xml version="1.0" encoding="UTF-8"?>
      	<classpath>
      		<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-13">
      			<attributes>
      				<attribute name="module" value="true"/>
      			</attributes>
      		</classpathentry>
      		<classpathentry kind="output" path="bin"/>
      	</classpath>
    
  • .project
      	<?xml version="1.0" encoding="UTF-8"?>
      	<projectDescription>
      		<name>Java</name>
      		<comment></comment>
      		<projects>
      		</projects>
      		<buildSpec>
      			<buildCommand>
      				<name>org.eclipse.jdt.core.javabuilder</name>
      				<arguments>
      				</arguments>
      			</buildCommand>
      		</buildSpec>
      		<natures>
      			<nature>org.eclipse.jdt.core.javanature</nature>
      		</natures>
      	</projectDescription>
    

Polygon with Holes and Multi Geometries

Hi,

We are building a proof of concept using Cesium and using the czml-writer. The latest version (master download (zip)), does not have the Polygon algorithms included and also the Shapefile projects have been removed from the project. Is the functionality like "eliminateHoles" to serialize data into a polygon with holes moved or how is this supported going forward with the project?
I have read previous forum posts that this is supported, can you please give me direction regarding this.

Thanks
Jannie

Z-ordering

In order to properly render CZML on the client, we need some form of Z-ordering in the specification itself. I believe this can easily be accomplished by giving each graphical type (Billboard/Point/Polyline/etc..) a constant value zOrder property. zOrder would start at 0 (bottom of the stack) and go up from there. Higher numbers are drawn on top of lower numbers. If no zOrder property is specified, it is assumed to be 0.

Cesium doesn't actually have support for z-ordering yet, but adding it to the spec now is easy enough and will help other clients who wish to use CZML.

KML wiki page

We've gotten a few questions recently on the mailing list about what parts of KML we support. We should have a wiki page that details this. It will be a good resources for folks evaluating our support and could encourage some contributions.

@mrmattf are you up for this?

Add LICENSE.md

There is a LICENSE.md in the DotNet directory, but not in the others. We should add a root-level LICENSE.md, even if it just points to the file in the DotNet directory and says it doesn't cover the schema.

Converter

Hello,
is there any free converter from czml to kml or shp ?

Incorrectly handle kml multitrack "altitudeMode"

When I converted a kml track file (generated via Google My Tracks) the altitude values in the resulting .czml file were all 0 (zero). Quick debug session showed that the individual tracks were treated as clampToGround even though they contained absolute altitude values. It looks like the MultiTrack specified the altitude but the setting is never passed into the individual tracks.

<gx:MultiTrack> <altitudeMode>absolute</altitudeMode> <gx:interpolate>1</gx:interpolate> <gx:Track> <when>2013-02-02T16:39:29.131Z</when> <gx:coord>-111.628725 40.567083 3222.300048828125</gx:coord> <when>2013-02-02T16:39:59.466Z</when>
...

multi polygon in same packet

Hi,
Is there any way to add multi polygon or PolygonCollection in the same packet?
Do I have to create a new packet for each new polygon?

I need something like that.

[
  {
    "id": "document",
    "version": "1.0",
    "name": "Cities"
  },
  {
    "id": "34",
    "name": "Istanbul",
    "polylineCollection": [
      {
        "positions": "x position",
        "followSurface": true,
        "clampToGround": true,
        "width": 5,
        "material": "black outline color"
      },
      {
        "positions": "y position",
        "followSurface": true,
        "clampToGround": true,
        "width": 5,
        "material": "black outline color"
      }
    ],
    "polygonCollection": [
      {
        "positions": "somewhere inside x position polyline",
        "material": "red"
      },
      {
        "positions": "somewhere inside x position polyline",
        "material": "yellow"
      },
      {
        "positions": "somewhere inside y position polyline",
        "material": "blue"
      }
    ],
    "position": []
  }
]

Maven Artifacts for Java

Maven repositories are extremely important to Java developers. As a Java developer I would like to be able to access the required czml-writer artifacts from Maven Central. You support nuget for .NET, why not support Maven for Java?

leadTime and trailTime documentation - default is not unlimited?

For both leadTime and trailTime it says

By default, the value is unlimited, which effectively results in drawing the entire available path of the object.

https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/Path

However, if a value is not set it doesn't appear to display either the trail or the lead at all.

Based on the documentation, I would expect to display the complete trail or lead for the path if they're not set.

According to the docs the default value is undefined which seems to be what is actually happening.
https://cesium.com/docs/cesiumjs-ref-doc/PathGraphics.html

https://sandcastle.cesium.com/#c=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

path should have color property directly

in the samples the color for a path is a property right below it

"path":{
  "color":[
    {
      "rgba":[
        255,255,0,255
      ]
    }
  ],
 ...
},

but in Code I find no representation for this. I tried the following, which renders complex JSON, but will not format the path accordingly

//doesn't work (no error, but visual no effect):
var path = packet.OpenPathProperty();
{
    var w = path.OpenMaterialProperty();
    {
        var c = w.OpenSolidColorProperty();
        c.WriteColorProperty(System.Drawing.Color.Yellow);
        c.Close();
    }
    w.Close();
}

Instead I had to manually render it (which works, but is bloated code):

path.Output.WritePropertyName("color");
path.Output.WriteStartSequence();
path.Output.WriteStartObject();
path.Output.WritePropertyName("rgba");
path.Output.WriteStartSequence();
path.Output.WriteValue(255);
path.Output.WriteValue(255);
path.Output.WriteValue(0);
path.Output.WriteValue(128);
path.Output.WriteEndSequence();
path.Output.WriteEndObject();
path.Output.WriteEndSequence();
path.Output.WriteLineBreak();

is this a missing feature or did I miss something?

regards, Tilli

Threading bug found, this our fix.

My team here at JHU-APL found a bug in the czml-writer, specifically the CachingCesiumUrlResolver.java file throws a null pointer exception. It seems to happen when our application writes out the same icon many times. I'm attaching my fix, perhaps it can be considered for submission.

-Jon Carmack

in CachingCesiumUrlResolver.java:

public final String resolveUrl(String url) {
    LinkedListNode<cesiumlanguagewriter.advanced.CachingCesiumUrlResolver.CacheItem> node = null;
                    LinkedListNode<cesiumlanguagewriter.advanced.CachingCesiumUrlResolver.CacheItem>[] out$node_1 = new LinkedListNode[] {
            null
        };
        boolean temp_0 = MapHelper.tryGetValue(m_dictionary, url, out$node_1);
        node = out$node_1[0];
        if (temp_0) {
            //if node is head, just read head
            if(m_lruList.getFirst() == node){
                return node.getValue().ResolvedUrl;
            }
                        //move to front
            else{
                m_lruList.remove(node);
                m_lruList.addFirst(node);
                return node.getValue().ResolvedUrl;
            }
        }
        //load image into data URI
        String resolvedUrl = CesiumFormattingHelper.downloadUrlIntoDataUri(url);
        addUrl(url, resolvedUrl);
        return resolvedUrl;
    }

Support isStartIncluded/isStopIncluded on intervals

Currently, values specified via interval always implicitly include the start and stop times, and subsequent intervals always replace previous intervals.

That is, if you have value 1 from t1 to t2, and value 2 from t2 to t3, there is no way to indicate that the value at t2 should be 1 rather than 2.

Cesium has isStartIncluded and isStopIncluded flags which already handle this on the client. Not sure what the syntax should be. Perhaps ISO interval syntax has a way to do this, though I doubt it.

Czml-writer Architecture Guide

Let's write a concise bird's eye architecture guide for the czml-writer library, similar to the guide for Cesium, to help developers write converters.

Focus on how to use czml-writer, but also briefly describe how the code for the library is generated from the schema.

This guide is strategically important because we want wide-spread adoption of CZML, which requires external contributions of converters. This guide will make the barrier to entry for writing a converter very low.

I recommend Inkscape for creating diagrams.

Epoch seconds can lose precision or overflow in extreme cases

When we write samples, we use the first sample time as the epoch time, and blindly use epoch seconds for all remaining samples. When the duration since the epoch increases past some maximum allowed duration (user configurable), we should either fall back to ISO strings for sample times, or close the packet and reopen a new packet with a new epoch time.

Some tests fail

The following tests fail on my machine:

CesiumLanguageWriterTests.TestGregorianDate.TestToStringThreadFormatProvider:
  Expected string length 24 but was 23. Strings differ at index 16.
  Expected: "Monday, January 01, 2001"
  But was:  "Monday, January 1, 2001"
  ---------------------------^

CesiumLanguageWriterTests.TestGregorianDateFormatting.TestToString:
  Expected string length 14 but was 13. Strings differ at index 8.
  Expected: "February, 2002"
  But was:  "February 2002"
  -------------------^

403错误,怎么配置User-Agent

Error: Server responded to https://api.github.com/repositories/3606738/releases/latest with status code 403:

Request forbidden by administrative rules. Please make sure your request has a User-Agent header (http://developer.github.com/v3/#user-agent-required). Check https://developer.github.com for other possible causes.

var res = request('GET', 'https://api.github.com/repos/AnalyticalGraphicsInc/cesium/releases/latest', { headers: { 'User-Agent': "my git account" }, });

Command line and web service czml converters

  • Command line tool(s) to convert from all supported formats to czml.
  • REST web service(s) to convert from all supported formats to czml. We also want to host this like http://cesium.agi.com/.
  • Both the command line and web service should have sensible defaults and customization options based on the input.

Include:

  • Unit tests.
  • User documentation.
  • Way to execute the web service without writing code, e.g. like https://dev.twitter.com/console.
  • Update the Quick Start and Contributor's Guide.

For related discussion, see https://groups.google.com/forum/#!topic/cesium-dev/TcaCJAbgsCE.

See @kring and @mramato for technical guidance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.