 			}
 		}
 		
+		private function getMetadataForProperty(propertyName:String):Object
+		{
+			if (!jsonData)
+				return null;
+			
+			var meta:Object;
+			if (!propertyName)
+			{
+				meta = {};
+				meta[GEOJSON_PROPERTY_NAME] = propertyName || '';
+				meta[ColumnMetadata.TITLE] = propertyName;
+				meta[ColumnMetadata.KEY_TYPE] = getKeyType();
+				meta[ColumnMetadata.DATA_TYPE] = DataTypes.GEOMETRY;
+				meta[ColumnMetadata.PROJECTION] = getProjection();
+			}
+			else if (jsonData.propertyNames.indexOf(propertyName) >= 0)
+			{
+				meta = {};
+				meta[GEOJSON_PROPERTY_NAME] = propertyName;
+				meta[ColumnMetadata.TITLE] = propertyName;
+				meta[ColumnMetadata.KEY_TYPE] = getKeyType();
+				
+				if (propertyName == keyProperty.value)
+					meta[ColumnMetadata.DATA_TYPE] = getKeyType();
+				else
+					meta[ColumnMetadata.DATA_TYPE] = jsonData.propertyTypes[propertyName];
+			}
+			return meta;
+		}
 		private static const GEOJSON_PROPERTY_NAME:String = 'geoJsonPropertyName';
 	}
 }

		var that:DataSourceNode = other as DataSourceNode;
		return that
			&& this.source == that.source
			&& StandardLib.compareDynamicObjects(this.metadata, that.metadata);
	}
	public function getLabel():String
	{

	import weave.api.data.ColumnMetadata;
	import weave.api.data.DataTypes;
	import weave.api.data.IDataSource;
	import weave.api.data.IQualifiedKey;
	import weave.api.data.IWeaveTreeNode;
	import weave.api.detectLinkableObjectChange;
	import weave.api.getCallbackCollection;
